Solucionar problemas de conectividade de saída do Azure Load Balancer
Saiba como diretrizes de solução de problemas para conexões de saída no Balanceador de Carga do Azure. Isso inclui compreender a conversão de endereços de rede de origem (SNAT) e seu impacto nas conexões, usar IPs públicos individuais em VMs e projetar aplicativos para eficiência de conexão para evitar o esgotamento da porta SNAT. A maioria dos problemas com a conectividade de saída que os clientes experimentam é devido à exaustão da porta SNAT e tempos limite de conexão, levando à queda de pacotes.
Para saber mais sobre portas SNAT, consulte Conversão de endereços de rede de origem para conexões de saída.
Compreender o uso da porta SNAT
Siga o diagnóstico do balanceador de carga padrão com métricas, alertas e integridade de recursos para monitorar o uso e a alocação da porta SNAT do seu balanceador de carga existente. Monitorizar para confirmar ou determinar o risco de exaustão do SNAT. Se você estiver tendo problemas para entender o comportamento da 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 SO convidado da sua instância ou usar o Inspetor de Rede para captura de pacotes. 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 do SNAT. Um gateway NAT é altamente recomendado se o serviço estiver iniciando conexões de saída TCP ou UDP repetidas para o mesmo destino.
Otimize suas implantações do Azure para conectividade de saída
É importante otimizar 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 gateway NAT para conectividade de saída com a Internet
O Azure NAT Gateway é 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 um gateway NAT de consumir portas SNAT ajuda a resolver problemas comuns de exaustão e conexão SNAT. Para obter mais informações sobre o Azure NAT Gateway, consulte O que é o Azure NAT Gateway?.
Como um gateway NAT reduz o risco de exaustão da porta SNAT?
O Balanceador de Carga do Azure 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 do 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 a todas as instâncias de uma sub-rede. Essa alocação dinâmica permite que as instâncias de VM usem 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 do SNAT.
Seleção de portas e comportamento de reutilização.
Um gateway NAT seleciona portas aleatoriamente a partir do pool de portas disponível. 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 público de destino e a mesma porta. Esse comportamento de seleção e reutilização de porta de um gateway NAT torna menos provável que haja tempos limite de conexão.
Para saber mais sobre como o SNAT e o uso da porta funcionam para o gateway NAT, consulte Fundamentos do SNAT. Há algumas condições em que você não pode usar o gateway NAT para conexões de saída. Para obter mais informações sobre limitações do gateway NAT, consulte Limitações do gateway NAT.
Se você não conseguir usar um gateway NAT para conectividade de saída, consulte as outras opções de migração descritas neste artigo.
Configurar 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 exaustão ou conexão SNAT, certifique-se de estar usando regras de saída com alocação manual de portas. Caso contrário, você provavelmente confiará na alocação de porta padrão do balanceador de carga. A alocação de porta padrão atribui automaticamente um número conservador de portas, que se baseia no número de instâncias em seu pool de back-end. A alocação de porta padrão não é um método recomendado para habilitar conexões de saída. Quando o pool de back-end é dimensionado, suas conexões podem ser afetadas se as portas precisarem ser realocadas.
Para saber mais sobre a alocação de porta padrão, consulte Tradução de endereços de rede de origem para conexões de saída.
Para aumentar o número de portas SNAT disponíveis por VM, configure regras de saída com alocação manual de portas no balanceador de carga. Por exemplo, se você souber que tem um máximo de 10 VMs em seu pool de back-end, poderá alocar até 6.400 portas SNAT por VM em vez das 1.024 padrão. Se você precisar de mais portas SNAT, você pode adicionar vários endereços IP frontend para conexões de saída para multiplicar o número de portas SNAT disponíveis. Certifique-se de entender por que você está esgotando as portas SNAT antes de adicionar mais endereços IP frontend.
Para obter orientações detalhadas, consulte Projetar seus aplicativos para usar conexões de forma eficiente mais adiante neste artigo. Para adicionar mais endereços IP para conexões de saída, crie uma configuração de IP frontend 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. Recomenda-se o uso de 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 em menor escala, você pode considerar a atribuição de 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 à única VM associada ao endereço IP.
É altamente recomendável considerar a utilização do gateway NAT, pois atribuir endereços IP públicos individuais não é uma solução escalável.
Nota
Se você precisar conectar sua rede virtual do Azure aos serviços PaaS do Azure, como o Armazenamento do Azure, o Azure SQL, o Azure Cosmos DB ou outros serviços disponíveis do Azure, poderá usar o Azure Private Link para evitar totalmente o SNAT. O Azure Private Link envia tráfego da sua rede virtual para os serviços do Azure através da rede de backbone do Azure em vez de através da Internet.
Private Link é a opção recomendada sobre 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 Private Link e pontos de extremidade de serviço, consulte Compare Private Endpoints e Service Endpoints.
Projete aplicativos eficientes em conexão
Ao projetar seus aplicativos, certifique-se de que eles usem conexões de forma eficiente. A eficiência da conexão pode reduzir ou eliminar o esgotamento da porta SNAT em seus aplicativos implantados.
Modificar a aplicação para reutilizar ligações
Em vez de gerar conexões TCP atômicas individuais para cada solicitação, recomendamos configurar seu aplicativo para reutilizar conexões. A reutilização de conexão resulta em transações TCP de maior desempenho e é especialmente relevante para protocolos como HTTP/1.1, onde a reutilização de conexão é o padrão. Essa reutilização se aplica a outros protocolos que usam HTTP como transporte, como REST.
Modificar a aplicação para utilizar os agrupamentos de ligações
Utilize um esquema de pool de conexões em seu aplicativo, onde as solicitações são distribuídas internamente em um conjunto fixo de conexões e reutilizadas quando possível. Este 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 várias operações simultâneas quando uma única conexão está bloqueando na resposta de uma operação.
O pool de conexões pode já existir dentro da estrutura que você está usando para desenvolver seu aplicativo ou as definições de configuração para seu aplicativo. Você pode combinar o pool de conexões com a reutilização de conexões. Em seguida, suas várias solicitações consomem um número fixo e previsível de portas para o mesmo endereço IP e porta de destino.
As solicitações se beneficiam do uso eficiente de transações TCP, reduzindo a latência e a utilização de recursos. As transações UDP também podem ser beneficiadas. O gerenciamento do número de fluxos UDP pode evitar condições de exaustão e gerenciar a utilização da porta SNAT.
Modificar a aplicação para utilizar uma lógica de repetição menos agressiva
Quando as portas SNAT estão esgotadas ou ocorrem falhas no aplicativo, novas tentativas agressivas ou de força bruta sem decaimento e lógica de back-off fazem com que a exaustão ocorra ou persista. Você pode reduzir a demanda por portas SNAT usando uma lógica de repetição menos agressiva.
Dependendo do tempo limite ocioso configurado, se as novas tentativas forem muito agressivas, as conexões podem não ter tempo suficiente para fechar e liberar portas SNAT para reutilização.
Utilizar as métricas keep alive para repor o tempo limite de inatividade 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 keepalives TCP para atualizar um fluxo ocioso e redefinir esse tempo limite ocioso, se necessário. Ao usar keepalives TCP, é suficiente habilitá-los em um lado da conexão.
Por exemplo, é suficiente habilitá-los no lado do servidor apenas para redefinir o temporizador ocioso do fluxo e não é necessário que ambos os lados iniciem keepalives TCP. Existem conceitos semelhantes para a camada de aplicativo, incluindo configurações cliente-servidor de banco de dados. Verifique no lado do servidor quais opções existem para keepalives específicos do aplicativo.
Próximos passos
Para obter mais informações sobre o esgotamento da porta SNAT, opções de conectividade de saída e acesso de saída padrão, consulte: