Risolvere i problemi di connettività in uscita di Azure Load Balancer

Informazioni sulla risoluzione dei problemi relativi alle connessioni in uscita in Azure Load Balancer. Sono incluse informazioni sulla Source Network Address Translation (SNAT) e sull'impatto sulle connessioni, l'uso di singoli IP pubblici sulle macchine virtuali e la progettazione di applicazioni per l'efficienza della connessione per evitare l'esaurimento della porta SNAT. La maggior parte dei problemi di connettività in uscita riscontrati dai clienti è dovuta all'esaurimento della porte SNAT e ai timeout di connessione che portano all'eliminazione di pacchetti.

Per altre informazioni sulle porte SNAT, vedere Source Network Address Translation per le connessioni in uscita.

Informazioni sull'utilizzo delle porte SNAT

Seguire la diagnostica del bilanciamento del carico Standard con metriche, avvisi e integrità delle risorse per monitorare l'utilizzo e l'allocazione delle porte SNAT del bilanciamento del carico esistente. Monitorare per confermare o determinare il rischio di esaurimento SNAT. Se si verificano problemi di comprensione del comportamento della connessione in uscita, usare le statistiche dello stack IP (netstat) o raccogliere le acquisizioni pacchetti. È possibile eseguire queste acquisizioni di pacchetti nel sistema operativo guest dell'istanza o usare Network Watcher per l'acquisizione dei pacchetti. Per la maggior parte degli scenari, Azure consiglia di usare un gateway NAT per la connettività in uscita per ridurre il rischio di esaurimento SNAT. Un gateway NAT è altamente consigliato se il servizio avvia connessioni TCP o UDP in uscita ripetute alla stessa destinazione.

Ottimizzare le distribuzioni di Azure per la connettività in uscita

È importante ottimizzare le distribuzioni di Azure per la connettività in uscita. L'ottimizzazione può impedire o risolvere i problemi di connettività in uscita.

Distribuire il gateway NAT per la connettività Internet in uscita

Il gateway NAT di Azure è un servizio di Azure altamente resiliente e scalabile che offre connettività in uscita a Internet dalla rete virtuale. Il metodo univoco di un gateway NAT per l'utilizzo delle porte SNAT consente di risolvere i problemi comuni di esaurimento e connessione SNAT. Per altre informazioni sul gateway NAT di Azure, vedere Che cos'è il gateway NAT di Azure?.

  • In che modo un gateway NAT riduce il rischio di esaurimento della porta SNAT?

    Azure Load Balancer alloca quantità fisse di porte SNAT a ogni istanza di macchina virtuale in un pool back-end. Questo metodo di allocazione può causare l'esaurimento SNAT, soprattutto se i modelli di traffico non uniformi generano una macchina virtuale specifica che invia un volume maggiore di connessioni in uscita. A differenza del bilanciamento del carico, un gateway NAT alloca in modo dinamico le porte SNAT in tutte le istanze di macchina virtuale all'interno di una subnet.

    Un gateway NAT rende le porte SNAT disponibili accessibili a ogni istanza di una subnet. Questa allocazione dinamica consente alle istanze di macchine virtuali di usare il numero di porte SNAT necessarie dal pool di porte disponibile per le nuove connessioni. L'allocazione dinamica riduce il rischio di esaurimento SNAT.

    Diagram of Azure Load Balancer vs. Azure NAT Gateway.

  • Selezione delle porte e comportamento di riutilizzo.

    Un gateway NAT seleziona le porte in modo casuale dal pool di porte disponibile. Se non sono disponibili porte, le porte SNAT vengono riutilizzate, purché non esista alcuna connessione alla stessa porta e IP pubblico di destinazione. Questa selezione delle porte e il comportamento di riutilizzo di un gateway NAT rende meno probabile che si verifichino timeout di connessione.

    Per altre informazioni sul funzionamento dell'utilizzo di SNAT e delle porte per il gateway NAT, vedere Nozioni fondamentali su SNAT. Esistono alcune condizioni in cui non sarà possibile usare il gateway NAT per le connessioni in uscita. Per altre informazioni sulle limitazioni del gateway NAT, vedere Limitazioni del gateway NAT.

    Se non è possibile usare un gateway NAT per la connettività in uscita, vedere le altre opzioni di migrazione descritte in questo articolo.

Configurare le regole in uscita del bilanciamento del carico per ottimizzare le porte SNAT per macchina virtuale

Se si usa un servizio di bilanciamento del carico standard pubblico e si verificano errori di esaurimento o connessione SNAT, assicurarsi di usare regole in uscita con allocazione manuale delle porte. In caso contrario, è probabile che ci si basi sull'accesso in uscita predefinito del bilanciamento del carico. L'accesso in uscita predefinito alloca automaticamente un numero conservativo di porte, basato sul numero di istanze nel pool back-end. L'accesso in uscita predefinito non è un metodo consigliato per abilitare le connessioni in uscita. Quando il pool back-end viene ridimensionato, le connessioni potrebbero essere interessate se è necessario riallocare le porte.

Per altre informazioni sull'accesso in uscita predefinito e sull'allocazione delle porte predefinita, vedere Network Address Translation di origine per le connessioni in uscita.

Per aumentare il numero di porte SNAT disponibili per macchina virtuale, configurare le regole in uscita con l'allocazione manuale delle porte nel bilanciamento del carico. Ad esempio, se si è certi di avere un massimo di 10 macchine virtuali nel pool back-end, è possibile allocare fino a 6.400 porte SNAT per macchina virtuale anziché le 1.024 predefinite. Se sono necessarie più porte SNAT, è possibile aggiungere più indirizzi IP front-end per le connessioni in uscita per moltiplicare il numero di porte SNAT disponibili. Assicurarsi di comprendere perché si esauriscono le porte SNAT prima di aggiungere altri indirizzi IP front-end.

Per indicazioni dettagliate, vedere Progettare le applicazioni per usare le connessioni in modo efficiente più avanti in questo articolo. Per aggiungere altri indirizzi IP per le connessioni in uscita, creare una configurazione IP front-end per ogni nuovo IP. Quando sono configurate regole in uscita, è possibile selezionare più configurazioni IP front-end per un pool back-end. È consigliabile usare indirizzi IP diversi per la connettività in ingresso e in uscita. Indirizzi IP diversi isolano il traffico per migliorare il monitoraggio e la risoluzione dei problemi.

Configurare un singolo indirizzo IP pubblico nella macchina virtuale

Per le distribuzioni di scalabilità più piccole, è possibile valutare la possibilità di assegnare un indirizzo IP pubblico a una macchina virtuale. Se a una macchina virtuale viene assegnato un indirizzo IP pubblico, tutte le porte fornite dall'indirizzo IP pubblico sono disponibili per la macchina virtuale. A differenza di un bilanciamento del carico o di un gateway NAT, le porte sono accessibili solo alla singola macchina virtuale associata all'indirizzo IP.

È consigliabile prendere in considerazione l'utilizzo del gateway NAT, perché l'assegnazione di singoli indirizzi IP pubblici non è una soluzione scalabile.

Nota

Se è necessario connettere la rete virtuale di Azure ai servizi PaaS di Azure come Archiviazione di Azure, Azure SQL, Azure Cosmos DB o altri servizi di Azure disponibili, è possibile usare il collegamento privato di Azure per evitare completamente SNAT. Collegamento privato di Azure invia il traffico dalla rete virtuale ai servizi di Azure tramite la rete backbone di Azure anziché tramite Internet.

Collegamento privato è l'opzione consigliata in relazione agli endpoint di servizio per l'accesso privato ai servizi ospitati di Azure. Per altre informazioni sulla differenza tra collegamento privato ed endpoint di servizio, vedere Confrontare endpoint privati ed endpoint di servizio.

Progettare applicazioni efficienti per la connessione

Quando si progettano le applicazioni, assicurarsi che usino le connessioni in modo efficiente. L'efficienza della connessione può ridurre o eliminare l'esaurimento delle porte SNAT nelle applicazioni distribuite.

Modificare l'applicazione per riutilizzare le connessioni

Invece di generare connessioni TCP singole e atomiche per ogni richiesta, è consigliabile configurare l'applicazione per riutilizzare le connessioni. Il riutilizzo delle connessioni comporta transazioni TCP più efficienti ed è particolarmente rilevante per i protocolli come HTTP/1.1, dove il riutilizzo della connessione è l'impostazione predefinita. Questo riutilizzo si applica ad altri protocolli che usano HTTP come trasporto, ad esempio REST.

Modificare l'applicazione per usare pool di connessioni

Utilizzare uno schema di pool di connessioni nell'applicazione, in cui le richieste vengono distribuite internamente in un set fisso di connessioni e riutilizzate quando possibile. Questo schema limita il numero di porte SNAT in uso e crea un ambiente più prevedibile.

Può anche migliorare la velocità effettiva delle richieste, consentendo più operazioni simultanee, quando una connessione si blocca sulla risposta di un'operazione.

Il pool delle connessioni potrebbe essere già presente nell'ambito usato per sviluppare l'applicazione o le impostazioni di configurazione dell'applicazione. È possibile combinare il pool di connessioni con il riutilizzo delle connessioni. Le richieste multiple impiegano quindi un numero prevedibile fisso di porte per la stessa porta e lo stesso indirizzo IP di destinazione.

Le richieste traggono anche vantaggio dall'uso efficiente delle transazioni TCP che riducono la latenza e l'utilizzo delle risorse. Le transazioni UDP possono inoltre trarne vantaggio. La gestione del numero di flussi UDP può evitare condizioni di esaurimento e gestire l'utilizzo delle porte SNAT.

Modificare l'applicazione per usare una logica di ripetizione meno aggressiva

Quando vengono esaurite le porte SNAT o si verificano errori nell'applicazione, i tentativi di ripetizione aggressivi o di forza bruta senza logica di backoff e decadenza causano il verificarsi o la persistenza dell'esaurimento. È possibile ridurre la richiesta di porte SNAT usando una logica di ripetizione meno aggressiva.

A seconda del timeout di inattività configurato, se i tentativi sono troppo aggressivi, le connessioni potrebbero non avere tempo sufficiente per chiudere e rilasciare porte SNAT per il riutilizzo.

Usare keep-alive per reimpostare il timeout di inattività per le connessioni uscita

Le regole in uscita del bilanciamento del carico presentano un timeout di inattività di 4 minuti per impostazione predefinita regolabile fino a 100 minuti. È possibile usare keep-alive TCP per aggiornare un flusso di inattività e reimpostare questo timeout di inattività, se necessario. Quando si usano keep-alive TCP, è sufficiente abilitarli sul lato della connessione.

Ad esempio, è sufficiente abilitarli sul lato server solo per reimpostare il timer di inattività del flusso, mentre questo non è necessario per entrambi i lati per avviare i keep-alive TCP. Si applicano concetti simili anche per il livello dell'applicazione, tra cui le configurazioni client-server di database. Controllare il lato server per verificare le opzioni disponibili per keep-alive specifici dell'applicazione.

Passaggi successivi

Per altre informazioni sull'esaurimento delle porte SNAT, sulle opzioni di connettività in uscita e sull'accesso in uscita predefinito, vedere: