provisioning时如何知道不同节点服务的IP地址?

How to know the IP addresses of services on diferent nodes when provisioning?

我使用 Terraform 和 Chef 以及我在 Digital Ocean 上的基础设施进行配置。在一个节点上,我有 Grafana。此节点有一个脚本需要知道 MongoDB 和 Elasticsearch 在哪里,因为它会更新其仪表板。

我不知道 MongoDB 或 Elasticsearch 的 IP 是哪个,因为它们在配置时位于不同的节点上。

我该如何解决?

完全基于 Chef 的答案是使用 Chef 搜索 API。这允许查询基于属性的节点,在本例中可能是 roles:mongo 或类似的。 Chef search 是一个收敛速度相对较慢的系统,让 Chef 以正确的顺序在两侧运行可能需要几分钟。较新的专用工具,如 Consul 或 Eureka,可以在几毫秒内重新收敛。