HAProxy使用操作系统的DNS?

问题描述 投票:1回答:1

我在我的hsproxy.cfg中为我的后端服务器使用了DNS名称,如

backend s0
    server server0 server0.x.y.local:8080

backend s1
    server server1 server1.x.y.local:8080

启动后,名称解析工作正常,但一旦后台服务器的ipadress发生变化,向haproxy的请求就会耗费很长时间(比如25秒),然后以503响应(原因:SC)。但是一旦后端服务器的ipadress发生变化,对haproxy的请求就会花费很长时间(比如25秒),然后回复503(原因:SC)。它不会更新或重新解析dns名称。但是一个 curl 的工作正常,所以操作系统正确地更新了这些 dns 条目的 ip adress。因此,看起来haproxy在启动时缓存了ip adress,并且从未改变它们。

我在kubernetes集群中使用haproxy作为pod(不知道这是否重要)。

根据我在官方文档中读到的内容,libc选项应该使用操作系统解析。我试过把 init-addr libc 但是没有用,haproxy在机子上的时候还是永远的响应长跑503,dns完美解析。

我也看到了,在使用一个 resolver 条目,在那里你可以配置刷新时间等。是否可以不在haproxy.cfg中硬编码nameservers,而只使用操作系统中的名字?

kubernetes dns haproxy
1个回答
3
投票

似乎是正确的,HAProxy确实会缓存解析的IP,除非你另有指示。

正如你已经发现的那样,使用解析器和自定义检查间隔的配置应该可以做到这一点(resolvers dns check inter 1000hold valid),但你说的也对,这需要一个 resolvers 部分也是如此。从HAProxy 1.9开始,你可以使用 parse-resolv-conf 来使用本地解析器。

resolvers mydns
  parse-resolv-conf
  hold valid 10s

backend site-backend
  balance leastconn
  server site server.example.com:80 resolvers mydns check inter 1000

HAProxy文档可以帮助您进行进一步的配置。https:/cbonte.github.iohaproxy-dconv1.9configuration.html#5.3.2-parse-resolv-conf。

© www.soinside.com 2019 - 2024. All rights reserved.