如何在同一主机上的服务的consur容器中定义http健康检查?

6vl6ewon  于 2021-06-21  发布在  Mesos
关注(0)|答案(1)|浏览(547)

我们正在运行服务的主机上使用领事代理(rabbitmq)为了验证服务是否就绪,我们定义了一个基于curl的健康检查。但是,我们使用registator使用env变量注入这个检查。服务\u检查\u脚本= curl hostname :15672/....
问题是,我们还告诉consur代理它的主机名与主机名相同(我们必须有这个功能,因为我们想看到正确的主机名注册领事集群。
当领事代理运行健康检查时,它会在自己的容器中查找url。。。这显然失败了。。。有没有人知道如何定义这个健康检查(我们正在使用mesos来做),以便curl尝试连接到正确的ip?

y1aodyip

y1aodyip1#

您可以使用registrator的http运行状况检查(前提是在内部运行consul) progrium/docker-consul 容器),例如:

ENV SERVICE_CHECK_HTTP=/howareyou
ENV SERVICE_CHECK_INTERVAL=5s

此检查将运行由提供的检查http脚本 docker-consul ,它使用docker api解析目标容器的ip和端口。
另一个选项是配置consudns来监听docker的网桥ip(这已经在中完成了) progrium/docker-consulrun 脚本),并使用指向同一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代理时,使用的系统资源非常少,您几乎不会注意到。你需要它来进行健康检查:)

相关问题