2

我正在玩 Docker 和 Consul,我有几个关于代理服务映射的问题,尤其是在 docker 环境中。假设我有一个服务名称“myGreatService”,它是简单的 web nodejs helloworld 应用程序,使用名为“myGreatServiceImage”的 docker 镜像封装。从 Consul 文档中,我确实了解到,当您注册服务(通过 HTTP 或服务定义文件)时,服务即将“连接”到代理/领事节点(可以通过 /v1/catalog/service/ 检索有线节点) . 因此,如果一个领事节点已关闭(或节点健康检查确定它已关闭),那么“连接​​”到该领事节点的所有服务都将自动标记为已关闭。我对吗 ?

如果我通过 docker 在单个主机上多次运行我的 GreatServiceImage 图像(导致多个“myGreatService”服务实例)我应该运行多少个代理?每个主机管理该主机上的所有容器(所有服务实例)?或者也许每个容器(服务实例)都有一个单独的代理?

4

1 回答 1

6

如果服务的运行状况检查失败,则该服务将被标记为关闭,并且如果您对该服务进行 DNS 查询,该服务将不会显示

dig @localhost -p 8500 apache.service.consul

如果您调用 api,您将看到该服务仍在列出。这是因为服务没有被删除,它只是被标记为关闭。如果您执行 api 调用来检查该服务的运行状况,它将显示为关闭。

curl localhost/v1/catalog/service/apache
curl localhost/v1/health/service/apache 

您可以将 ?passing 标志添加到最后一次调用以仅接收健康服务。(就像 dns 查询一样)

curl localhost/v1/health/service/apache?passing

如果主机上的 consul 代理失败,那么如果您向 consul 查询服务,则该主机上运行的所有服务都不会显示。(通过 dns 查询或通过 api)。

至于您应该运行的代理数量:每台主机运行一个领事代理。让您的服务通过您当地领事代理的 api 自行注册。(或在配置文件中预先配置所有服务,但我建议您将其设为动态的自我注册过程)

于 2015-04-27T14:18:34.040 回答