Nomes de host no arquivo de configuração HAProxy

Nomes de host no arquivo de configuração HAProxy

Meu arquivo haproxy.cfg possui dois servidores back-end usando nomes 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

Esses nomes de host fazem parte do Amazon OpsWorks e são injetados em /etc/hosts automaticamente sempre que uma instância é ativada ou desativada. Se eu tentar reiniciar o HAProxy quando uma das instâncias estiver inativa, recebo o erro:

[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.

Existe uma maneira de informar ao HAProxy para verificar se um nome de host é válido? Se for válido, use-o; caso contrário, ignore-o.

Responder1

No haproxy >= 1.7, você poderá usar a init-addropção, especificando none para impedir a resolução de DNS na inicialização.

Dedocumentos:

init-addr {last | libc | none | <ip>},[...]*

Indique em que ordem o endereço do servidor deve ser resolvido na inicialização se ele usar um FQDN. São feitas tentativas de resolver o endereço aplicando sucessivamente cada um dos métodos mencionados na lista delimitada por vírgulas. O primeiro método bem-sucedido é usado. Se o final da lista for alcançado sem encontrar um método de trabalho, um erro será gerado. O método "último" sugere escolher o endereço que aparece no arquivo de estado (consulte "arquivo de estado do servidor"). O método "libc" usa o resolvedor interno da libc (gethostbyname() ou getaddrinfo() dependendo do sistema operacional e das opções de construção). O método "none" indica especificamente que o servidor deve iniciar sem nenhum endereço IP válido em estado inativo. Pode ser útil ignorar alguns problemas de DNS na inicialização, aguardando que a situação seja corrigida mais tarde. Finalmente, um endereço IP (IPv4 ou IPv6) pode ser fornecido.

Então sua linha de configuração poderia ser:

server s1 myhostname init-addr none

Responder2

Não, não é possível dentro do haproxy.

De acordo com o manual, o addressna serverlinha de configuração é

[...] o endereço IPv4 ou IPv6 do servidor. Alternativamente, um nome de host resolvível é suportado [...]

em outras palavras, não é permitido usar nomes de host não resolvíveis na configuração.

Ideia:

Qualquer parte da string de endereço pode fazer referência a qualquer número de variáveis ​​de ambiente precedendo seu nome com um cifrão ('$') e, opcionalmente, colocando-as entre colchetes ('{}'), semelhante ao que é feito no shell Bourne.

informação relacionada