2016-08-11 21 views
4

名前== elasticsearchとserviceName == esのKubernetes PetSetがあります。それはポッドを作成し、期待通りに、彼らはelasticsearch-0elasticsearch-1のような名前を持っています。しかし、DNSは機能していないようです。 elasticsearch-0.esは解決しません(elasticsearch-0.defaultなどもありません)。あなたは、彼らが代わりに予測できるのランダムなように見える生成されたSRVレコードを見れば:Kubernetes PetSet DNSが動作しない

# nslookup -type=srv elasticsearch 
Server:        10.1.0.2 
Address:    10.1.0.2#53 

elasticsearch.default.svc.cluster.local    service = 10 100 0 9627d60e.elasticsearch.default.svc.cluster.local. 

誰もが任意のアイデアがありますか?


詳細は

ここでは、実際のP​​etSetやサービスの定義です:

--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: elasticsearch 
    labels: 
    app: elasticsearch 
spec: 
    ports: 
    - name: rest 
    port: 9200 
    - name: native 
    port: 9300 
    clusterIP: None 
    selector: 
    app: elasticsearch 
--- 
apiVersion: apps/v1alpha1 
kind: PetSet 
metadata: 
    name: elasticsearch 
spec: 
    serviceName: "es" 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: elasticsearch 
     annotations: 
     pod.alpha.kubernetes.io/initialized: "true" 
    spec: 
     terminationGracePeriodSeconds: 0 
     containers: 
     - name: elasticsearch 
     image: 672129611065.dkr.ecr.us-west-2.amazonaws.com/elasticsearch:v1 
     ports: 
      - containerPort: 9200 
      - containerPort: 9300 
     volumeMounts: 
     - name: es-data 
      mountPath: /usr/share/elasticsearch/data 
     env: 
      - name: POD_NAME 
      valueFrom: 
       fieldRef: 
       fieldPath: metadata.name 
      - name: ES_CLUSTER_NAME 
      value: EsEvents 
    volumeClaimTemplates: 
    - metadata: 
     name: es-data 
     annotations: 
     volume.alpha.kubernetes.io/storage-class: anything 
    spec: 
     accessModes: [ "ReadWriteOnce" ] 
     resources: 
     requests: 
      storage: 10Gi 

答えて

6

これは、ドキュメントを誤って読んで私の問題でした。 The docs say:

ネットワークIDには2つの部分があります。最初に、ペットを作成するドメインを制御するヘッドレスサービスを作成しました。このサービスによって管理されるドメインは、$(サービス名)。$(名前空間).svc.cluster.localという形式をとります。ここで、 "cluster.local"はクラスタドメインです。それぞれのペットが作成されると、一致するDNSサブドメインが取得されます。$(ペット名)。$(支配的なサービスドメイン)。支配的なサービスはペットセットのserviceNameフィールドで定義されます。

これは、serviceDomainフィールドの値が「統治サービスドメイン」の値であることを意味するものですが、それは意味しません。これは、serviceDomainの値が既存のヘッドレスサービスの名前と一致しなければならず、そのサービスが支配的なサービスドメインとして使用されることを意味します。そのようなサービスが存在しない場合、エラーは発生しません。あなたはペットのランダムなDNS名を取得するだけです。

関連する問題