(Visibilidade é tudo)
O VMWare NSX é uma plataforma de virtualização de rede, e uma das funcionalidades que podemos ter com o NSX é o Load Balancer.
Assim como outros balanceadores, o NSX pode trabalhar nos modos One Armed ou Inline.
Quando trabalhamos no modo One Armed, o NSX Edge (onde está a funcionalidade de balanceamento de carga) faz source/destinatio NAT. Ou seja, o IP do cliente é mascarado, sendo o IP do balanceador enviado para o servidor.
Neste caso acabamos perdendo visibilidade, já que no servidor os logs mostrarão todas as conexões com vindas do balanceador. E este é uma situação comum para todos os balanceadores.
X-Forwarded-For
Uma forma de contornar este problema, pelo menos quando estamos balanceando HTTP/HTTPS, é utilizarmos o XFF – X-Forwarded-For.
O XFF é um cabeçalho HTTP, comumente utilizado para a identificação do endereço IP de origem de clientes que se conectam a servidores web por meio de um balanceador ou servidor proxy.
Configurando XFF no NSX
A configuração do X-Forwarded-For no NSX resume-se a um checkbox.
Para ativar esta função basta selecionar o Edge onde deseja fazer a configuração, clicar na aba Manager > Load Balancer, e então, no menu lateral esquerdo clicar em Application Profile.
Selecione o Application Profile desejado e em seguida clique em editar (icone lápis).
No Application Profile marque a opção Insert X-Forwarded-For HTTP Header, e Ok.
Prontinho. Com esta opção o balanceador passa a inserir o cabeçalho X-Forwarded-For, onde temos o IP do usuário.
XFF no servidor
Além de configurar o balanceador, a configuração de log do servidor precisa estar “preparada” para mostrar o IP do usuário final.
No caso do Apache devemos mudar a configuração no arquivo httpd.conf, conforme exemplo abaixo.
Remover a configuração padrão:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined CustomLog log/acces_log combined
Adicionar configuração para mostrar o XFF:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded CustomLog "logs/access_log" combined env=!forwarded CustomLog "logs/access_log" proxy env=forwarded
Com esta mudança podemos olhar os logs no servidor web e confirmar que o IP do usuário está sendo enviado.
Note o IP 10.123.45.20, da máquina do usuário que está fazendo o acesso. Também temos “acesso” do IP 10.123.45.164 (balanceador), pois o balanceador acessa o servidor para ver o status do serviço.
Estatísticas no Load Balancer (Bônus Track)
Podemos ver as estatísticas de utilização do Load Balancer via linha de comando.
BrainLB01-0> show service loadbalancer monitor ----------------------------------------------------------------------- Loadbalancer Health Check Statistics: MONITOR PROVIDER POOL MEMBER HEALTH STATUS built-in MyWebPool LABCENTOS01_10.123.45.141 default_http_monitor:L7OK built-in MyWebPool LABCENTOS02_10.123.45.142 default_http_monitor:L7OK built-in MyWebPool LABCENTOS03_10.123.45.144 default_http_monitor:L7OK BrainLB01-0> show service loadbalancer ----------------------------------------------------------------------- Loadbalancer Services Status: L7 Loadbalancer : running ----------------------------------------------------------------------- L7 Loadbalancer Statistics: STATUS PID MAX_MEM_MB MAX_SOCK MAX_CONN MAX_PIPE CUR_CONN CONN_RATE CONN_RATE_LIMIT MAX_CONN_RATE running 5517 0 2082 1024 0 0 0 0 49 ----------------------------------------------------------------------- L4 Loadbalancer Statistics: MAX_CONN ACT_CONN INACT_CONN TOTAL_CONN 0 0 0 0 Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn BrainLB01-0> show service loadbalancer monitor ----------------------------------------------------------------------- Loadbalancer Health Check Statistics: MONITOR PROVIDER POOL MEMBER HEALTH STATUS built-in MyWebPool LABCENTOS01_10.123.45.141 default_http_monitor:L7OK built-in MyWebPool LABCENTOS02_10.123.45.142 default_http_monitor:L7OK built-in MyWebPool LABCENTOS03_10.123.45.144 default_http_monitor:L7OK BrainLB01-0> show service loadbalancer virtual ----------------------------------------------------------------------- Loadbalancer VirtualServer Statistics: VIRTUAL VSHTTP01 | ADDRESS [10.123.45.164]:80 | SESSION (cur, max, total) = (0, 191, 7227) | RATE (cur, max, limit) = (0, 49, 0) | BYTES in = (78424078), out = (396960457) +->POOL MyWebPool | LB METHOD round-robin | LB PROTOCOL L7 | Transparent disabled | SESSION (cur, max, total) = (0, 62, 963499) | BYTES in = (78424078), out = (396958836) +->POOL MEMBER: MyWebPool/LABCENTOS01_10.123.45.141, STATUS: UP | | HEALTH MONITOR = BUILT-IN, default_http_monitor:L7OK | | | LAST STATE CHANGE: 2018-08-03 14:08:58 | | SESSION (cur, max, total) = (0, 21, 321168) | | BYTES in = (26142313), out = (132319866) +->POOL MEMBER: MyWebPool/LABCENTOS02_10.123.45.142, STATUS: UP | | HEALTH MONITOR = BUILT-IN, default_http_monitor:L7OK | | | LAST STATE CHANGE: 2018-08-03 14:08:58 | | SESSION (cur, max, total) = (0, 25, 321166) | | BYTES in = (26141859), out = (132640424) +->POOL MEMBER: MyWebPool/LABCENTOS03_10.123.45.144, STATUS: UP | | HEALTH MONITOR = BUILT-IN, default_http_monitor:L7OK | | | LAST STATE CHANGE: 2018-08-03 14:08:58 | | SESSION (cur, max, total) = (0, 22, 321165) | | BYTES in = (26139906), out = (131998546) BrainLB01-0>
Mais informações sobre XFF aqui, e guia para troubleshooting neste link.
Até a próxima.
You must be logged in to post a comment.