Solucionar problemas de conectividade de saída Azure Load Balancer

Conheça as diretrizes de solução de problemas para conexões de saída no Azure Load Balancer. Isso inclui entender a conversão de endereços de rede de origem (SNAT) e o impacto nas conexões, o uso de IPs públicos individuais em VMs e a criação de aplicativos para eficiência de conexão para evitar o esgotamento da porta SNAT. A maioria dos problemas de conectividade de saída enfrentados pelos clientes se deve ao esgotamento da porta SNAT e aos tempos limite de conexão, levando à remoção de pacotes.

Para saber mais sobre as portas SNAT, consulte a Conversão de endereço de rede de origem para conexões de saída.

Compreenda o uso da sua porta SNAT

Siga o diagnóstico do balanceador de carga Standard com métricas, alertas e integridade do recurso para monitorar o uso e a alocação da porta SNAT do balanceador de carga existente. Monitore para confirmar ou determinar o risco de esgotamento SNAT. Se você estiver tendo problemas para entender seu comportamento de conexão de saída, use estatísticas de pilha de IP (netstat) ou colete capturas de pacotes. Você pode executar essas capturas de pacotes no sistema operacional convidado da sua instância ou usar o Observador de Rede para captura de pacote. Para a maioria dos cenários, o Azure recomenda o uso de um gateway NAT para conectividade de saída para reduzir o risco de esgotamento SNAT. Um gateway NAT é altamente recomendado se o seu serviço estiver iniciando conexões de saída TCP ou UDP repetidas para o mesmo destino.

Otimizar as suas implantações do Azure para conectividade de saída

É importante otimizar as suas implantações do Azure para conectividade de saída. A otimização pode evitar ou aliviar problemas com a conectividade de saída.

Implantar o gateway da NAT para conectividade com a Internet de saída

O Gateway da NAT do Azure é um serviço do Azure altamente resiliente e escalável que fornece conectividade de saída para a Internet a partir da sua rede virtual. O método exclusivo de consumo de portas SNAT de um gateway NAT ajuda a resolver problemas comuns de esgotamento e conexão SNAT. Para obter mais informações sobre o Gateway da NAT do Azure, confira O que é o Gateway da NAT do Azure?.

  • Como um gateway NAT reduz o risco de esgotamento da porta SNAT?

    Azure Load Balancer aloca quantidades fixas de portas SNAT para cada instância de máquina virtual em um pool de back-end. Esse método de alocação pode levar ao esgotamento SNAT, especialmente se padrões de tráfego irregulares resultarem em uma máquina virtual específica enviando um volume maior de conexões de saída. Ao contrário do balanceador de carga, um gateway NAT aloca dinamicamente portas SNAT em todas as instâncias de VM em uma sub-rede.

    Um gateway NAT disponibiliza portas SNAT acessíveis para todas as instâncias em uma sub-rede. Essa alocação dinâmica permite que as instâncias de VM utilizem o número de portas SNAT que cada uma precisa do pool de portas disponível para novas conexões. A alocação dinâmica reduz o risco de esgotamento de SNAT.

    Diagrama do Azure Load Balancer versus o Gateway da NAT do Azure.

  • Seleção de porta e comportamento de reutilização.

    Um gateway NAT seleciona portas aleatoriamente do pool de portas disponíveis. Se não houver portas disponíveis, as portas SNAT serão reutilizadas, desde que não haja conexão existente com o mesmo IP e porta públicos de destino. Essa seleção de porta e o comportamento de reutilização de um gateway NAT tornam menos provável tempos limite de conexão.

    Para saber mais sobre como funciona o uso de porta e SNAT para o gateway NAT, consulte Conceitos básicos de SNAT. Existem algumas condições em que você não poderá usar o gateway NAT para conexões de saída. Para obter mais informações sobre as limitações do Gateway da NAT, confira Limitações do Gateway da NAT.

    Se não for possível usar um gateway NAT para a conectividade de saída, consulte as outras opções de migração descritas neste artigo.

Configurar as regras de saída do balanceador de carga para maximizar as portas SNAT por VM

Se você estiver usando um balanceador de carga padrão público e tiver falhas de conexão ou esgotamento SNAT, certifique-se de usar regras de saída com alocação manual de porta. Caso contrário, você provavelmente dependerá do acesso de saída padrão do balanceador de carga. O acesso de saída padrão aloca automaticamente um número conservador de portas, que se baseia no número de instâncias no seu pool de back-end. O acesso de saída padrão não é um método recomendado para habilitar as conexões de saída. Quando o pool de back-end é dimensionado, as suas conexões podem ser afetadas se as portas precisarem ser realocadas.

Para saber mais sobre o acesso de saída padrão e a alocação de porta padrão, consulte Conversão de endereço de rede de origem para conexões de saída.

Para aumentar o número de portas SNAT disponíveis por VM, configure as regras de saída com alocação manual de porta no balanceador de carga. Por exemplo, se você souber que tem no máximo 10 VMs no seu pool de back-end, poderá alocar até 6.400 portas SNAT por VM, em vez das 1.024 padrão. Se forem necessárias mais portas SNAT, você pode adicionar vários endereços IP de front-end para conexões de saída para multiplicar o número de portas SNAT disponíveis. Verifique se você entende por que está esgotando as portas SNAT antes de adicionar mais endereços IP de front-end.

Para obter diretrizes detalhadas, consulte Projetar seus aplicativos para usar conexões com eficiência mais adiante neste artigo. Para adicionar mais endereços IP para conexões de saída, crie uma configuração de IP de front-end para cada novo IP. Quando as regras de saída são configuradas, você pode selecionar várias configurações de IP de front-end para um pool de back-end. É recomendável usar endereços IP diferentes para conectividade de entrada e saída. Diferentes endereços IP isolam o tráfego para melhorar o monitoramento e a solução de problemas.

Configurar um IP público individual na VM

Para implantações de menor escala, você pode considerar atribuir um IP público a uma VM. Se um IP público for atribuído a uma VM, todas as portas fornecidas pelo IP público estarão disponíveis para a VM. Ao contrário de um balanceador de carga ou um gateway NAT, as portas só são acessíveis para a única VM associada ao endereço IP.

Em vez disso, é altamente recomendável considerar a utilização do gateway NAT, pois atribuir endereços IP públicos individuais não é uma solução escalonável.

Observação

Se você precisar conectar sua rede virtual do Azure a serviços de PaaS do Azure, como o Armazenamento do Microsoft Azure, o SQL do Azure, o Azure Cosmos DB ou qualquer outro dos serviços do Azure disponíveis, poderá usar o Link Privado do Azure para evitar totalmente a SNAT. O Link Privado do Azure envia o tráfego da rede virtual para os serviços do Azure pela rede de backbone do Azure em vez de pela Internet.

O Link Privado é a opção recomendada em pontos de extremidade de serviço para acesso privado aos serviços hospedados do Azure. Para obter mais informações sobre a diferença entre o Link Privado e os pontos de extremidade de serviço, consulte Comparar pontos de extremidade privados e pontos de extremidade de serviço.

Criar aplicativos eficientes em conexão

Ao projetar os seus aplicativos, certifique-se que eles usem as conexões com eficiência. A eficiência da conexão pode reduzir ou eliminar o esgotamento da porta SNAT nos seus aplicativos implantados.

Modificar o aplicativo para reutilizar conexões

Em vez de gerar conexões TCP individuais e atômicas para cada solicitação, recomendamos configurar seu aplicativo para reutilizar as conexões. A reutilização de conexão resulta em transações TCP de melhor desempenho e é especialmente relevante para protocolos como HTTP/1.1, em que a reutilização de conexão é a padrão. Essa reutilização se aplica a outros protocolos que usam HTTP como transporte, como REST.

Modificar o aplicativo para usar o pooling de conexão

Empregue um esquema de pooling de conexão em seu aplicativo, em que as solicitações são distribuídas internamente em um conjunto de conexões fixo e são reutilizadas sempre que possível. Esse esquema restringe o número de portas SNAT em uso e cria um ambiente mais previsível.

Esse esquema pode aumentar a taxa de transferência de solicitações, permitindo múltiplas operações simultâneas quando uma única conexão está bloqueando na resposta de uma operação.

O pooling de conexão já pode existir dentro da estrutura que você está utilizando para desenvolver o aplicativo ou as configurações para o aplicativo. É possível combinar pooling de conexão com reuso de conexão. As várias solicitações, então, consomem um número fixo e previsível de portas para o mesmo endereço e porta IP de destino.

As solicitações beneficiam-se do uso eficiente das transações TCP, reduzindo a latência e a utilização dos recursos. As transações UDP também podem se beneficiar. O gerenciamento do número de fluxos UDP pode evitar condições de esgotamento e gerenciar a utilização da porta SNAT.

Modificar o aplicativo para usar uma lógica de repetição menos agressiva

Quando as portas para SNAT estão esgotadas ou se ocorrem falhas no aplicativo, repetições de força bruta ou agressivas sem lógica de declínio e retirada fazem com que o esgotamento ocorra ou persista. Você pode reduzir a demanda de portas SNAT usando uma lógica de repetição menos agressiva.

Dependendo do tempo limite ocioso configurado, se as tentativas forem muito agressivas, as conexões podem não ter tempo suficiente para fechar e liberar portas SNAT para reutilização.

Usar keepalives para redefinir o tempo limite ocioso de saída

As regras de saída do balanceador de carga têm um tempo limite ocioso de 4 minutos por padrão que é ajustável até 100 minutos. Você pode usar TCP keepalive para atualizar um fluxo ocioso e redefinir esse tempo limite ocioso, se necessário. Ao usar keep alives TCP, é suficiente habilitá-los em um lado da conexão.

Por exemplo, é suficiente habilitá-los no lado do servidor para apenas redefinir o timer de ociosidade do fluxo e ele não é necessário para os dois lados a fim de iniciar TCP keepalives. Conceitos semelhantes existem para a camada de aplicativo, incluindo as configurações de cliente-servidor de banco de dados. Verifique o lado do servidor para as opções existentes para o aplicativo keepalives específico.

Próximas etapas

Para obter mais informações sobre o esgotamento de porta SNAT, opções de conectividade de saída e acesso de saída padrão, consulte: