【GKE】pod間のアクセスと名前解決方法
pod間のアクセスをする場合ですが、スケーリングやアップデートの際にpodは、作成と削除が繰り替えし行われるので、serviceを使用しアクセスします。
serviceへのアクセスする為の内部ドメインですが
サービス名.ネームスペース名.svc.cluster.local:ポート番号
でアクセスできるようになります。
またpod間のアクセスとドメインが本当にあっている為のテストをする為に、確認用のpodを作成してアクセスしてみます。
下記のymlを使用して確認用のpodを立ち上げます。
dnsutil.yamlという名前で作成します。
apiVersion: v1
kind: Pod
metadata:
name: dnsutils
labels:
name: dnsutils
spec:
containers:
- name: dnsutils
image: tutum/dnsutils
command:
- sleep
- "3600"
下記コマンドでpodを作成します。
kubectl create -f dnsutil.yaml
下記コマンドでpodの中に入ります。
kubectl exec -it dnsutils /bin/sh
podの中でnslookupでドメインにアクセスしてIPを取得できるか確認します。
nslookup サービス名.ネームスペース名.svc.cluster.local
IPが取得できれば成功です。
ClusterIPでの通信
serviceを外部公開したくないパターンもあると思います。
その場合ClusterIPでサービスを作成します。
同じnamespace内からのアクセスは下記でOK
(curlで通信確認する場合のコマンド)
curl http://サービス名:ポート番号/
namespace外からのアクセス
curl http://サービス名.ネームスペース:ポート番号/