我们真的需要端口来实现无头服务吗?

时间:2018-07-05 17:22:00

标签: kubernetes

这可能是出于好奇而无法在Google上找到帮助的问题。

请考虑将Yaml的这一部分用于无头服务:

ports:
 - port: abcd  --> this line

我的疑问是,当无头服务的cluster-ip已经不存在时(因为它指向的是一组Pod),拥有服务端口有什么用? documentation中针对服务的dns记录指出:

  

“无头”(无群集IP)也为服务分配了DNS A记录,其格式为my-svc.my-namespace.svc.cluster.local。与普通服务不同,这解析为该服务选择的Pod的IP集。希望客户使用该集合,或者使用该集合中的标准循环选择。

因此,如果分配给无头服务的dns仅用于将端点插入到Pod中,那么在无头服务中具有端口功能的任何用例都有吗?

我已经看到人们在将端口值从无头服务(here)的定义中排除时遇到的问题。这似乎已经解决。但是,那么,我们真的有一个无头服务的端口功能用例吗?

1 个答案:

答案 0 :(得分:3)

  

但是,我们真的有一个无头服务的端口功能用例吗?

恕我直言,是的,因为Service并不是一个“随机IP地址”,否则将被称为DHCPIPAddress。在kubernetes中使用Service的想法是,您可以使用一个或多个(address, protocol, port)元组来使用某些网络功能,就像在非kubernetes世界中一样。

因此,如果您不关心无头Service的端口(在这种情况下,将ports:\n- port: 80\n丢掉并称其为平局,但是好处Service的strong>就是以kubernetes本身无法管理的方式公开集群外网络资源。我使用了这个技巧,通过创建无头Service(其名称与先前的Deployment相同,并且命名为ports:,与先前的{{ 1}}是预期的,但指向的是我控制的IP,而不是SDN中的IP。

这样做,所有传统的kubernetes Deploymentkube-dns$(SERVICE_THING_HOST)注入都能按预期工作,但是抽象了$(SERVICE_THING_PORT)暂时不在集群之外的事实。