Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HAProxy SRV使用Consor DNS准备的查询记录负载平衡_Dns_Load Balancing_Haproxy_Consul_Service Discovery - Fatal编程技术网

HAProxy SRV使用Consor DNS准备的查询记录负载平衡

HAProxy SRV使用Consor DNS准备的查询记录负载平衡,dns,load-balancing,haproxy,consul,service-discovery,Dns,Load Balancing,Haproxy,Consul,Service Discovery,我正在尝试使用在Concur中注册的HAProxy服务,使用Concur的DNS SRV记录执行负载平衡 我的领事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

我正在尝试使用在Concur中注册的HAProxy服务,使用Concur的DNS SRV记录执行负载平衡

我的领事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="
还有领事准备的询问:

我在HAProxy中成功配置了barebone服务查询,并使用以下块:

backend my-service

    balance roundrobin
    server-template my-service-api 1 _my-service._tcp.service.consul check resolvers consul
但是,当我使用Consor准备的查询时,我得到一个套接字错误:HAProxy中给定服务上没有可用于TCP连接的端口错误:

backend companion_authnz

    balance roundrobin
    server-template my-service-api 1 _geo-my-service._tcp.query.consul check resolvers consul
我在HAProxy和Consour文档中都找不到关于在HAProxy中解决准备好的查询的任何信息

是否有人曾经有过使用SRV记录在HAProxy中插入Consor准备的查询的经验?

我使用的是领事1.1.0和HAProxy 1.8.9。谢谢

编辑:

通过使用记录并在配置文件中指定服务端口,我成功地在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.concur)解析是预期的,如concur的DNS接口文档部分所述。 领事的DNS配置为使用此表单解析服务(RFC 2782):

这就是为什么
\u my-service.\u tcp.service.consul
工作正常的原因

但是,我准备的查询也被配置为匹配此正则表达式:^geo-(.*)$,因此当我运行
dig\u geo-my-service.\u tcp.query.consul
,它在正则表达式中不匹配,因此没有解析。这就解释了为什么在遵守RFC2782标准地址的情况下,我无法解析准备好的查询

也就是说,HAProxy需要符合RFC 2782的地址来解析SRV记录。 为了解决这些限制,我必须对设置进行两项更改:

  • 我将准备好的查询正则表达式更改为^\u geo-(.*)$,以便RFC 2782地址匹配
  • 我在HAProxy配置文件中省略了协议(.tcp.),以便concur可以找到查询
  • 结果如下:

    $ 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标准应该对领事服务和准备好的查询都适用。

    “HAProxy需要符合RFC 2782的地址来解析SRV记录”帮了我大忙!确保在“解析程序”部分增加“已接受的负载大小”,否则当DNS查询的响应超过默认值512时,服务发现将无法工作。我建议将其设置为最大值<代码>已接受负载大小8192。裁判:
    $ 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="
    
    backend my-service
    
        balance roundrobin
        server-template my-service-api 1 _geo-my-service.query.consul check resolvers consul