2016-08-11 69 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名称。