无法解析同一 statefulset 中 pod 的主机名

时间:2021-04-27 14:26:53

标签: kubernetes azure-aks kubernetes-statefulset coredns

我正在配置一个部署 2 个 Jira DataCenter 节点的 statefulset。 statefulset 产生 2 个 pod。一切似乎都很好,直到 2 个 pod 尝试相互连接。他们使用短主机名jira-0jira-1来做到这一点。

jira-1 pod 在连接到 jira-0 时报告 UnknownHostException。无法解析主机名。

我阅读了有关添加无头服务的文章,但我还没有。添加后,我可以解析 FQDN,但对于短名称仍然没有运气。

然后我阅读了这个页面:DNS for Services and Pods 并添加了:

      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

这解决了我的问题,但我认为没有必要添加这个?

一些额外的信息:

  • 使用 CoreDNS 的 AKS 集群
  • Kubernetes v1.19.9
  • 网络插件:Kubenet
  • 网络政策:无

我的完整 yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: jira
  labels:
    app: jira
spec:
  clusterIP: None
  selector:
    app: jira
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: jira
spec:
  serviceName: jira
  replicas: 0
  selector:
    matchLabels:
      app: jira
  template:
    metadata:
      labels:
        app: jira
    spec:
      containers:
      - name: jira
        image: atlassian/jira-software:8.12.2-jdk11
        readinessProbe:
          httpGet:
            path: /jira/status
            port: 8080
          initialDelaySeconds: 120
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /jira/
            port: 8080
          initialDelaySeconds: 600
          periodSeconds: 10
        envFrom:
          – configMapRef:
              name: jira-config
        ports:
        - containerPort: 8080
      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

1 个答案:

答案 0 :(得分:1)

<块引用>

这解决了我的问题,但我认为没有必要添加这个?

来自StatefulSet documentation

<块引用>

StatefulSets 目前需要一个 Headless Service 来负责 Pod 的网络身份。 您有责任创建此服务。

<块引用>

上面的示例将创建三个名为 web-0、web-1、web-2 的 Pod。 StatefulSet 可以使用 Headless Service 来控制其 Pod 的域。

pod-identity 将是管理服务的子域,例如。在您的情况下,它将是例如:

jira-0.jira.default.svc.cluster.local
jira-1.jira.default.svc.cluster.local