如何从其他Pod中解析Pod主机名?

7vux5j2d  于 2022-09-20  发布在  其他
关注(0)|答案(1)|浏览(250)
  • 我有2个示例运行在2个节点上,每个示例运行在不同的节点上。
  • 这些节点位于同一子网中,并且可以自己执行TCP/UDP/ICMP。

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

  • 钻探-分段-75cddd789-kbzsq
  • 钻探-分段-75cddd789-amsrj

**从Pod Drill-Staging-75cddd789-kbzsq我无法解析Drill-Staging-75cddd789-amsrj的主机名,反之亦然。**解析自身Pod的名称起作用。

我试着设置了各种dnsPolicy:

  • ClusterFirst:没有运气
  • 默认:运气不佳
  • ClusterFirstWithHostNet:运气不佳,it事件无法解析其自身节点的主机名
  • 无:未尝试(我认为这不是一个好方法)
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
gcuhipw9

gcuhipw91#

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

Pod只有在包含无头服务的特定条件下才会获得DNS名称,如文档中所述。具体来说,条件是:

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

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

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

其中,my-hostname是Pod的hostname字段,my-subdomain是Pod的subdomain字段。

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

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

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

相关问题