我们正在运行服务的主机上使用领事代理(rabbitmq)为了验证服务是否就绪,我们定义了一个基于curl的健康检查。但是,我们使用registator使用env变量注入这个检查。服务\u检查\u脚本= curl hostname
:15672/....
问题是,我们还告诉consur代理它的主机名与主机名相同(我们必须有这个功能,因为我们想看到正确的主机名注册领事集群。
当领事代理运行健康检查时,它会在自己的容器中查找url。。。这显然失败了。。。有没有人知道如何定义这个健康检查(我们正在使用mesos来做),以便curl尝试连接到正确的ip?
1条答案
按热度按时间y1aodyip1#
您可以使用registrator的http运行状况检查(前提是在内部运行consul)
progrium/docker-consul
容器),例如:此检查将运行由提供的检查http脚本
docker-consul
,它使用docker api解析目标容器的ip和端口。另一个选项是配置consudns来监听docker的网桥ip(这已经在中完成了)
progrium/docker-consul
的run
脚本),并使用指向同一ip的全局dns选项启动docker守护程序,例如。docker -d --bip 10.0.42.1/24 --dns 10.0.42.1 --dns 8.8.8.8
.之后,领事dns将可在您的任何容器,包括
docker-consul
一,这意味着你可以跑curl http://my-app.service.consul:12345/howareyou
,甚至查询SRV
记录,例如dig -t SRV
,以获取服务的ip和端口。然后你可以加上10.0.42.1
给主人的resolv.conf
为了获得查询consol dns的能力,不仅可以在容器中查询,还可以从主机操作系统查询。首选方法imho是使用注册者的
SERVICE_CHECK_HTTP
,但无论如何,为容器设置consultdns是值得的。这两种方法都要求在每个应用程序主机上以客户机模式运行consur代理,但是当以这种模式运行consur代理时,使用的系统资源非常少,您几乎不会注意到。你需要它来进行健康检查:)