Configuração de haproxy com configuração de subdomínio


8

Esperando que alguém possa ajudar a confirmar se isso deve funcionar? Estou tentando rotear 3 tráfego de subdomínio para o mesmo host haproxy;

Aqui está a minha configuração

haproxy com uma interface ip 10.10.10.100 e nome do DNS haproxy01.mydomain.com

3 registros CNAME associados a ele; sub1.meudominio.com, sub2.meudominio.com e sub3.meudominio.com

todo o tráfego de entrada é para a porta 443.

Existem dois servidores de aplicativos back-end que aceitam tráfego em três portas 8081, 8082, 8083, digamos;

sub1.meudominio.com para 8081 sub2.meudominio.com para 8082 e sub3.meudominio.com para 8083

O aplicativo requer passagem SSL apenas para o tráfego da porta 8081, por isso acredito que devo usar o modo tcp para ele, o outro tráfego para 8082 e 8083 também é SSL, mas pode ser finalizado no Haproxy, mas, para os testes, fui com todo o TCP modo.

Minha seção de configuração para conseguir isso está abaixo;

    #Application Setup 
frontend mytraffic
    bind *:443
    mode  tcp
    acl host_sub1 hdr(host) -i sub1.mydomain.com
    acl host_sub2 hdr(host) -i sub2.mydomain.com
    acl host_sub3 hdr(host) -i sub3.mydomain.com

    use_backend sub1_nodes if host_sub1
    use_backend sub2_nodes if host_sub2
    use_backend sub3_nodes if host_sub3

    option tcplog backend sub1_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8081 check
    server node2 10.10.10.102:8081 check 
backend sub2_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8082 check
    server node2 10.10.10.102:8082 check 
backend sub3_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8083 check
    server node2 10.10.10.102:8083 check


    # APPLICATION SETUP END

Quando tento acessar os servidores de aplicativos via HAproxy, por exemplo, para o tráfego 8082, ele lança os logs;

localhost haproxy [6097]: xxxx: 51241 [20 / Mar / 2015: 12: 19: 38.720] mytraffic mytraffic / -1 / -1 / 0 0 SC 0/0/0/0/0 0/0

aprecie algumas orientações sobre essa configuração.

PS Não consigo incorporar nenhuma imagem para fins de clareza aqui, pois é meu primeiro post :-(


a mensagem de log não estava completa; 20 de março 12:19:38 localhost haproxy [6097]: xxxx: 51241 [20 / Mar / 2015: 12: 19: 38.720] mytraffic mytraffic / <NOSRV> -1 / -1 / 0 0 SC 0/0/0 / 0/0 0/0
Global Learning

NOSRV significa que não foi possível encontrar um back-end adequado. Você pode acessar a página de estatísticas ou soquete e ver quais backend o HAproxy acha que estão acontecendo?
Jim G.

Verifique também se há conectividade entre o haproxy e os servidores de aplicativos. Se estiver usando nc: nc -v 10.10.10.101 8081, nc -v 10.10.10.102 8081, etc.
hdanniel 20/15

A última verificação no painel de monitoramento haproxy está relatando todos os nós. Também confirmei a conectividade do console Haproxy a esses servidores de aplicativos em todas as portas.
Global Learning

@HD sim, a conectividade é boa nos dois nós.
Global Learning

Respostas:


11

Com o modo TCP, o HAProxy não decodifica a solicitação HTTP, portanto suas acllinhas não fazem nada e o front-end nunca poderá corresponder a um back-end, como mostra os logs inseridos: mytraffic/<NOSRV>significa que não foi possível escolher um back-end ou servidor.

Você precisaria dividir os 3 subdomínios em 2 frontends diferentes, cada um com seus próprios IPs, pois todos estão conectados na porta 443. Um para passagem, o outro para a terminação SSL e a alternância de conteúdo usando mode http. A ressalva aqui é que, se você adicionasse um quarto subdomínio (sub4.meudominio.com) que também exigia passagem, você precisaria de um terceiro frontend e IP.

Você também precisará criar registros CNAME ou A diferentes no DNS, para que os subdomínios certos apontem para os IPs certos.

Dada esta configuração de DNS:

10.10.10.100        A         haproxy01-cs.mydomain.com
10.10.10.101        A         haproxy01-pt1.mydomain.com
10.10.10.102        A         haproxy01-pt2.mydomain.com
sub1.mydomain.com   CNAME     haproxy01-pt1.mydomain.com
sub2.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub3.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub4.mydomain.com   CNAME     haproxy01-pt2.mydomain.com

A configuração do HAproxy ficaria assim:

#Application Setup 
frontend ContentSwitching

  bind 10.10.10.100:443
  mode  http
  option httplog
  acl host_sub2 hdr(host) -i sub2.mydomain.com
  acl host_sub3 hdr(host) -i sub3.mydomain.com
  use_backend sub2_nodes if host_sub2
  use_backend sub3_nodes if host_sub3

frontend PassThrough1
  bind 10.10.10.101:443
  mode  tcp
  option tcplog
  use_backend sub1_nodes     

frontend PassThrough2
  bind 10.10.10.102:443
  mode  tcp
  option tcplog
  use_backend sub4_nodes

backend sub1_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8081 check
  server node2 10.10.10.102:8081 check 

backend sub2_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8082 check
  server node2 10.10.10.102:8082 check 

backend sub3_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8083 check
  server node2 10.10.10.102:8083 check

backend sub4_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8084 check
  server node2 10.10.10.102:8084 check

Na verdade, os IPs que tenho aqui não fazem sentido (usei 10.10.10.101-102 para os front-end nos quais você os atribuiu aos nós), mas você tem a idéia de como ficaria.
GregL 20/03/2015

@ Greg - OBRIGADO. Vou tentar isso e circulou com resultados. Eu estava preocupado com o modo tcp e o uso do acl antes de usá-lo.
Global Learning

Obrigado GregL. funciona. Uma última pergunta, se eu puder? para ter SSL do cliente -> haproxy e haproxy -> servidor back-end (como ele pode terminar, mas iniciar um novo no back-end), qual é a maneira recomendada de fazer isso? ssl passar com o modo tcp? O motivo pelo qual eu desejava a passagem para o tráfego da porta 8081 é devido ao requisito de ter uma sessão autenticada mutuamente com o aplicativo e o cliente. O restante do tráfego das portas 8082 e 8083 requer SSL, mas não requer autenticação mútua. (agora eu fui com abordagem de passagem).
Global Learning

Bem, HAProxy pode fazer a verificação do certificado de cliente, utilizando o ca-filee verify optionalopções para a binddeclaração. Se você fizer isso, poderá ter um único frontend vinculado a um IP e, em seguida, o conteúdo alternará para os back-end apropriados, conforme exigido pelo cabeçalho do host . Para confirmar que a autenticação mútua trabalhou você pode criar uma acl como acl ClientSSLValid ssl_c_verify 0, em seguida, adicioná-lo como uma outra condição para a use_backenddeclaração comouse_backend sub1_nodes if host_sub1 ClientSSLValid
GregL

Há artigos decentes aqui e aqui sobre como fazer isso, com mais detalhes do que eu forneci.
GregL
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.