我正在玩Docker和Consul,我有一些关于代理服务映射的问题,特别是在docker环境中.假设我有一个服务名称"myGreatService"是简单的web nodejs helloworld应用程序,封装了名为"myGreatServiceImage"的docker镜像.从Consul文档中我了解到,当您注册服务(通过HTTP或服务定义文件)时,服务即将"连线"到代理/ consul节点(可以通过/ v1/catalog/service /检索有线节点) .因此,如果consul节点关闭(或节点运行状况检查确定它已关闭),那么"连接"到该消耗节点的所有服务将自动标记为关闭.我对吗 ?
如果我通过docker在一台主机上多次运行我的GreatServiceImage映像(由于"myGreatService"服务的多个实例),我应该运行多少个代理?每个主机管理该主机上的所有容器(所有服务实例)?或者可能是每个容器(服务实例)的单独代理?
如果服务的运行状况检查失败,则该服务将标记为关闭,如果您对该服务执行DNS查询,则不会显示该服务
dig @localhost -p 8500 apache.service.consul
Run Code Online (Sandbox Code Playgroud)
如果你打电话给api,你会看到该服务仍然列出.这是因为服务未被删除,只是标记为关闭.如果您要进行api调用以检查该服务的运行状况,它将显示为关闭.
curl localhost/v1/catalog/service/apache
curl localhost/v1/health/service/apache
Run Code Online (Sandbox Code Playgroud)
您可以将?传递标志添加到最后一次调用以仅接收健康服务.(就像dns查询一样)
curl localhost/v1/health/service/apache?passing
Run Code Online (Sandbox Code Playgroud)
如果主机上的consul代理失败,那么如果您向consul查询服务,则该主机上运行的所有服务都不会显示.(通过dns查询或通过api).
至于您应该运行的代理数量:每个主机运行一个consul代理.让您的服务通过当地领事代理的api进行注册.(或者在配置文件中预配置所有服务,但我建议您将其设置为自动注册的动态过程)