我将dockerized应用程序拆分为几个容器(一些前端和后端服务器,负载均衡器,mysql,elasticsearch等)。负载平衡器的配置需要知道哪些容器已启动,因此我正在使用Consul服务发现注册服务。
但是我不确定在每个Docker容器上运行Consul代理,而不是使用Docker主机来监督所有正在运行的Docker容器并通过Consul的HTTP-API注册它们是否是一个好主意。
有什么可以遵循的最佳实践吗?
最佳答案
您无需在每个Docker容器上运行领事代理,只需通过将领事的DNS暴露给本地即可利用领事。以下内容并非来自容器,但无论如何我都会对我的想法有所了解。
以下是我用来运行代理的命令
consul agent -data-dir /var/lib/consul/ -config-dir /etc/consul.d/ -bind 10.X.X.X -dns-port 53 -join consul-master
注意:我已经为consul-master添加了一个/ etc / hosts条目,它具有IP,并且还在/etc/resolv.conf文件中为127.0.0.1添加了名称服务器。
目录/etc/consul.d/保存了我的服务配置文件。以下是一个示例:
{
"service": {
"name": "stackoverflow",
"tags": [
"example"
],
"port": 5000
}
}
现在,一旦我的领事代理运行,我就可以通过dig命令或http api请求检查具有领事代理(服务器/客户端)的任何主机上的服务,如下所示:
curl http://stackoverflow.service.consul:80/api/v1/ping
{"success":true,"message":"pong"}
对于DNS:
dig @127.0.0.1 -p 53 stackoverflow.service.consul
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.55.amzn1 <<>> @127.0.0.1 -p 53 tracker.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57167
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;tracker.service.consul. IN A
;; ANSWER SECTION:
tracker.service.consul. 0 IN A X.X.X.X
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul 7 11:29:01 2017
;; MSG SIZE rcvd: 56
希望能有所帮助并给出清晰的想法