4

我有一个名称 ==elasticsearch和 serviceName ==的 Kubernetes PetSet es。它确实创建了 pod,并且正如预期的那样,它们的名称类似于elasticsearch-0elasticsearch-1。但是,DNS 似乎无法正常工作。elasticsearch-0.es不解决(也不解决elasticsearch-0.default,等等)。如果您查看生成的 srv 记录,它们似乎是随机的而不是可预测的:

# 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
4

1 回答 1

6

这是我误读文档的问题。文档说:

网络身份有 2 个部分。首先,我们创建了一个无头服务来控制我们在其中创建 Pets 的域。此 Service 管理的域采用以下形式:$(service name).$(namespace).svc.cluster.local,其中“cluster.local”是集群域。在创建每个宠物时,它会获得一个匹配的 DNS 子域,格式为:$(petname).$(governing service domain),其中管理服务由 Pet Set 上的 serviceName 字段定义。

我认为该serviceDomain字段的值是“管理服务域”的值,但这不是它的意思。这意味着 的值serviceDomain必须与现有无头服务的名称匹配,并且该服务将用作管理服务域。如果不存在此类服务,您不会收到错误消息 - 您只会为您的宠物获得随机 DNS 名称。

于 2016-08-11T18:04:21.783 回答