2017-11-03 27 views
1

私はAzure(ACS)上でKubernetesでPostgresデータベースを配備しました。Kubernetes - サービスクラスターのIPアドレスとPodのIPアドレス

私はServiceと組み合わせたStatefulSetを使用しました。

apiVersion: apps/v1beta1 
kind: StatefulSet 
metadata: 
    name: postgres 
spec: 
    selector: 
    matchLabels: 
     app: postgres 
    serviceName: "postgres" 
    # 1 instance 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: postgres 
    spec: 
     containers: 
     # Postgres database 
     - name: postgres 
     image: postgres:10 
     ports: 
     - containerPort: 5432 
     volumeMounts: 
      - name: pv-postgres 
      mountPath: /var/lib/postgresql/data 
     env: 
     - name: POSTGRES_USER 
      value: postgres 
     - name: POSTGRES_DB 
      value: tariffbook_db 
     - name: PGDATA 
      value: /var/lib/postgresql/data 
     - name: POSTGRES_PASSWORD 
      valueFrom: 
      secretKeyRef: 
       name: postgres-secret 
       key: password 
     hostname: postgres 
     volumes: 
     - name: pv-postgres 
     # Upon node restart, restart the container 
     restartPolicy: Always 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: postgres 
    labels: 
    app: postgres 
spec: 
    ports: 
    - port: 5432 
    protocol: TCP 
    selector: 
    app: postgres 

Kubernetesは、データベースを展開し、KUBE-DNSに登録する:

kubectl exec -ti busybox -- nslookup postgres 
... 
Name:  postgres 
Address 1: 10.0.209.61 postgres.default.svc.cluster.local 

を今、私はpostgresのにpingを実行するとき、私は何の応答を受信しません。

kubectl exec -ti busybox -- ping postgres 
PING postgres (10.0.209.61): 56 data bytes 

--- postgres ping statistics --- 
14 packets transmitted, 0 packets received, 100% packet loss 

ポッドは、その内部のIPを介して到達することができます:10.244.0.46が、サービスはpostgresのポッドへのアクセスを提供されていません。

kubectl get pod --all-namespaces -o wide 
NAMESPACE  NAME           READY  
STATUS RESTARTS AGE  IP    NODE 
default  azure-files-pod         1/1  
Running 0   19h  10.244.2.16 k8s-agent-52f7ae4d-1 
default  busybox           1/1  
Running 12   12h  10.244.2.49 k8s-agent-52f7ae4d-1 
default  postgres-0          1/1  
Running 0   1m  10.244.0.46 k8s-agent-52f7ae4d-0 

私はDNS troubleshooting tipsを踏襲しているが、私はDNSの設定にエラーが気づいていません。

StatefulSetまたはサービスに何か問題がありますか?

ありがとうございました! よろしくお願いします。 Eric MANUGUERRA

+0

私は申し訳ありませんが、あなたも作成しています別々に表示されていないサービスオブジェクト? –

+0

はい私はpostgresサービスを配備しました。これはyamlコードの最後に記述されています。 –

答えて

0

サービスをpingするためのポートではなく、ポート5432だけを開いただけです。あなたはポート5432に接続しようとすると次のことができるようにする必要があります

kubectl exec -ti busybox -- telnet postgres.default.svc.cluster.local 5432 

または(あなたが本当にIPアドレスに直接接続しようとするべきではありません)

kubectl exec -ti busybox -- telnet 10.0.209.61 5432 
+0

あなたの答えをありがとう。 IMHO pingはICMPを使用し、telnetよりも低いレベルで動作します。 [here](https://serverfault.com/questions/309357/ping-a-specific-port)で説明されているポートは使用していません。しかし、あなたが私に与えたtelnetコマンドは働いています。実際には私の問題を解決するのに役立っています。サービスの完全修飾名postgres.default.svc.cluster.localを使って、コンテナからpostgresサービスにアクセスできます:-)! –

+0

ダイレクトサービスIPを使用しているのは良い方法ではありません。いずれの場合も、サービスではなくノードに対してpingを使用します。これで問題が解決した場合は、それを承認済みとしてマークできますか? – vascop