====== 13 Kubernetes Nginxを立ててみる ====== ===== 1.nginx pod ===== 3つのnginxを立ててみる apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx-app template: metadata: labels: app: nginx-app spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 ==== create ==== kubectl create -f nginx.yaml # kubectl get deployments.apps -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 3/3 3 3 24s nginx nginx:latest app=nginx-app # kubectl get pod NAME READY STATUS RESTARTS AGE nginx-59bc74c488-669ng 1/1 Running 0 9m34s nginx-59bc74c488-csj8x 1/1 Running 0 9m34s nginx-59bc74c488-dc2zq 1/1 Running 0 9m34s ===== 2.確認用にNginxの表示変更 ===== ==== Podを確認 ==== # kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6c57499ddb-pjql2 1/1 Running 1 (17m ago) 55m 10.224.1.15 worker01 nginx-6c57499ddb-tfghq 1/1 Running 1 (17m ago) 55m 10.224.1.14 worker01 nginx-6c57499ddb-zg88c 1/1 Running 1 (17m ago) 55m 10.224.1.17 worker01 ==== Podそれぞれ表示を変える ==== kubectl exec -it nginx-6c57499ddb-pjql2 -- bash echo pod1 | tee /usr/share/nginx/html/index.html exit kubectl exec -it nginx-6c57499ddb-tfghq -- bash echo pod2 | tee /usr/share/nginx/html/index.html exit kubectl exec -it nginx-6c57499ddb-zg88c -- bash echo pod3 | tee /usr/share/nginx/html/index.html exit ===== 3.workerノードで確認 ===== root@worker01:~# curl 10.224.1.15 pod1 root@worker01:~# curl 10.224.1.14 pod2 root@worker01:~# curl 10.224.1.17 pod3 ===== 4.cluster IP 作成 ===== cluster ipの8080にアクセスが来ると、nginx-appへ渡す apiVersion: v1 kind: Service metadata: name: cluster-ip spec: type: ClusterIP ports: - name: cluster-port port: 8080 targetPort: 80 selector: app: nginx-app # kubectl create -f clusterIp.yaml # kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cluster-ip ClusterIP 10.105.186.186 8080/TCP 10m kubernetes ClusterIP 10.96.0.1 443/TCP 85m ===== 5.再度workerノードで確認 ===== cluster ipの8080にアクセスすると、podどれかにアクセスする root@worker01:~# curl 10.105.186.186:8080 pod3 root@worker01:~# curl 10.105.186.186:8080 pod2 root@worker01:~# curl 10.105.186.186:8080 pod1 root@worker01:~# curl 10.105.186.186:8080 pod2 root@worker01:~# curl 10.105.186.186:8080 pod1 root@worker01:~# curl 10.105.186.186:8080 pod2 root@worker01:~# curl 10.105.186.186:8080 pod1 root@worker01:~# curl 10.105.186.186:8080 pod2 root@worker01:~# curl 10.105.186.186:8080 pod1 ===== 6. ExternalIP用意 ===== apiVersion: v1 kind: Service metadata: name: external-ip spec: type: ClusterIP externalIPs: - 172.16.0.159 ports: - name: cluster-port port: 8080 targetPort: 80 selector: app: nginx-app # kubectl create -f externalIp.yaml # kubectl get svc external-ip NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE external-ip ClusterIP 10.101.128.182 172.16.0.159 8080/TCP 83s ===== 7.次は外部からアクセス可能 ===== root@jump:~# curl 172.16.0.159:8080 pod3 root@jump:~# curl 172.16.0.159:8080 pod1 root@jump:~# curl 172.16.0.159:8080 pod1 root@jump:~# curl 172.16.0.159:8080 pod3 root@jump:~# curl 172.16.0.159:8080 pod2 {{tag>Kubernetes}}