6
  • 我有 2 个 pod 在 2 个节点上运行,每个 pod 在不同的节点上运行。
  • 这些节点位于同一子网上,并且可以自己进行 TCP/UDP/ICMP。

这些 pod 有一些主机名,即:

  • 钻孔分期 75cddd789-kbzsq
  • 钻孔分期 75cddd789-amsrj

从 pod Drill-staging-75cddd789-kbzsq 我无法解析 Drill-staging-75cddd789-amsrj 的主机名,反之亦然。解析 self pod 的名称有效。

我尝试设置各种 dnsPolicies:

  • ClusterFirst:没有运气
  • 默认值:没有运气
  • ClusterFirstWithHostNet:没有运气,它事件无法解析它自己节点的主机名
  • 无:未尝试(我认为这不是一个好方法)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "app.name" . }}
  namespace: {{ .Values.global.namespace }}
spec:
  replicas: 2
  selector:
    matchLabels:
      app: {{ include "app.name" . }}
  template:
    metadata:
      labels:
        app: {{ include "app.name" . }}
    spec:
      containers:
      - name: {{ include "app.name" . }}
        image: ...
        resources:
          ...
        ports:
          ...
        imagePullPolicy: Always
      restartPolicy: Always
4

1 回答 1

17

通常,只有服务获得 DNS 名称,而不是 Pod。因此,默认情况下,您不能通过域名直接引用另一个 Pod,只能通过其 IP 地址。

Pod 仅在包含无头服务的某些条件下获得 DNS 名称,如文档中所述。具体来说,条件是:

  • Pod 有一个hostname字段
  • Pod 有一个subdomain字段
  • 有一个无头服务(在同一命名空间中)选择 Pod
  • 无头服务的名称等于 Pod 的subdomain字段

在这种情况下,每个 Pod 都会获得以下形式的完全限定域名:

my-hostname.my-subdomain.default.svc.cluster.local

Pod 的字段在哪里,my-hostnamehostnamePodmy-subdomainsubdomain字段。

注意:DNS 名称是为 Pod 的“主机名”而不是 Pod 的“名称”创建的。

您可以使用以下设置对此进行测试:

apiVersion: v1
kind: Service
metadata:
  name: my-subdomain
spec:
  selector:
    name: my-test
  clusterIP: None
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
  labels:
    name: my-test
spec:
  hostname: my-hostname-1
  subdomain: my-subdomain
  containers:
  - image: weibeld/ubuntu-networking
    command: [sleep, "3600"]
    name: ubuntu-networking
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-2
  labels:
    name: my-test
spec:
  hostname: my-hostname-2
  subdomain: my-subdomain
  containers:
  - image: weibeld/ubuntu-networking
    command: [sleep, "3600"]
    name: ubuntu-networking

应用此功能后,您可以执行到其中一个 Pod 中:

kubectl exec -ti my-pod-1 bash

并且您应该能够解析两个 Pod 的完全限定域名:

host my-hostname-1.my-subdomain.default.svc.cluster.local
host my-hostname-2.my-subdomain.default.svc.cluster.local

由于您从与目标 Pod 相同的命名空间发出请求,因此您可以将域名缩写为:

host my-hostname-1.my-subdomain
host my-hostname-2.my-subdomain
于 2019-12-10T07:59:45.977 回答