HaProxy – Is There Any Default Nameserver for HaProxy Resolvers?

haproxy

I use HaProxy to forward traffic to a backend server which has a dns name instead of network address:

backend default-backend
    server external somedomain.com:80

The problem is that there is a situation when it can become not resolvable.
In this case HaProxy says:

Server default-backend/external is going DOWN for maintenance (DNS NX status). 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
backend default-backend has no server available!

I would like HaProxy to check for DNS resolution again and start forwarding traffic whenever target DNS name is resolvable again.
The problem is that I have to declare resolvers section and at least one nameserver which can resolve such address like this:

resolvers rslvr
    nameserver dns0 8.8.8.8:53

What if I do not like to declare any resolvers? I just want HaProxy checked DNS resolution the same way it does on startup. Is it possible?

If I do not use a resolver, backend just stops working and does not check if this domain is available again. Same thing happens when I do not have any nameserver in resolvers section.

Is there any way to omit explicit nameserver declaration or maybe use some default resolver used by HaProxy on startup?

Best Answer

haproxy version 1.9 introduced a new parameter for the resolvers section which removes the need to manually list the nameservers.

parse-resolv-conf

See their docs for more info but essentially this allows you to replace

resolvers mydns
  nameserver dns1 10.0.0.1:53
  nameserver dns2 10.0.0.2:53
  hold valid           10s

with

resolvers mydns
  parse-resolv-conf
  hold valid           10s

assuming your resolv.conf (which is read by haproxy when you don't have a resolvers section) has 10.0.0.1:53 and 10.0.0.2:53 configured.