【问题标题】:HAProxy to use DNS from operating system?HAProxy 从操作系统使用 DNS?
【发布时间】:2020-08-22 14:06:33
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: kubernetes dns haproxy


    【解决方案1】:

    除非您另有说明,否则 HAProxy 确实缓存已解析的 IP 似乎是正确的。

    正如您已经找到使用解析器的配置和自定义检查间隔应该可以解决问题(resolvers dns check inter 1000 和 hold 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

    【讨论】:

    • 谢谢。 parse-resolv-conf 是缺失的链接!
    • 先生,您救了我的命!我已经浪费了至少 40 小时试图让 Nginx 在不设置 DNS 和配置静态 IP 的情况下忽略离线主机。我在 2 小时左右搜索了这个配置,多亏了你,我现在使用 server xxx HOSTNAME:PORT resolvers mydns check inter 1000 init-addr none。非常感谢!
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多