我正在为我的 Nomad 集群构建一个自我配置的代理。为此,我需要检索集群中运行的所有作业,以及它们为每个运行的容器分配的 IP 和端口。这样我可以自动生成反向代理配置和负载均衡器。我必须通过 Nomad 或 Consul 的 API 来获取它,但我需要通过一个 API 调用来获取它。我知道我可以通过调用 Consul 的端点获得给定节点中的所有服务/v1/catalog/node/nomad-node-3
,但我必须指定节点。有没有我可以使用的端点?
问问题
445 次
1 回答
1
这是为 Fabio 负载均衡器执行此操作的代码:https ://github.com/fabiolb/fabio/blob/15565deb06bf2ef7a8b67f42e958c7b370bf29da/registry/consul/service.go
您会注意到, Fabio 实际上并没有查询所有正在运行的服务,只是查询正在通过的运行状况检查。我认为这是有道理的,您可能希望使用此策略,因为您可能不想将流量引导到不健康的服务。另一方面,这意味着 fabio 无法查看未通过健康检查但可能应该是可路由的服务。
在 fabio 在这里查询服务标签之后,该调用将为您提供正在传递的服务。这是 nomad 放置有关可以在何处找到这些服务的元数据(ip/port 等)的地方。
不确定这是否可以在单个请求中完成,因为列表服务端点不包含您需要的标记元数据。
回应评论的其他详细信息:
此代码使用等待索引和 consul 的 watch概念。你可以看到这里配置的。所以还是有一个很小的延迟,但是这个请求不是不断的轮询。它向 consul 发出出站请求并挂起,直到 consul 有新的更改要报告。在实践中,这非常快并且对我来说并没有导致延迟问题(尽管它们在技术上仍然存在,网络请求开销,重新查询标签等)
于 2020-12-04T22:58:38.153 回答