Networking 如何从其他pod解析pod主机名? 我有两个吊舱在两个节点上运行,每个吊舱在不同的节点上运行 这些节点位于同一子网中,可以自己使用TCP/UDP/ICMP

Networking 如何从其他pod解析pod主机名? 我有两个吊舱在两个节点上运行,每个吊舱在不同的节点上运行 这些节点位于同一子网中,可以自己使用TCP/UDP/ICMP,networking,kubernetes,kube-dns,kubernetes-networking,Networking,Kubernetes,Kube Dns,Kubernetes Networking,这些吊舱有一些主机名,即: 钻孔-分段-75cddd789-kbzsq 钻孔-分段-75cddd789-amsrj 从pod drill-staging-75cddd789-kbzsq中,我无法解析drill-staging-75cddd789-amsrj的主机名,反之亦然。解析自身pod的名称有效 我尝试设置了各种DNS策略: ClusterFirst:运气不好 默认:没有运气 ClusterFirstWithHostNet:运气不好,it事件无法解析其自身节点的主机名 无:未尝试(我认

这些吊舱有一些主机名,即:

  • 钻孔-分段-75cddd789-kbzsq
  • 钻孔-分段-75cddd789-amsrj
从pod drill-staging-75cddd789-kbzsq中,我无法解析drill-staging-75cddd789-amsrj的主机名,反之亦然。解析自身pod的名称有效

我尝试设置了各种DNS策略:

  • ClusterFirst:运气不好
  • 默认:没有运气
  • ClusterFirstWithHostNet:运气不好,it事件无法解析其自身节点的主机名
  • 无:未尝试(我认为这不是一个好方法)
通常,不是豆荚。因此,默认情况下,您不能通过域名直接引用另一个Pod,只能通过其IP地址

POD仅在包含无头服务的特定条件下获取DNS名称,例如。具体而言,条件是:

  • POD有一个
    hostname
    字段
  • POD有一个
    子域
    字段
  • 有一个headless服务(在同一名称空间中)选择pod
  • 无头服务的名称等于POD的
    子域
    字段
在这种情况下,每个Pod将获得以下形式的完全限定域名:

my-hostname.my-subdomain.default.svc.cluster.local
其中
my hostname
是Pod的
hostname
字段,
my subdomain
是Pod的
subdomain
字段

注意: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
应用此选项后,您可以将exec放入其中一个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

这回答了你的问题吗?我认为您需要显式地使用
podname.namespace.pod.cluster.local
。在大多数情况下,通过服务是更好的做法。@DavidMaze好吧,也许我把问题搞错了。我试图完成的是为ApacheDrill创建一个集群。每个钻舱都通过自己的主机名注册给动物园管理员。pod中的主机名不是FQDN,因此它们使用无法解析的地址注册。但他们需要下定决心并互相交谈。。。基本上,如果可以在yaml中将主机名设置为FQDN就足够了。不幸的是,Drill本身没有任何用于此的配置。。对于这种情况,还有其他解决方案吗?
host my-hostname-1.my-subdomain
host my-hostname-2.my-subdomain