kubernetes 副本集中的 pods 如何在没有 kubernetes API 的情况下发现彼此并相互交谈?

How can pods within a kubernetes replica set discover and talk to each other without the kubernetes API?

我有一个应用程序使用 raft 从多个实例中选出一个领导者。这些实例使用八卦协议,因此它只需要知道另一个实例即可发现其余实例。

我计划 运行 每个实例作为一个 kubernetes pod,复制由复制控制器管理。我还将在这些节点之前放置一个服务,以便集群中的其他应用程序可以与其通信。

我的问题是:如何让副本集中的 pods 在没有 kubernetes API 的情况下相互发现?是否可以通过 DNS 实现,或者 kubernetes 是否提供了一些环境变量?

解决方案是使用无头服务。例如,我们可以部署一个名为 myservice-discovery 的无头服务。因为服务是无头的,所以它不做任何负载平衡或获取集群 ip 地址。要获取 pods 的 IP 地址,您可以向 DNS 服务器查询 myservice-discovery.mycluster 以获取 A 记录列表。

如果 pods 还需要其他服务可以访问并且 pods.

,您还可以设置第二个正常(非无头)服务