Interação estranha com o systemctl com o Haproxy no CentOS 7

5

A execução do haproxy por meio de systemctl é diferente da execução manual .

  • no início manual, tudo funciona.
  • começando pelo systemctl, o haproxy não consegue encontrar o serviço que procura e responde com um 503.

Aqui está a saída ao iniciar pelo systemctl:

> sudo systemctl status  -l haproxy.service
haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled)
                Active: active (running) since Wed 2014-12-24 08:08:49 EST; 4min 59s ago
                Main PID: 20307 (haproxy)
                CGroup: /system.slice/haproxy.service
                └─20307 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

                Dec 24 08:08:49 localhost.localdomain systemd[1]: Starting HAProxy Load Balancer...
                Dec 24 08:08:49 localhost.localdomain systemd[1]: Started HAProxy Load Balancer.

Assim, haproxy apenas diz 503 para o meu backend.

Se eu interromper agora o serviço haproxy e, em vez disso, executá-lo manualmente na linha de comando, assim:

sudo /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

faz proxies no meu servidor.

Eu instalei o haproxy no yum e estou usando uma configuração extremamente simples:

# defaults above

frontend  main *:80
    default_backend app

backend app
    option httpclose
    option forwardfor
    server web1 127.0.0.1:8001

Alguma ideia da diferença? Eu tentei executá-lo daemonized e não.

Este é o log ao executar com o systemctl:

Proxy app started.
127.0.0.1:44391 [24/Dec/2014:09:01:42.403] main app/web1 0/0/-1/-1/0 503 212 - - SC-- 0/0/0/0/3 0/0 "GET / HTTP/1.1"

Este é o registro quando executado manualmente:

Proxy app started.
127.0.0.1:44393 [24/Dec/2014:09:02:11.758] main app/web1 0/0/0/2/2 200 5699 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Para esclarecer, posso definir com êxito o 127.0.0.1:8001 como meu usuário de implantação, com o sudo e o usuário haproxy.

Editar com mais informações

Eu tentei usar o nginx como proxy, sem sucesso. Portanto, não é haproxy que está em falta aqui. O nginx diz 502 Bad Gateway e os logs dizem:

2014/12/24 16:57:04 [crit] 23214#0: *1 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 192.168.34.1, server: www.zombieclj.local, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "www.zombieclj.local"

Então, sim, há alguma coisa de segurança acontecendo. Ainda sou capaz de enrolar para 127.0.0.1:8001. Parar o firewall não muda nada.

    
por Magnar 24.12.2014 / 14:36

2 respostas

5

O problema era que o SELinux permitia apenas que o servidor web fizesse conexões de saída para um conjunto limitado de portas.

Corrigido:

semanage port --add --type http_port_t --proto tcp 8001

depois de instalar o semanage com

yum install policycoreutils-python

Erro de Nginx do Nodejs: (13: Permissão negada ) ao conectar-se ao upstream

    
por 24.12.2014 / 23:33
2

Eu usei a função Audit2Allow encontrada no wiki do centos

Revise a regra:

grep haproxy /var/log/audit/audit.log | audit2allow -m haproxy

Crie um arquivo de políticas ( *.pp ).

grep haproxy /var/log/audit/audit.log | audit2allow -M haproxy

agora ao instalar o pacote, eu também incluo o arquivo haproxy.pp e o carrego para o selinux com

semodule -i haproxy.pp

    
por 21.12.2015 / 15:13