Configuração de IP flutuante do Balanceador de Carga do Azure

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 agrupamento para alta disponibilidade, dispositivos virtuais de rede e a exposição de vários endpoints TLS sem nova encriptação. 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.

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

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

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 de um ou mais listeners de grupos de disponibilidade Always On. Com o tempo, documentaremos mais desses cenários.

Configuração de IP flutuante do sistema operativo convidado

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 utiilizar o modelo de "anfitrião 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".

Servidor Windows

Expandir

Para cada VM no pool backend, adicione primeiro um adaptador de rede loopback usando a gestão de adaptadores de rede do Windows Server. Depois, execute os seguintes comandos numa Linha de Comandos do Windows com privilégios elevados no servidor.

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

    netsh interface ipv4 show interface 
    
  2. Para a NIC da VM (gerenciada pelo Azure), insira o seguinte comando depois de substituir o nome da interface pelo nome da interface que você deseja usar:

    netsh interface ipv4 set interface <interface-name> weakhostreceive=enabled
    
  3. Para cada interface de loopback adicionada, insira estes comandos depois de substituir loopback-interface-name pelo nome da interface de loopback e floating-IP e floating-IPnetmask pelos valores apropriados que correspondem ao IP frontend do balanceador de carga:

    netsh interface ipv4 add addr <loopback-interface-name> <floating-IP> <floating-IPnetmask>
    netsh interface ipv4 set interface <loopback-interface-name> weakhostreceive=enabled  weakhostsend=enabled 
    
  4. Se o host convidado usar um firewall, certifique-se de configurar uma regra para que o tráfego possa chegar à VM nas portas apropriadas. Esta configuração de exemplo assume uma configuração de IP frontend de balanceador de carga 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
    
  5. Verifique se a interface de loopback tem o endereço IP de frontend atribuído:

    netsh interface ipv4 show addresses name="<loopback-interface-name>"
    

    Confirme que a saída inclui o endereço IP do frontend. A partir de um cliente que consiga aceder ao balanceador de carga, ligue-se ao endereço IP frontend e à porta de regras para verificar se o tráfego chega à VM.

Ubuntu

Expandir

Para cada VM no pool backend, execute os seguintes comandos através de uma sessão SSH. O Linux já fornece o dispositivo de loopback lo; o comando usa lo:0 como etiqueta de endereço, por isso não cria uma interface de loopback separada.

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

    ip addr
    
  2. Adicione o endereço IP frontend ao dispositivo de loopback. Substituir o floating-IP pelo endereço IP frontend do balanceador de carga e o floating-IPnetmask pelo comprimento do prefixo CIDR do Linux, tais como 24:

    sudo ip addr add <floating-IP>/<floating-IPnetmask> dev lo:0
    
  3. Se o host convidado usar um firewall, certifique-se de configurar uma regra para que o tráfego possa chegar à VM nas portas apropriadas. Esta configuração de exemplo assume uma configuração de IP frontend de balanceador de carga 1.2.3.4, uma regra de balanceamento de carga para a porta 80 e 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
    
  4. Verifique se o dispositivo de loopback tem atribuído o endereço IP frontend:

    ip address show dev lo
    

    Confirme que a saída inclui o endereço IP do frontend. A partir de um cliente que consiga aceder ao balanceador de carga, ligue-se ao endereço IP frontend e à porta de regras para verificar se o tráfego chega à VM.

Limitações

Quando ativa o IP flutuante, a conectividade de saída depende da configuração de IP da interface de rede que a aplicação utiliza e de como a aplicação se liga ao endereço IP frontend de loopback.

  • 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.
  • Se seu aplicativo se ligar ao endereço IP de front-end configurado na interface de loopback no SO convidado, a conexão de saída do Azure não reescreverá o fluxo de saída e o fluxo falhará. Analise os cenários de saída.
  • Não é possível usar IP flutuante em configurações de IP secundárias para cenários de balanceamento de carga. Essa limitação não se aplica a balanceadores de carga públicos em que a configuração IP secundária é IPv6 e parte de uma configuração de pilha dupla, nem a arquiteturas que utilizam um gateway NAT para conectividade de saída.

Próximos passos