1

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

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

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

4

1 回答 1

2

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

如果 pod 还需要可供其他服务和 pod 访问,您还可以设置第二个普通(非无头)服务。

于 2016-11-03T09:19:46.350 回答