Configuração de IP flutuante do Azure Load Balancer

O balanceador de carga fornece vários recursos para aplicativos UDP e TCP.

IP Flutuante

Alguns cenários de aplicativo preferem ou exigem o uso da mesma porta por várias instâncias de aplicativo em uma única VM no pool de back-end. Exemplos comuns de reutilização de portas incluem clustering para alta disponibilidade, dispositivos virtuais de rede e exposição de vários pontos de extremidade TLS sem recriptografia.

Estado do IP flutuante Resultado
IP flutuante ativado O Azure altera o mapeamento do endereço IP para o endereço IP Frontend do Balanceador de Carga
IP flutuante desativado O Azure expõe o endereço IP das instâncias de VM

Se quiser reutilizar a porta de back-end em várias regras, habilite o IP flutuante na definição da regra. Ativar o IP flutuante permite mais flexibilidade.

Nos diagramas, você vê como o mapeamento de endereços IP funciona antes e depois de habilitar o IP flutuante: Este diagrama mostra o tráfego de rede através de um balanceador de carga antes de ativar o IP flutuante.

Este diagrama mostra o tráfego de rede através de um balanceador de carga depois de ativar o IP flutuante.

Você configura o IP flutuante em uma regra de balanceador de carga por meio do portal do Azure, REST API, CLI, PowerShell ou outro cliente. Além da configuração da regra, você também deve configurar o SO convidado da máquina virtual para usar o IP flutuante.

Diagrama de tráfego do balanceador de carga para vários IPs frontend com IP flutuante.

Para esse cenário, cada VM no pool de back-end tem três interfaces de rede:

  • IP de back-end: uma NIC virtual associada à VM (configuração IP do recurso NIC do Azure).
  • Frontend 1 (FIP1): uma interface de loopback dentro do SO convidado que é configurada com o endereço IP do FIP1.
  • Frontend 2 (FIP2): uma interface de loopback dentro do SO convidado que é configurada com o endereço IP do FIP2.

Vamos supor a mesma configuração de frontend do cenário anterior:

Front-end Endereço IP protocolo porta
frontend verde 1 65.52.0.1 TCP 80
frontend roxo 2 65.52.0.2 TCP 80

Definimos duas regras de IP flutuantes:

Regra Front-end Mapa para pool de back-end
1 regra verde FIP1:80 back-end verde FIP1:80 (em VM1 e VM2)
2 regra roxa FIP2:80 backend roxo FIP2:80 (em VM1 e VM2)

A tabela a seguir mostra o mapeamento completo no balanceador de carga:

Regra Endereço IP de front-end protocolo porta Destino porta
regra verde 1 65.52.0.1 TCP 80 o mesmo que frontend (65.52.0.1) mesmo que frontend (80)
regra roxa 2 65.52.0.2 TCP 80 mesmo que frontend (65.52.0.2) mesmo que frontend (80)

O destino do fluxo de entrada agora é o endereço IP frontend na interface de loopback na VM. Cada regra deve produzir um fluxo com uma combinação exclusiva de endereço IP de destino e porta de destino. A reutilização de porta é possível na mesma VM variando o endereço IP de destino para o endereço IP frontend do fluxo. Seu serviço é exposto ao balanceador de carga vinculando-o ao endereço IP do frontend e à porta da respetiva interface de loopback.

Você percebe que a porta de destino não muda no exemplo. Em cenários de IP flutuante, o Azure Load Balancer também dá suporte à definição de uma regra de balanceamento de carga para alterar a porta de destino do back-end e torná-la diferente da porta de destino do front-end.

O tipo de regra IP flutuante é a base de vários padrões de configuração do balanceador de carga. Um exemplo atualmente disponível é a configuração Configurar um ou mais ouvintes do grupo de disponibilidade Always On. Com o tempo, documentaremos mais desses cenários. Para obter informações mais detalhadas sobre as configurações específicas do SO convidado necessárias para habilitar o IP flutuante, consulte Configuração de IP flutuante do Balanceador de carga do Azure na próxima seção.

Configuração do SO convidado IP flutuante

Para funcionar, você configura o SO convidado para que a máquina virtual receba todo o tráfego vinculado ao IP frontend e à porta do balanceador de carga. A configuração da VM requer:

  • Adicionando uma interface de rede de loopback
  • configurando o loopback com o endereço IP do frontend do balanceador de carga
  • garantindo que o sistema possa enviar/receber pacotes em interfaces que não tenham o endereço IP atribuído a essa interface. Os sistemas Windows requerem a configuração de interfaces para usar o modelo de "host fraco". Para sistemas Linux, este modelo é normalmente utilizado por predefinição.
  • configurando o firewall do host para permitir o tráfego na porta IP do frontend.

Nota

Todos os exemplos abaixo usam IPv4; para usar IPv6, substitua "ipv6" por "ipv4". Observe também que o IP flutuante para IPv6 não funciona para balanceadores de carga internos.

Windows Server

Expandir

Para cada VM no pool de back-end, execute os seguintes comandos em um prompt de comando do Windows no servidor.

Para obter a lista de nomes de interface que você tem em sua VM, digite este comando:

netsh interface ipv4 show interface 

Para a NIC da VM (gerenciada pelo Azure), digite este comando.

netsh interface ipv4 set interface "interfacename" weakhostreceive=enabled

(substitua "interfacename" pelo nome desta interface)

Para cada interface de loopback adicionada, repita estes comandos:

netsh interface ipv4 add addr floatingipaddress floatingip floatingipnetmask
netsh interface ipv4 set interface floatingipaddress weakhostreceive=enabled  weakhostsend=enabled 

(substitua loopbackinterface pelo nome dessa interface de loopback e floatingip e floatingipnetmask pelos valores apropriados que correspondem ao IP frontend do balanceador de carga)

Por fim, se o host convidado usar um firewall, verifique se uma regra foi configurada para que o tráfego possa chegar à VM nas portas apropriadas.

Este exemplo de configuração pressupõe uma configuração IP frontend do balanceador de carga de 1.2.3.4 e uma regra de balanceamento de carga para a porta 80:

netsh int ipv4 set int "Ethernet" weakhostreceive=enabled
netsh int ipv4 add addr "Loopback Pseudo-Interface 1" 1.2.3.4 255.255.255.0
netsh int ipv4 set int "Loopback Pseudo-Interface 1" weakhostreceive=enabled weakhostsend=enabled
netsh advfirewall firewall add rule name="http" protocol=TCP localport=80 dir=in action=allow enable=yes

Ubuntu

Expandir

Para cada VM no pool de back-end, execute os seguintes comandos por meio de uma sessão SSH.

Para obter a lista de nomes de interface que você tem em sua VM, digite este comando:

ip addr

Para cada interface de loopback, repita estes comandos, que atribuem o IP flutuante ao alias de loopback:

sudo ip addr add floatingip/floatingipnetmask dev lo:0

(substitua floatingip e floatingipnetmask pelos valores apropriados que correspondem ao IP frontend do balanceador de carga)

Por fim, se o host convidado usar um firewall, verifique se uma regra foi configurada para que o tráfego possa chegar à VM nas portas apropriadas.

Este exemplo de configuração pressupõe uma configuração IP frontend do balanceador de carga 1.2.3.4 e uma regra de balanceamento de carga para a porta 80. Este exemplo também assume o uso de UFW (Uncomplicated Firewall) no Ubuntu.

sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp

Limitações

  • Com o IP flutuante habilitado em uma regra de balanceamento de carga, seu aplicativo deve usar a configuração IP primária da interface de rede para saída.
  • Não é possível usar IP flutuante em configurações IPv4 secundárias para cenários de balanceamento de carga. Essa limitação não se aplica a balanceadores de carga públicos com configurações de pilha dupla (IPv4 e IPv6) ou a arquiteturas que utilizam um gateway NAT para conectividade de saída.
  • Se seu aplicativo se ligar ao endereço IP de front-end configurado na interface de loopback no SO convidado, a saída do Azure não reescreverá o fluxo de saída e o fluxo falhará. Analise os cenários de saída.

Próximos passos