【问题标题】:do we really need port for a headless service?我们真的需要端口来提供无头服务吗?
【发布时间】:2018-07-05 17:22:00
【问题描述】:

这可能是出于好奇而在谷歌上找不到帮助的问题。

将 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)。这似乎已经修复。但是,我们真的有无头服务的端口功能的用例吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

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

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

    因此,如果您不关心无头 Service 的端口,那也没关系,在这种情况下折腾 ports:\n- port: 80\n 并称其为平局,但 好处 headless Service 是以 kubernetes 本身无法管理的方式暴露集群外的网络资源。我使用这个技巧来帮助我们从一个集群过渡到另一个集群,方法是创建一个无头 Service,它的名字是之前的 Deployment 所期望的,而命名为 ports: 是之前的 Deployment 所期望的,但指向一个我控制的 IP,不在 SDN 内。

    这样做,所有传统的 kubernetes kube-dns$(SERVICE_THING_HOST)$(SERVICE_THING_PORT) 注入都按预期工作,但抽象出 _HOST 暂时居住在集群外的事实。

    【讨论】:

    • 非常感谢您的回复。我只有一个疑问:with the named ports: what the previous deployment expected,你能详细说明一下吗?
    • 使用命名端口,因为我们的Service(在这种特定情况下为rabbitmq)有一个命名端口:{"ports": [{"name": "amqp", "port": 5672, "targetPort": "amqp"}]},k8s 为我声明了$(RABBITMQ_SERVICE_PORT_AMQP),允许现有 Pod 使用新的外部 IP 及其命名的目标端口,而不更改 PodSpec
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2018-04-03
    • 2020-11-08
    • 2018-08-03
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多