![Nombres de host en el archivo de configuración de HAProxy](https://rvso.com/image/623660/Nombres%20de%20host%20en%20el%20archivo%20de%20configuraci%C3%B3n%20de%20HAProxy.png)
Mi archivo haproxy.cfg tiene dos servidores backend que usan nombres de host:
server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check
server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
Estos nombres de host son parte de Amazon OpsWorks y se inyectan en /etc/hosts automáticamente cada vez que una instancia se activa o desactiva. Si intento reiniciar HAProxy cuando una de las instancias está inactiva, recibo el error:
[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
¿Hay alguna manera de decirle a HAProxy que verifique si un nombre de host es válido? Si es válido úsalo, si no, ignóralo.
Respuesta1
En haproxy >= 1.7, debería poder usar la init-addr
opción, especificando ninguna para evitar la resolución de DNS al inicio.
Desde eldocumentos:
init-addr {last | libc | none | <ip>},[...]*
Indique en qué orden se debe resolver la dirección del servidor al inicio si utiliza un FQDN. Se intenta resolver la dirección aplicando sucesivamente cada uno de los métodos mencionados en la lista delimitada por comas. Se utiliza el primer método que tiene éxito. Si se llega al final de la lista sin encontrar un método de trabajo, se genera un error. El método "último" sugiere elegir la dirección que aparece en el archivo de estado (ver "archivo-estado-del-servidor"). El método "libc" utiliza el solucionador interno de libc (gethostbyname() o getaddrinfo() dependiendo del sistema operativo y las opciones de compilación). El método "ninguno" indica específicamente que el servidor debe iniciarse sin ninguna dirección IP válida en estado inactivo. Puede resultar útil ignorar algunos problemas de DNS al iniciar y esperar a que la situación se solucione más tarde. Finalmente, se puede proporcionar una dirección IP (IPv4 o IPv6).
Entonces tu línea de configuración podría ser:
server s1 myhostname init-addr none
Respuesta2
No, no es posible desde haproxy.
Según el manual, address
en la server
línea de configuración está
[...] la dirección IPv4 o IPv6 del servidor. Alternativamente, se admite un nombre de host resoluble [...]
en otras palabras, no está permitido utilizar nombres de host que no se puedan resolver en la configuración.
Idea:
Cualquier parte de la cadena de dirección puede hacer referencia a cualquier número de variables de entorno precediendo su nombre con un signo de dólar ('$') y, opcionalmente, encerrándolas entre llaves ('{}'), de manera similar a lo que se hace en Bourne Shell.