HaProxy 解析器是否有任何默认名称服务器?

Kir*_*ill 5 haproxy

我使用 HaProxy 将流量转发到具有 dns 名称而不是网络地址的后端服务器:

backend default-backend
    server external somedomain.com:80
Run Code Online (Sandbox Code Playgroud)

问题是存在无法解决的情况。在这种情况下,HaProxy 说:

服务器默认后端/外部正在关闭以进行维护(DNS NX 状态)。0 个活动服务器和 0 个备用服务器。0 个会话处于活动状态,0 个重新排队,0 个剩余在队列中。后端默认后端没有可用的服务器!

我希望 HaProxy 再次检查 DNS 解析,并在目标 DNS 名称再次可解析时开始转发流量。问题是我必须声明resolvers部分和至少一个nameserver可以解决这样的地址的部分:

resolvers rslvr
    nameserver dns0 8.8.8.8:53
Run Code Online (Sandbox Code Playgroud)

如果我不喜欢声明任何解析器怎么办?我只希望 HaProxy 像启动时一样检查 DNS 解析。是否可以?

如果我不使用解析器,后端就会停止工作,并且不会检查该域是否再次可用。同样的事情发生时,我没有任何nameserverresolvers部分。

有什么方法可以nameserver省略显式声明或者使用 HaProxy 在启动时使用的一些默认解析器?

小智 7

haproxy 1.9 版为解析器部分引入了一个新参数,无需手动列出名称服务器。

parse-resolv-conf
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅他们的文档,但基本上这允许您替换

resolvers mydns
  nameserver dns1 10.0.0.1:53
  nameserver dns2 10.0.0.2:53
  hold valid           10s
Run Code Online (Sandbox Code Playgroud)

resolvers mydns
  parse-resolv-conf
  hold valid           10s
Run Code Online (Sandbox Code Playgroud)

假设您的 resolv.conf(当您没有解析器部分时由 haproxy 读取)配置了 10.0.0.1:53 和 10.0.0.2:53。