gpt4 book ai didi

dns - HAProxy SRV 使用 Consul DNS 准备好的查询记录负载平衡

转载 作者:行者123 更新时间:2023-12-01 17:39:09 25 4
gpt4 key购买 nike

我正在尝试使用 Consul 的 DNS SRV 记录通过 HAProxy 以及在 Consul 中注册的服务执行负载平衡

我的 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="

我使用以下 block 成功在 HAProxy 中配置了准系统服务查询:

backend my-service

balance roundrobin
server-template my-service-api 1 _my-service._tcp.service.consul check resolvers consul

但是,当我使用 Consul 准备好的查询时,我在 HAProxy 中的给定服务上收到套接字错误:没有可用于 TCP 连接的端口错误:

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 动态解析端口

最佳答案

好吧,我明白了。

首先,服务 (_my-service._tcp.service.consul) 解析是预期的,如 this 中所述。 Consul 的 DNS 接口(interface)文档部分。Consul 的 DNS 配置为解析具有以下形式的服务 (RFC 2782):

_service._protocol[.service][.datacenter][.consul]

这就是 _my-service._tcp.service.consul 正常工作的原因。

但是,我准备好的查询也配置为匹配此正则表达式:^geo-(.*?)$,因此当我运行dig _geo-my-service._tcp时。 query.consul,它与正则表达式不匹配,因此无法解析。这解释了为什么我无法在遵守 RFC 2782 标准地址的同时解析准备好的查询。

话虽如此,HAProxy 需要符合 RFC 2782 的地址才能解析 SRV 记录。为了应对这些限制,我必须对我的设置进行两项更改:

  1. 我将准备好的查询正则表达式更改为 ^_geo-(.*?)$,以便 RFC 2782 地址匹配
  2. 我在 HAProxy 配置文件中省略了协议(protocol) (._tcp.),以便 Consul 能够找到查询

结果如下:

$ 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 _geo-my-service.query.consul check resolvers consul

总之,我认为这种行为有点奇怪,RFC 2782 标准对于 Consul 服务和准备好的查询应该同样有效。

关于dns - HAProxy SRV 使用 Consul DNS 准备好的查询记录负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com