Pod間で通信してみる
Introduction to Kubernetesのチュートリアルを進めながらメモした内容です。
2つのnginxのpodをapplyし、pod間で通信してみましょう。
nginxのIPアドレスを確認する
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bastion 1/1 Running 0 2d19h 172.17.0.6 minikube <none> <none>
my-first-pod 1/1 Running 0 2d19h 172.17.0.5 minikube <none> <none>
コンテナに入る
kubectl exec -it [pod名] -- bash
コンテナ内での動作
# curlをインストールして
root@bastion:/# apt update && apt install -y curl
# curlコマンドを叩く
root@bastion:/# curl -i http://172.17.0.5/
HTTP/1.1 200 OK
<以下略>
通信できていることを確認できました。
Service を使って他の Pod にアクセスする
podの状態は常に変わっているので、Serviceを使って、ラベル情報をベースにアクセスさせるようにします。
nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-first-service
spec:
selector: # このセレクタに指定したラベルにマッチする Pod に Service へのアクセスが割り振られます
component: nginx
ports:
- protocol: TCP # このポートの IP プロトコル
port: 80 # このサービスによって公開されるポート
targetPort: 80 # サービスの対象となるポッドでアクセスするポートの番号または名前。
# apply
kubectl apply -f nginx-service.yaml
# 確認
kubectl get service
Serviceを介して、podにアクセスする
$ kubectl exec -it bastion -- bash
root@bastion:/# curl -i http://my-first-service/
HTTP/1.1 200 OK