【GKE】pod間のアクセスと名前解決方法

kubenertes


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://サービス名.ネームスペース:ポート番号/