2016-10-04 4 views
1

KubernetesのWebサイトの例とドキュメントに続いて、Googleに関する広範な調査が行われていますが、私のPod内のコンテナ間でDNS解決ができません。DNSがKubernetes PetSetと連携していません

私は2つのコンテナが定義されたサービスとPetSetを持っています。 PetSetとServiceをデプロイすると、それらは正常に起動して実行されますが、ホスト名または完全なドメイン名でコンテナのいずれかのホストにpingを実行しようとすると、宛先に到達できなくなります。私はIPアドレスでpingすることができます。私はそれが犯人かもしれないと思ったよう

apiVersion: v1 
kind: Service 
metadata: 
    name: ml-service 
    labels: 
    app: marklogic 
    annotations: 
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" 
spec: 
    #restartPolicy: OnFailure 
    clusterIP: None 
    selector: 
    app: marklogic 
    ports: 
    - protocol: TCP 
     port: 7997 
     #nodePort: 31997 
     name: ml7997 
    - protocol: TCP 
     port: 8000 
     #nodePort: 32000 
     name: ml8000 
    # ... More ports defined 
    #type: NodePort 

--- 
apiVersion: apps/v1alpha1 
kind: PetSet 
metadata: 
    name: marklogic 
spec: 
    serviceName: "ml-service" 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: marklogic 
     annotations: 
     pod.alpha.kubernetes.io/initialized: "true" 
    spec: 
     terminationGracePeriodSeconds: 30 
     containers: 
     - name: 'marklogic' 
      image: "{local docker registry ip}:5000/dcgs-sof/ml8-docker-final:v1" 
      imagePullPolicy: Always 
      command: ["/opt/entry-point.sh", "-l", "/opt/mlconfig.sh"] 
      ports: 
      - containerPort: 7997 
       name: ml7997 
      - containerPort: 8000 
       name: ml8000 
      - containerPort: 8001 
       name: ml8001 
      - containerPort: 8002 
       name: ml8002 
      - containerPort: 8040 
       name: ml8040 
      - containerPort: 8041 
       name: ml8041 
      - containerPort: 8042 
       name: ml8042 
      - containerPort: 8050 
       name: ml8050 
      - containerPort: 8051 
       name: ml8051 
      - containerPort: 8060 
       name: ml8060 
      env: 
      - name: POD_IP 
       valueFrom: 
       fieldRef: 
        fieldPath: status.podIP 
      lifecycle: 
      preStop: 
       exec: 
       command: ["/etc/init.d/MarkLogic stop"] 
      volumeMounts: 
      - name: ml-data 
       mountPath: /data 
    volumeClaimTemplates: 
    - metadata: 
     name: ml-data 
     annotations: 
      volume.alpha.kubernetes.io/storage-class: anything 
     spec: 
     accessModes: [ "ReadWriteOnce" ] 
     resources: 
      requests: 
      storage: 1Gi 

は私がtype: NodePort定義をコメントアウト、まだありません成功:

は、ここに私のKubernetesの設定ファイルです。

さらに、[email protected]:/$ docker exec b4d21c4bc065 /bin/bash -c 'nslookup marklogic-1.marklogic.default.svc.cluster.local'を実行すると名前を解決できません。

私は何が欠けていますか?

答えて

0

間違ったドメイン名を解決しています。 http://kubernetes.io/docs/user-guide/petset/#network-identity

を参照してください。あなたは、解決しようとする必要があります:

marklogic-0.ml-service.default.svc.cluster.local

すべてがデフォルトの名前空間、DNS内にある場合名前は次のとおりです。

<pod_name>.<svc_name>.default.svc.cluster.local

+0

クイック返信ありがとう! 私のサービス設定では、もともとヘッドレスサービスとして作成しました。 Noneの代わりに10.0.0.199のようなアドレスにclusterIPを設定すると、nslookupは失敗しますが、ホストから自分のコンテナに到達できます。 noneをclusterIPとして使用すると、ホストは相互に内部を見ることができますが、外部からアクセスすることはできません。これは非常に混乱しています!助言がありますか? – millerbill3

+0

外部からアクセスしたい場合は、それをサポートするクラウドプロバイダにサービスタイプ 'LoadBalancer'が必要です。外部に公開する場合は、別のサービスを作成することをおすすめします。 –

関連する問題