HAProxy要从操作系统使用DNS?

时间:2020-05-07 10:03:52

标签: kubernetes dns haproxy

我在hsproxy.cfg中为后端服务器使用dns名称

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

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

启动后,名称解析可以正常工作。但是,一旦后端服务器的IP地址更改,请求haproxy的请求就会花费很长时间(例如25秒),然后以503响应(原因:SC)。它不会更新或重新解析dns名称。但是该机器上的curl可以正常工作,因此操作系统可以正确更新这些dns条目的ip地址。因此,看起来haproxy会在启动时缓存ip地址,而从不对其进行更改。

我正在使用haproxy作为kubernetes集群内部的pod(不确定是否重要)。

从我在官方文档中看到的内容来看,libc选项应该使用操作系统的解析吗?我曾尝试将init-addr libc放进去,但没有帮助,haproxy仍然可以在机器上永久运行503并永远响应,而dns可以完美解析。

我还看到使用resolver条目时可能会进行一些微调,您可以在其中配置刷新时间等。在haproxy.cfg中不使用硬编码名称服务器而仅使用操作系统中的硬编码名称服务器的情况下,是否有可能进行微调?系统吗?

1 个答案:

答案 0 :(得分:8)

除非另有说明,否则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.io/haproxy-dconv/1.9/configuration.html#5.3.2-parse-resolv-conf