Resolver problemas de conectividade de saída Balanceador de Carga do Azure

Saiba mais sobre a documentação de orientação de resolução de problemas para ligações de saída no Balanceador de Carga do Azure. Isto inclui compreender a tradução de endereços de rede de origem (SNAT) e o impacto nas ligações, na utilização de IPs públicos individuais em VMs e na conceção de aplicações para eficiência de ligação para evitar o esgotamento da porta SNAT. A maioria dos problemas com a conectividade de saída que os clientes experimentam deve-se ao esgotamento da porta SNAT e aos tempos limite de ligação que levam a pacotes removidos.

Para saber mais sobre as portas SNAT, veja Tradução de Endereços de Rede de Origem para ligações de saída.

Compreender a utilização da porta SNAT

Siga os diagnósticos do balanceador de carga Standard com métricas, alertas e estado de funcionamento dos recursos para monitorizar a utilização e alocação da porta SNAT do balanceador de carga existente. Monitorize para confirmar ou determinar o risco de esgotamento do SNAT. Se estiver a ter problemas para compreender o comportamento da ligação de saída, utilize as estatísticas da pilha de IP (netstat) ou recolha capturas de pacotes. Pode efetuar estas capturas de pacotes no SO convidado da sua instância ou utilizar Observador de Rede para a captura de pacotes. Para a maioria dos cenários, o Azure recomenda a utilização de um nat gateway para conectividade de saída para reduzir o risco de esgotamento do SNAT. Um nat gateway é altamente recomendado se o seu serviço estiver a iniciar ligações de saída TCP ou UDP repetidas para o mesmo destino.

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

É importante otimizar as implementações do Azure para conectividade de saída. A otimização pode impedir ou aliviar problemas de conectividade de saída.

Implementar o NAT Gateway para conectividade à Internet de saída

O Azure NAT Gateway é um serviço do Azure altamente resiliente e dimensionável que fornece conectividade de saída à Internet a partir da sua rede virtual. O método exclusivo de um nat gateway de consumir portas SNAT ajuda a resolver problemas comuns de exaustão e ligação do SNAT. Para obter mais informações sobre o NAT Gateway do Azure, veja O que é o NAT Gateway do Azure?.

  • Como é que um nat gateway reduz o risco de esgotamento da porta SNAT?

    Balanceador de Carga do Azure atribui quantidades fixas de portas SNAT a cada instância de máquina virtual num conjunto de back-end. Este método de alocação pode levar ao esgotamento do SNAT, especialmente se padrões de tráfego irregulares resultarem num envio de um volume mais elevado de ligações de saída por parte de uma máquina virtual específica. Ao contrário do balanceador de carga, um nat gateway aloca dinamicamente portas SNAT em todas as instâncias de VM numa sub-rede.

    Um nat gateway torna as portas SNAT disponíveis acessíveis a todas as instâncias numa sub-rede. Esta alocação dinâmica permite que as instâncias de VM utilizem o número de portas SNAT de que cada uma precisa do conjunto de portas disponível para novas ligações. A alocação dinâmica reduz o risco de esgotamento do SNAT.

    Diagrama de Balanceador de Carga do Azure vs. Nat Gateway do Azure.

  • Comportamento de seleção e reutilização de portas.

    Um nat gateway seleciona portas aleatoriamente no conjunto de portas disponível. Se não existirem portas disponíveis, as portas SNAT são reutilizadas desde que não exista ligação ao mesmo IP público de destino e porta. Esta seleção de porta e o comportamento de reutilização de um nat gateway tornam menos provável que se detetem tempos limite de ligação.

    Para saber mais sobre como funciona o SNAT e a utilização de portas para o NAT Gateway, veja Noções básicas do SNAT. Existem algumas condições em que não poderá utilizar o NAT Gateway para ligações de saída. Para obter mais informações sobre as limitações do NAT Gateway, veja Limitações do NAT Gateway.

    Se não conseguir utilizar um nat gateway para conectividade de saída, veja 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 estiver a utilizar um balanceador de carga padrão público e tiver falhas de ligação ou esgotamento do SNAT, certifique-se de que está a utilizar regras de saída com alocação manual de portas. Caso contrário, é provável que dependa do acesso de saída predefinido do balanceador de carga. O acesso de saída predefinido atribui automaticamente um número conservador de portas, que se baseia no número de instâncias no conjunto de back-end. O acesso de saída predefinido não é um método recomendado para ativar ligações de saída. Quando o conjunto de back-end é dimensionado, as ligações poderão ser afetadas se as portas precisarem de ser realojadas.

Para saber mais sobre o acesso de saída predefinido e a alocação de portas predefinida, veja Tradução de Endereços de Rede de Origem para ligaçõ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 souber que tem um máximo de 10 VMs no conjunto de back-end, pode alocar até 6400 portas SNAT por VM em vez das 1024 predefinidas. Se precisar de mais portas SNAT, pode adicionar vários endereços IP de front-end para ligações de saída para multiplicar o número de portas SNAT disponíveis. Certifique-se de que compreende porque está a esgotar as portas SNAT antes de adicionar mais endereços IP de front-end.

Para obter orientações detalhadas, consulte Estruturar as suas aplicações para utilizar ligações de forma eficiente mais adiante neste artigo. Para adicionar mais endereços IP para ligações de saída, crie uma configuração de IP de front-end para cada novo IP. Quando as regras de saída estão configuradas, pode selecionar várias configurações de IP de front-end para um conjunto de back-end. Recomenda-se a utilização de diferentes endereços IP para conectividade de entrada e saída. Diferentes endereços IP isolam o tráfego para uma melhor monitorização e resolução de problemas.

Configurar um IP público individual na VM

Para implementações de menor escala, 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 estão disponíveis para a VM. Ao contrário de um balanceador de carga ou um nat gateway, as portas só estão acessíveis para a VM única associada ao endereço IP.

Recomendamos vivamente que considere utilizar o NAT Gateway, uma vez que atribuir endereços IP públicos individuais não é uma solução dimensionável.

Nota

Se precisar de ligar a rede virtual do Azure a serviços PaaS do Azure, como o Armazenamento do Azure, SQL do Azure, o Azure Cosmos DB ou outros serviços do Azure disponíveis, pode utilizar Azure Private Link para evitar totalmente o SNAT. Azure Private Link envia tráfego da sua rede virtual para os serviços do Azure através da rede principal do Azure em vez de através da Internet.

Private Link é a opção recomendada através dos pontos finais de serviço para acesso privado aos serviços alojados do Azure. Para obter mais informações sobre a diferença entre Private Link e pontos finais de serviço, veja Comparar Pontos Finais Privados e Pontos Finais de Serviço.

Conceber aplicações eficientes em termos de ligação

Quando conceber as suas aplicações, certifique-se de que utilizam ligações de forma eficiente. A eficiência da ligação pode reduzir ou eliminar o esgotamento da porta SNAT nas aplicações implementadas.

Modificar a aplicação para reutilizar ligações

Em vez de gerar ligações TCP atómicas individuais para cada pedido, recomendamos que configure a sua aplicação para reutilizar ligações. A reutilização da ligação resulta em transações TCP mais eficazes e é especialmente relevante para protocolos como HTTP/1.1, em que a reutilização da ligação é a predefinição. Esta reutilização aplica-se a outros protocolos que utilizam HTTP como transporte, como REST.

Modificar a aplicação para utilizar os agrupamentos de ligações

Utilize um esquema de agrupamento de ligações na sua aplicação, onde os pedidos são distribuídos internamente por um conjunto fixo de ligações e reutilizados sempre que possível. Este esquema restringe o número de portas SNAT em utilização e cria um ambiente mais previsível.

Este esquema pode aumentar o débito dos pedidos ao permitir várias operações simultâneas quando uma única ligação está a bloquear na resposta de uma operação.

O agrupamento de ligações pode já existir na arquitetura que está a utilizar para desenvolver a sua aplicação ou as definições de configuração da sua aplicação. Pode combinar o conjunto de ligações com a reutilização da ligação. Em seguida, os seus múltiplos pedidos consomem um número fixo e previsível de portas para o mesmo endereço IP de destino e porta.

Os pedidos beneficiam da utilização eficiente de transações TCP, reduzindo a latência e a utilização de recursos. As transações UDP também podem beneficiar. A gestão do número de fluxos UDP pode evitar condições de escape e gerir 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 na aplicação, as repetições de força agressiva ou bruta sem lógica de decadência e back-off fazem com que o esgotamento ocorra ou persista. Pode reduzir a procura de portas SNAT com uma lógica de repetição menos agressiva.

Dependendo do tempo limite de inatividade configurado, se as repetições forem demasiado agressivas, as ligações poderão não ter tempo suficiente para fechar e libertar 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 de inatividade de 4 minutos por predefinição que é ajustável até 100 minutos. Pode utilizar keepalives TCP para atualizar um fluxo inativo e repor este tempo limite inativo, se necessário. Ao utilizar os keepalives TCP, é suficiente para os ativar num dos lados da ligação.

Por exemplo, basta ativá-los no lado do servidor apenas para repor o temporizador inativo do fluxo e não é necessário que ambos os lados iniciem keepalives TCP. Existem conceitos semelhantes para a camada da aplicação, incluindo as configurações cliente-servidor da base de dados. Verifique o lado do servidor para saber que opções existem para os keepalives específicos da aplicação.

Passos seguintes

Para obter mais informações sobre o esgotamento da porta SNAT, as opções de conectividade de saída e o acesso de saída predefinido, veja: