Problembehandlung bei SNAT-Auslastung und Verbindungstimeouts

Dieser Artikel beschreibt Anleitungen für häufige Probleme, die bei ausgehenden Azure Load Balancer-Verbindungen auftreten können. Die meisten bei Kunden auftretenden Probleme mit der ausgehenden Konnektivität sind auf die SNAT-Portauslastung (Source Network Address Translation, Quellnetzwerkadressen-Übersetzung) und Verbindungstimeouts zurückzuführen, aus denen verworfene Pakete resultieren.

Weitere Informationen zu SNAT-Ports finden Sie unter SNAT (Source Network Address Translation) für ausgehende Verbindungen.

Grundlegendes zur SNAT-Portnutzung

Befolgen Sie die Informationen unter Diagnose für Load Balancer Standard mit Metriken, Warnungen und Ressourcenintegrität, um die SNAT-Portnutzung und -Zuordnung Ihres vorhandenen Lastenausgleichs zu überwachen. Überwachen Sie, um das Risiko der SNAT-Auslastung zu bestätigen oder zu ermitteln. Falls Sie Probleme haben, das Verhalten von ausgehenden Verbindungen zu verstehen, verwenden Sie IP-Stapelstatistiken (netstat), oder sammeln Sie Paketerfassungen. Sie können diese Paketerfassungen im Gastbetriebssystem Ihrer Instanz durchführen oder Network Watcher für die Paketerfassung verwenden. In den meisten Szenarien empfiehlt Azure die Verwendung eines NAT Gateways für ausgehende Konnektivität, um das Risiko der SNAT-Auslastung zu verringern. Ein NAT Gateway wird dringend empfohlen, wenn Ihr Dienst wiederholte ausgehende TCP- oder UDP-Verbindungen mit demselben Ziel initiiert.

Optimieren Ihrer Azure-Bereitstellungen für ausgehende Konnektivität

Es ist wichtig, Ihre Azure-Bereitstellungen für ausgehende Konnektivität zu optimieren. Die Optimierung kann Probleme mit ausgehender Konnektivität verhindern oder verringern.

Verwenden eines NAT Gateways für ausgehende Konnektivität über das Internet

Das NAT Gateway für virtuelle Netzwerke ist ein hochgradig robuster und skalierbarer Azure-Dienst, der ausgehende Verbindungen ins Internet über Ihr virtuelles Netzwerk bereitstellt. Die einzigartige Methode des NAT Gateways bei der Verwendung von SNAT-Ports hilft bei der Behebung gängiger Probleme durch SNAT-Auslastung und mit Verbindungen. Weitere Informationen zu Azure Virtual Network NAT finden Sie unter Was ist Azure Virtual Network NAT?.

  • Wie reduziert ein NAT Gateway das Risiko der SNAT-Portauslastung?

    Azure Load Balancer ordnet jeder virtuellen Computerinstanz in einem Back-End-Pool eine feste Menge von SNAT-Ports zu. Diese Methode der Zuordnung kann zu SNAT-Auslastung führen, insbesondere wenn ungleichmäßige Datenverkehrsmuster dazu führen, dass ein bestimmter virtueller Computer ein höheres Volumen von ausgehenden Verbindungen sendet. Im Gegensatz zum Lastenausgleich ordnet ein NAT Gateway SNAT-Ports dynamisch allen VM-Instanzen innerhalb eines Subnetzes zu.

    Ein NAT Gateway stellt verfügbare SNAT-Ports für jede Instanz in einem Subnetz bereit. Mit dieser dynamischen Zuordnung können VM-Instanzen die Anzahl von SNAT-Ports aus dem verfügbaren Portpool für neue Verbindungen verwenden, die sie benötigen. Die dynamische Zuordnung verringert das Risiko der SNAT-Auslastung.

    Diagram of Azure Load Balancer vs. Azure Virtual Network NAT.

  • Verhalten bei Portauswahl- und -wiederverwendung.

    Ein NAT Gateway wählt Ports zufällig aus dem verfügbaren Pool von Ports aus. Wenn keine Ports verfügbar sind, werden SNAT-Ports wiederverwendet, solange keine Verbindung mit derselben öffentlichen IP-Adresse und demselben Zielport vorhanden ist. Diese Portauswahl und das Wiederverwendungsverhalten eines NAT Gateways machen es weniger wahrscheinlich, dass Verbindungstimeouts auftreten.

    Weitere Informationen dazu, wie SNAT und Portnutzung für NAT Gateway funktionieren, finden Sie unter SNAT-Grundlagen. Es gibt einige Bedingungen, unter denen Sie das NAT Gateway nicht für ausgehende Verbindungen verwenden können. Weitere Informationen zu NAT Gateway-Beschränkungen finden Sie unter Virtual Network NAT-Einschränkungen.

    Wenn Sie kein NAT Gateway für ausgehende Verbindungen verwenden können, sehen Sie sich die anderen in diesem Artikel beschriebenen Migrationsoptionen an.

Konfigurieren von Ausgangsregeln für Lastenausgleich zum Maximieren der SNAT-Ports pro VM

Wenn Sie einen öffentlichen Load Balancer Standard verwenden und es zu SNAT-Auslastung oder Verbindungsfehler kommt, stellen Sie sicher, dass Sie Ausgangsregeln mit manueller Portzuordnung verwenden. Andernfalls verlassen Sie sich wahrscheinlich auf den Standardzugriff in ausgehender Richtung des Lastenausgleichs. Der Standardzugriff in ausgehender Richtung ordnet automatisch eine konservative Anzahl von Ports zu, die auf der Anzahl der Instanzen in Ihrem Back-End-Pool basiert. Standardzugriff in ausgehender Richtung ist keine empfohlene Methode zum Ermöglichen ausgehender Verbindungen. Wenn Ihr Back-End-Pool skaliert wird, können Ihre Verbindungen beeinträchtigt werden, wenn Ports neu zugeordnet werden müssen.

Weitere Informationen zum Standardzugriff in ausgehender Richtung und zur standardmäßigen Portzuordnung finden Sie unter SNAT (Source Network Address Translation) für ausgehende Verbindungen.

Um die Anzahl der verfügbaren SNAT-Ports pro VM zu erhöhen, konfigurieren Sie Ausgangsregeln mit manueller Portzuordnung für Ihren Lastenausgleich. Wenn Sie beispielsweise wissen, dass Sie maximal 10 VMs in Ihrem Back-End-Pool verwenden werden, können Sie, anstelle des Standards von 1.024 Ports, pro VM bis zu 6.400 SNAT-Ports zuordnen. Wenn Sie mehr SNAT-Ports benötigen, können Sie mehrere Front-End-IP-Adressen für ausgehende Verbindungen hinzufügen, um die Anzahl der verfügbaren SNAT-Ports zu vervielfachen. Stellen Sie sicher, dass Sie verstehen, warum Ihre SNAT-Ports ausgelastet werden, bevor Sie weitere Front-End-IP-Adressen hinzufügen.

Ausführliche Anleitungen finden Sie unter Entwerfen Ihrer Anwendungen zur effizienten Verwendung von Verbindungen weiter unten in diesem Artikel. Um weitere IP-Adressen für ausgehende Verbindungen hinzuzufügen, erstellen Sie eine Front-End-IP-Konfiguration für jede neue IP-Adresse. Wenn Ausgangsregeln konfiguriert sind, können Sie mehrere Front-End-IP-Konfigurationen für einen Back-End-Pool auswählen. Es wird empfohlen, verschiedene IP-Adressen für eingehende und ausgehende Konnektivität zu verwenden. Unterschiedliche IP-Adressen isolieren Datenverkehr für eine verbesserte Überwachung und Problembehandlung.

Konfigurieren einer einzelnen öffentlichen IP-Adresse auf einem virtuellen Computer

Bei kleineren Bereitstellungen können Sie die Zuweisung einer öffentlichen IP-Adresse zu einem virtuellen Computer in Betracht ziehen. Wenn einer VM eine öffentliche IP-Adresse zugewiesen wird, sind alle Ports, die von der öffentlichen IP-Adresse bereitgestellt werden, für den virtuellen Computer verfügbar. Im Gegensatz zu einem Lastenausgleich oder einem NAT Gateway sind die Ports nur für die einzelne VM zugänglich, die der IP-Adresse zugeordnet ist.

Es wird dringend empfohlen, stattdessen die Verwendung des NAT Gateways zu erwägen, da das Zuweisen einzelner öffentlicher IP-Adressen keine skalierbare Lösung ist.

Hinweis

Wenn Sie Ihr virtuelles Azure-Netzwerk mit Azure PaaS-Diensten wie Storage, SQL, Cosmos DB oder einem anderen der hier aufgeführten Azure-Dienste verbinden müssen, können Sie Azure Private Link nutzen, um SNAT vollständig zu vermeiden. Azure Private Link sendet Datenverkehr von Ihrem virtuellen Netzwerk an Azure-Dienste über das Azure-Backbone-Netzwerk, anstatt das Internet zu nutzen.

Private Link ist die empfohlene Option für Dienstendpunkte für den privaten Zugriff auf in Azure gehostete Dienste. Weitere Informationen zum Unterschied zwischen Private Link und Dienstendpunkten finden Sie unter Vergleichen privater Endpunkte und Dienstendpunkte.

Entwerfen Ihrer Anwendungen zur effizienten Verwendung von Verbindungen

Wenn Sie Ihre Anwendungen entwerfen, stellen Sie sicher, dass sie Verbindungen effizient nutzen. Die Verbindungseffizienz kann die SNAT-Portauslastung in Ihren bereitgestellten Anwendungen verringern oder beseitigen.

Ändern der Anwendung für die Wiederverwendung von Verbindungen

Anstatt einzelne, unteilbare TCP-Verbindungen für jede Anforderung zu generieren, empfehlen wir, Ihre Anwendung so zu konfigurieren, dass Verbindungen wiederverwendet werden. Die Wiederverwendung von Verbindungen führt zu leistungsfähigeren TCP-Transaktionen und ist insbesondere für Protokolle wie HTTP/1.1 relevant, beim dem Verbindungen standardmäßig wiederverwendet werden. Diese Wiederverwendung gilt für andere Protokolle, die HTTP als Transport verwenden, z. B. REST.

Ändern der Anwendung für die Verwendung von Verbindungspooling

Verwenden Sie in Ihrer Anwendung ein Verbindungspoolingschema, bei dem Anforderungen intern auf einen festen Satz von Verbindungen verteilt und wenn möglich wiederverwendet werden. Bei diesem Schema wird die Anzahl der verwendeten SNAT-Ports eingeschränkt und eine besser vorhersagbare Umgebung erstellt.

Dies kann den Durchsatz von Anforderungen erhöhen, da mehrere gleichzeitige Vorgänge zugelassen werden, wenn eine einzelne Verbindung durch die Antwort eines Vorgangs blockiert wird.

Verbindungspooling ist möglicherweise innerhalb des Frameworks, das Sie zum Entwickeln Ihrer Anwendung oder der Konfigurationseinstellungen für Ihre Anwendung verwenden, bereits vorhanden. Sie können das Verbindungspooling mit der Wiederverwendung von Verbindungen kombinieren. Mehrere Anforderungen nutzen dann eine feste vorhersagbare Anzahl von Ports für die gleiche IP-Zieladresse und den gleichen Port.

Bei den Anforderungen profitieren Sie von der effizienten Verwendung von TCP-Transaktionen, was zu niedrigeren Latenzzeiten und geringerer Ressourcenauslastung führt. UDP-Transaktionen können auch davon profitieren. Die Verwaltung der Anzahl von UDP-Datenflüssen kann Zustände mit voller Auslastung vermieden und die SNAT-Portnutzung verwalten.

Ändern der Anwendung für die Verwendung weniger aggressiver Wiederholungslogik

Wenn SNAT-Ports ausgelastet sind oder Anwendungsfehler auftreten, führen aggressive oder Brute-Force-Wiederholungsversuche ohne Verfalls- und Backofflogik zu Erschöpfung oder gar anhaltender Erschöpfung. Sie können den Bedarf an SNAT-Ports durch Verwendung einer weniger aggressiven Wiederholungslogik reduzieren.

Je nach konfiguriertem Leerlauftimeout haben Verbindungen bei zu aggressiven Wiederholungsversuchen möglicherweise nicht genügend Zeit, um SNAT-Ports für die Wiederverwendung zu schließen und freizugeben.

Verwenden von Keep-Alives zum Zurücksetzen des Leerlauftimeouts für ausgehende Verbindungen

Ausgangsregeln für Lastenausgleich verfügen standardmäßig über ein 4-minütiges Leerlauftimeout, das auf bis zu 100 Minuten anpassbar ist. Sie können TCP-KeepAlives verwenden, um einen im Leerlauf befindlichen Datenfluss zu aktualisieren, und diesen Leerlauftimeout bei Bedarf zurücksetzen. Wenn TCP-KeepAlives verwendet werden, genügt es zudem, sie auf einer Seite der Verbindung zu aktivieren.

So reicht es beispielsweise aus, sie auf der Serverseite nur zu aktivieren, um den Leerlauf-Timer des Datenflusses zurückzusetzen, und es ist nicht erforderlich, dass beide Seiten TCP-KeepAlives initiieren. Ähnliche Konzepte gibt es für die Anwendungsschicht, einschließlich Client/Server-Konfigurationen für Datenbanken. Überprüfen Sie auf der Serverseite, welche Optionen es für anwendungsspezifische Keepalives gibt.

Nächste Schritte

Weitere Informationen zur SNAT-Portauslastung, zu Optionen für ausgehende Konnektivität und zum Standardzugriff in ausgehender Richtung finden Sie unter: