Hashicorp Nomad and Consul API - 获取所有服务地址

Hashicorp Nomad and Consul API - Get all services addresses

我正在为我的 Nomad 集群构建一个自行配置的代理。为此,我需要检索集群中的所有作业 运行,以及它们为每个容器 运行 分配的 IP 和端口。这样我就可以自动生成反向代理配置和负载均衡器。 我必须通过 Nomad 或 Consul 的 API 获取此信息,但我需要在一次 API 调用中获取它。我知道我可以通过调用 Consul 的端点 /v1/catalog/node/nomad-node-3 来获取给定节点中的所有服务,但我必须指定节点。 我可以使用任何端点吗?

这是为 Fabio 负载平衡器执行此操作的代码:https://github.com/fabiolb/fabio/blob/15565deb06bf2ef7a8b67f42e958c7b370bf29da/registry/consul/service.go

您会注意到 here Fabio 实际上并没有查询所有 运行 的服务,只是查询通过的健康检查。我认为这是有道理的,您可能希望使用这种策略,因为您可能不想将流量引导至不健康的服务。另一方面,这意味着 fabio 无法看到未通过健康检查但可能应该是可路由的服务。

在 fabio 查询 service tags here 之后,该调用将为您提供正在传递的服务。这是游牧民族放置关于在哪里可以找到这些服务的元数据的地方(ip/port 等)。

不确定这是否可以在单个请求中完成,因为 list services 端点不包含您需要的标签元数据。


回复评论的其他详细信息:

此代码使用等待索引和 consul 的 concept of watches. You can see that configured here。所以仍然有一个非常小的延迟,但这个请求不是不断的轮询。它向 consul 发出出站请求并挂起,直到 consul 有新的更改要报告。在实践中,这是非常快的,并没有给我带来延迟问题(尽管它们在技术上仍然存在,网络请求开销,重新查询标签等)