HAProxy 从操作系统使用 DNS?

HAProxy to use DNS from operating system?

我在 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)。它不会更新或重新解析 dns 名称。但是那台机器上的 curl 工作正常,所以操作系统正确地更新了那些 dns 条目的 ip 地址。所以看起来 haproxy 在启动时缓存了 ip 地址并且从不更改它们。

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

根据我在官方文档中看到的内容,libc 选项应该使用操作系统解析?我试过 init-addr libc 但它没有帮助,haproxy 仍然在机器上永远响应长 运行 503,dns 完美解析。

我还看到在使用 resolver 条目时可以进行一些微调,您可以在其中配置刷新时间等。这是否可能在 haproxy.cfg 中没有硬编码名称服务器并且只需使用来自操作系统的?

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