这可能是一个基于好奇心的问题,在谷歌上找不到帮助。
考虑无头服务的这部分yaml:
ports:
- port: abcd --> this line
我的疑问是,当headless服务的cluster-ip已经为空时(因为它指向的是一组pod),为服务提供端口有什么用呢?服务文档中的dns记录指出:
“Headless”(无群集IP)服务还分配了一个DNS A记录,用于my-svc. my-namespace. svc. cluster. local格式的名称。与普通服务不同,这解析为服务所选Pod的IP集。客户端应使用该集,否则使用从该集中进行的标准循环选择。
因此,如果分配给headless服务的dns仅用于将端点连接到pod,那么在headless服务中是否存在端口功能的用例?
我看到人们在从headless服务(here)的定义中排除端口值时遇到的问题。这个问题似乎已经解决了。但是,我们真的有headless服务的端口功能的用例吗?
2条答案
按热度按时间92dk7w1h1#
但是,我们真的有无头服务的端口功能的用例吗?
恕我直言,是的:因为
Service
的概念不是“随机IP地址”--否则它将被称为DHCPIPAddress
。kubernetes中Service
的概念是,您可以使用(address, protocol, port)
的一个或多个元组来使用某些网络功能,就像在非kubernetes世界中一样。因此,如果您不关心headless
Service
的端口,也可以这样做,在这种情况下,将ports:\n- port: 80\n
扔进去,称之为平局。但是无头X1 M6 N1 X的好处是以Kubernetes本身无法管理的方式暴露额外的群集网络资源。我使用了这个技巧来帮助我们从一个集群过渡到另一个集群,方法是创建一个无头的Service
,它的名称与以前的Deployment
所期望的名称相同,与之前的Deployment
预期的名称为ports:
,但指向我控制的IP,不在SDN内。这样,所有传统的kubernetes
kube-dns
、$(SERVICE_THING_HOST)
和$(SERVICE_THING_PORT)
注入都按预期工作,但抽象掉了所述_HOST
暂时位于集群之外的事实。gijlo24d2#
我遇到了同样的问题,这里是答案:www.example.comhttps://github.com/kubernetes/kubernetes/issues/20488#issuecomment-178682638
引文:
"端口"与"目标端口"不同的概念不适用于无头服务。端口转换作为第4层负载平衡的一部分发生,但无头实际上意味着"没有负载平衡器"......这就是为什么我们要求X和Y在无头服务中相同。