如何在一个consul容器中为同一主机上的服务定义HTTP健康检查?

我们在运行服务的主机上使用一个consul代理。 (RabbitMQ)为了validation服务已经准备就绪,我们定义了一个基于curl的健康检查。 但是,我们正在使用注册者使用envvariables注入此检查。 SERVICE_CHECK_SCRIPT = curl hostname :15672 / ….

问题是,我们也告诉过代理,它的主机名和主机一样。 (我们必须拥有这个function,因为我们希望看到在consul集群中注册的正确的主机名。

当执行代理运行健康检查时,它会在自己的容器上查找URL …这显然失败了…是否有人知道如何定义此健康检查(我们正在使用mesos来执行此操作),以便curl将尝试连接到正确的IP?

您可以使用注册者的HTTP健康检查 (只要您在progrium/docker-consul容器中运行Consul),例如:

 ENV SERVICE_CHECK_HTTP=/howareyou ENV SERVICE_CHECK_INTERVAL=5s 

此检查将运行docker-consul提供的check-http脚本 ,该脚本使用Docker API parsing目标容器的IP和端口。

另一个select是configurationConsul DNS侦听Docker的桥接IP(已经在progrium/docker-consulrun脚本中完成 ),并启动Docker守护进程,并指向相同IP的全局DNS选项,例如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 ,甚至查询SRVlogging,例如与dig -t SRV一起获取服务的IP和端口。 然后,您可以将10.0.42.1添加到主机的resolv.conf以获得不仅在容器内而且在主机OS上查询Consul DNS的能力。

首选的方法是使用注册器的SERVICE_CHECK_HTTP ,但是为你的容器设置Consul DNS是值得的。

这两种方法都需要在每个应用程序主机上以客户端模式运行Consul代理,但Consul代理在此模式下运行时会使用您很less注意到的less量系统资源。 而你无论如何需要它来执行健康检查:)

Interesting Posts