【发布时间】:2018-06-20 15:08:03
【问题描述】:
我正在尝试使用在 Consul 中注册的服务通过 HAProxy 执行负载平衡,使用 Consul 的 DNS SRV 记录。
我的 Consul DNS 已正确配置以解决以下问题:
$ dig my-service.service.consul SRV
...
;; ANSWER SECTION:
my-service.service.consul. 0 IN SRV 1 1 8000 node1.node.dc.consul.
;; ADDITIONAL SECTION:
node1.node.dc.consul. 10 IN A X.X.X.X
node1.node.dc.consul. 10 IN TXT "consul-network-segment="
还有一个领事准备好的查询:
$ dig geo-my-service.query.consul SRV
...
;; ANSWER SECTION:
geo-my-service.query.consul. 10 IN SRV 1 1 8000 node1.node.dc.consul.
;; ADDITIONAL SECTION:
node1.node.dc.consul. 10 IN A X.X.X.X
node1.node.dc.consul. 10 IN TXT "consul-network-segment="
我在 HAProxy 中成功配置了准系统服务查询,使用以下代码块:
backend my-service
balance roundrobin
server-template my-service-api 1 _my-service._tcp.service.consul check resolvers consul
但是,当我使用 Consul 准备好的查询时,我在 HAProxy 中的给定服务上收到 Socket error: No port available for the TCP connection 错误:
backend companion_authnz
balance roundrobin
server-template my-service-api 1 _geo-my-service._tcp.query.consul check resolvers consul
我在 HAProxy 和 Consul 文档中都找不到任何关于解决 HAProxy 中准备好的查询的信息。
有没有人有过使用 Consul 准备查询并使用 SRV 记录将它们插入 HAProxy 的经验?
我正在使用 Consul 1.1.0 和 HAProxy 1.8.9。谢谢!
编辑:
我通过使用 A 记录并在配置文件中指定服务端口成功地将准备好的查询插入 HAProxy:
backend my-service
balance roundrobin
server-template my-service-api 1 geo-my-service.query.consul:8000 check resolvers consul
但是,最好使用 SRV 记录以便 HAProxy 动态解析端口。
【问题讨论】:
标签: dns load-balancing haproxy consul service-discovery