Consul:在不知道现有成员 IP 的情况下加入

Consul: join without knowing IP of existing members

要将新代理加入一组 consul 成员,需要知道至少一个现有成员的 IP。 我必须支持我不知道任何现有组成员的 IP 的场景。在这种情况下,人为干预是不可能的,因为服务发现必须 运行 完全自动。

我的解决方案:我可以通过广播或多播向网络中的其他计算机发送消息。每台计算机都托管一个我将实施的自定义服务。该服务使用领事正在侦听的 IP 地址回复此特殊 broadcast/multicast 消息(例如:"Looking for existing cluster members")。然后该服务将从网络获得一个或多个回复,并使用其中一个 IP 地址加入集群。

有没有人有更好的办法来解决这个问题?是否有现有的库可以解决这个问题?

Hashicorp 作为 Atlas 的一部分提供免费服务来做到这一点:https://www.consul.io/docs/guides/atlas.html

无需自定义服务的其他更简单的方法:

  • 在服务器加入 Consul 集群之前可以访问的第三方 DNS 中公开 Consul 服务器。或者,有一个公开的 http 服务 returns 要加入的 IP 并使用 curl 或其他东西来获取 IP。使用 Consul 保持 IP 更新。
  • 如果您 运行 在 AWS 或提供机器元数据的类似服务中,请使用该服务标记您的 Consul 框,然后使用该服务的查询功能执行类似 "find servers that have tag Consul and are running" 的操作并将它们传递给 -join.