【kubernetes】【eks】Kubernetesでingressリソースを作って、パスごとにそれぞれ対応するPodへルーティングする設定をする

---
apiVersion: v1
kind: Service
metadata:
name: sample-ingress-svc-1
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8888
targetPort: 80
selector:
ingress-app: sample1
---
apiVersion: v1
kind: Pod
metadata:
name: sample-ingress-apps-1
labels:
ingress-app: sample1
spec:
containers:
- name: nginx-container
image: nginx:1.12
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: sample-ingress-svc-2
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8888
targetPort: 80
selector:
ingress-app: sample2
---
apiVersion: v1
kind: Pod
metadata:
name: sample-ingress-apps-2
labels:
ingress-app: sample2
spec:
containers:
- name: nginx-container
image: nginx:1.12
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: sample-ingress-default
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8888
targetPort: 80
selector:
ingress-app: default
---
apiVersion: v1
kind: Pod
metadata:
name: sample-ingress-default
labels:
ingress-app: default
spec:
containers:
- name: nginx-container
image: nginx:1.12
ports:
- containerPort: 80
kubectl apply -f sample-ingress-apps.yaml
出力結果
service/sample-ingress-svc-1 created
pod/sample-ingress-apps-1 created
service/sample-ingress-svc-2 created
pod/sample-ingress-apps-2 created
service/sample-ingress-default created
pod/sample-ingress-default created
kubectl exec -it sample-ingress-apps-1 -- mkdir /usr/share/nginx/html
/path1/
kubectl exec -it sample-ingress-apps-1 -- cp /etc/hostname /usr/share
/nginx/html/path1/index.html
kubectl exec -it sample-ingress-apps-2 -- mkdir /usr/share/nginx/html
/path2/
kubectl exec -it sample-ingress-apps-2 -- cp /etc/hostname /usr/share
/nginx/html/path2/index.html
kubectl exec -it sample-ingress-default -- cp /etc/hostname /usr/share
/nginx/html/index.html
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/tls.key
-out ~/tls.crt -subj "/CN=sample.example.com"
kubectl create secret tls --save-config tls-sample --key ~/tls.key
--cert ~/tls.crt
出力結果
secret/tls-sample created
annotations
のところはEKS用でIngressを使う場合につける識別子
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: sample-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
rules:
- host: sample.example.com
http:
paths:
- path: /path1/*
backend:
serviceName: sample-ingress-svc-1
servicePort: 8888
- path: /path2/*
backend:
serviceName: sample-ingress-svc-2
servicePort: 8888
backend:
serviceName: sample-ingress-default
servicePort: 8888
tls:
- hosts:
- sample.example.com
secretName: tls-sample
kubectl apply -f sample-ingress.yaml
出力結果
ingress.extensions/sample-ingress created
curl http://<ELBのDNS名>/path1/index.html -H "Host: sample.example.com"
出力結果
sample-ingress-apps-1
curl http://<ELBのDNS名>/path2/index.html -H "Host: sample.example.com"
出力結果
sample-ingress-apps-2
curl http://<ELBのDNS名>/index.html -H "Host: sample.example.com"
出力結果
sample-ingress-default