2016-08-11 71 views
4

我有一個名爲== elasticsearch和serviceName == es的Kubernetes PetSet。它確實創建了pod,並且正如預期的那樣,它們的名稱如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. 

任何人有什麼想法?


詳細

這裏的實際PetSet和服務定義:

--- 
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說:

網絡標識有2個部分。首先,我們創建了一個無頭的服務,用於控制我們創建寵物的域。由此服務管理的域採用以下格式:$(服務名稱)。$(namespace).svc.cluster.local,其中「cluster.local」是集羣域。當每個寵物被創建時,它會得到一個匹配的DNS子域,格式如下:$(petname)。$(管理服務域),其中管理服務由Pet Set上的serviceName字段定義。

我認爲這意味着serviceDomain字段的值是「執政服務領域」的價值,但這不是這個意思。這意味着serviceDomain的值必須與現有無頭服務的名稱匹配,並且該服務將用作管理服務域。如果沒有這樣的服務存在,您不會收到錯誤 - 您只需爲您的寵物獲取隨機的DNS名稱。