Problemen met Azure Load Balancer uitgaande connectiviteit oplossen

Meer informatie over probleemoplossingsrichtlijnen voor uitgaande verbindingen in Azure Load Balancer. Dit omvat inzicht in SNAT (Source Network Address Translation) en de impact op verbindingen, het gebruik van afzonderlijke openbare IP-adressen op VM's en het ontwerpen van toepassingen voor verbindingsefficiëntie om uitputting van SNAT-poorten te voorkomen. De meeste problemen met uitgaande connectiviteit die klanten ervaren, worden veroorzaakt door uitputting van SNAT-poorten en verbindingstime-outs die leiden tot verwijderde pakketten.

Zie Bronnetwerkadresomzetting voor uitgaande verbindingen voor meer informatie over SNAT-poorten.

Inzicht in uw SNAT-poortgebruik

Volg de diagnostische gegevens van standard load balancer met metrische gegevens, waarschuwingen en resourcestatus om het SNAT-poortgebruik en de toewijzing van uw bestaande load balancer te bewaken. Controleren om het risico van SNAT-uitputting te bevestigen of te bepalen. Als u problemen ondervindt bij het begrijpen van het gedrag van uitgaande verbindingen, gebruikt u IP-stackstatistieken (netstat) of verzamelt u pakketopnamen. U kunt deze pakketopnamen uitvoeren in het gastbesturingssystemen van uw exemplaar of Network Watcher gebruiken voor pakketopname. Voor de meeste scenario's raadt Azure het gebruik van een NAT-gateway aan voor uitgaande connectiviteit om het risico op SNAT-uitputting te verminderen. Een NAT-gateway wordt ten zeerste aanbevolen als uw service herhaalde UITGAANDE TCP- of UDP-verbindingen naar dezelfde bestemming initieert.

Uw Azure-implementaties optimaliseren voor uitgaande connectiviteit

Het is belangrijk om uw Azure-implementaties te optimaliseren voor uitgaande connectiviteit. Optimalisatie kan problemen met uitgaande connectiviteit voorkomen of oplossen.

NAT-gateway implementeren voor uitgaande internetverbinding

Azure NAT Gateway is een zeer tolerante en schaalbare Azure-service die uitgaande connectiviteit met internet biedt vanuit uw virtuele netwerk. De unieke methode van een NAT-gateway voor het gebruik van SNAT-poorten helpt bij het oplossen van veelvoorkomende SNAT-uitputtings- en verbindingsproblemen. Zie Wat is Azure NAT Gateway? voor meer informatie over Azure NAT Gateway.

  • Hoe vermindert een NAT-gateway het risico op uitputting van SNAT-poorten?

    Azure Load Balancer wijst vaste hoeveelheden SNAT-poorten toe aan elk exemplaar van de virtuele machine in een back-endpool. Deze toewijzingsmethode kan leiden tot SNAT-uitputting, met name als ongelijke verkeerspatronen ertoe leiden dat een specifieke virtuele machine een groter volume uitgaande verbindingen verzendt. In tegenstelling tot load balancer wijst een NAT-gateway dynamisch SNAT-poorten toe aan alle VM-exemplaren binnen een subnet.

    Een NAT-gateway maakt SNAT-poorten beschikbaar die toegankelijk zijn voor elk exemplaar in een subnet. Met deze dynamische toewijzing kunnen VM-exemplaren het aantal SNAT-poorten gebruiken dat elke nodig heeft van de beschikbare pool poorten voor nieuwe verbindingen. De dynamische toewijzing vermindert het risico op SNAT-uitputting.

    Diagram van Azure Load Balancer versus Azure NAT Gateway.

  • Gedrag van poortselectie en hergebruik.

    Een NAT-gateway selecteert willekeurig poorten uit de beschikbare groep poorten. Als er geen beschikbare poorten zijn, worden SNAT-poorten opnieuw gebruikt zolang er geen bestaande verbinding is met hetzelfde openbare IP-adres en dezelfde poort van het doel. Dit gedrag voor poortselectie en hergebruik van een NAT-gateway maakt het minder waarschijnlijk dat er verbindingstime-outs optreden.

    Zie Basisprincipes van SNAT voor meer informatie over hoe SNAT en poortgebruik werken voor NAT-gateway. Er zijn enkele voorwaarden waarin u nat-gateway niet kunt gebruiken voor uitgaande verbindingen. Zie NAT-gatewaybeperkingen voor meer informatie over NAT-gatewaybeperkingen.

    Als u geen NAT-gateway kunt gebruiken voor uitgaande connectiviteit, raadpleegt u de andere migratieopties die in dit artikel worden beschreven.

Uitgaande regels voor load balancer configureren om SNAT-poorten per VM te maximaliseren

Als u een openbare standaard load balancer gebruikt en SNAT-uitputting of verbindingsfouten ondervindt, moet u ervoor zorgen dat u uitgaande regels gebruikt met handmatige poorttoewijzing. Anders bent u waarschijnlijk afhankelijk van de standaard uitgaande toegang van load balancer. Standaard uitgaande toegang wijst automatisch een conservatief aantal poorten toe, op basis van het aantal exemplaren in uw back-endpool. Standaard uitgaande toegang is geen aanbevolen methode voor het inschakelen van uitgaande verbindingen. Wanneer uw back-endpool wordt geschaald, kunnen uw verbindingen worden beïnvloed als poorten opnieuw moeten worden toegewezen.

Zie Source Network Address Translation for outbound connections (Bronnetwerkadresomzetting voor uitgaande verbindingen) voor meer informatie over standaard uitgaande toegang en standaardpoorttoewijzing.

Als u het aantal beschikbare SNAT-poorten per VM wilt verhogen, configureert u uitgaande regels met handmatige poorttoewijzing op uw load balancer. Als u bijvoorbeeld weet dat uw back-endpool maximaal 10 VM's bevat, kunt u maximaal 6400 SNAT-poorten per VM toewijzen in plaats van de standaard 1024. Als u meer SNAT-poorten nodig hebt, kunt u meerdere front-end-IP-adressen voor uitgaande verbindingen toevoegen om het aantal beschikbare SNAT-poorten te vermenigvuldigen. Zorg ervoor dat u begrijpt waarom u SNAT-poorten uitput voordat u meer front-end-IP-adressen toevoegt.

Zie Uw toepassingen ontwerpen om verbindingen efficiënt te gebruiken verderop in dit artikel voor gedetailleerde richtlijnen. Als u meer IP-adressen voor uitgaande verbindingen wilt toevoegen, maakt u een front-end-IP-configuratie voor elk nieuw IP-adres. Wanneer uitgaande regels zijn geconfigureerd, kunt u meerdere front-end-IP-configuraties voor een back-endpool selecteren. Het is raadzaam om verschillende IP-adressen te gebruiken voor binnenkomende en uitgaande connectiviteit. Verschillende IP-adressen isoleren verkeer voor betere bewaking en probleemoplossing.

Een afzonderlijk openbaar IP-adres configureren op de VM

Voor implementaties op kleinere schaal kunt u overwegen een openbaar IP-adres toe te wijzen aan een VIRTUELE machine. Als een openbaar IP-adres is toegewezen aan een VM, zijn alle poorten die door het openbare IP-adres worden geleverd, beschikbaar voor de VM. In tegenstelling tot een load balancer of een NAT-gateway zijn de poorten alleen toegankelijk voor de enkele VM die is gekoppeld aan het IP-adres.

We raden u ten zeerste aan om in plaats daarvan nat-gateway te gebruiken, omdat het toewijzen van afzonderlijke openbare IP-adressen geen schaalbare oplossing is.

Notitie

Als u uw virtuele Azure-netwerk wilt verbinden met Azure PaaS-services zoals Azure Storage, Azure SQL, Azure Cosmos DB of andere beschikbare Azure-services, kunt u Azure Private Link gebruiken om SNAT volledig te vermijden. Azure Private Link verzendt verkeer van uw virtuele netwerk naar Azure-services via het Azure-backbonenetwerk in plaats van via internet.

Private Link is de aanbevolen optie voor service-eindpunten voor privétoegang tot door Azure gehoste services. Zie Privé-eindpunten en service-eindpunten vergelijken voor meer informatie over het verschil tussen Private Link en service-eindpunten.

Verbindingsefficiënte toepassingen ontwerpen

Wanneer u uw toepassingen ontwerpt, moet u ervoor zorgen dat ze efficiënt gebruikmaken van verbindingen. Verbindingsefficiëntie kan uitputting van SNAT-poorten in uw geïmplementeerde toepassingen verminderen of elimineren.

Pas de toepassing aan om verbindingen opnieuw te gebruiken

In plaats van afzonderlijke atomische TCP-verbindingen voor elke aanvraag te genereren, raden we u aan uw toepassing te configureren om verbindingen opnieuw te gebruiken. Opnieuw gebruiken van verbindingen resulteert in beter presterende TCP-transacties en is met name relevant voor protocollen zoals HTTP/1.1, waarbij hergebruik van verbindingen de standaardinstelling is. Dit hergebruik is van toepassing op andere protocollen die HTTP als transport gebruiken, zoals REST.

Pas de toepassing zo aan dat deze verbindingsgroepen gebruikt

Gebruik een groepsschema voor verbindingen in uw toepassing, waarbij aanvragen intern worden verdeeld over een vaste set verbindingen en waar mogelijk opnieuw worden gebruikt. Dit schema beperkt het aantal SNAT-poorten dat wordt gebruikt en creëert een meer voorspelbare omgeving.

Dit schema kan de doorvoer van aanvragen verhogen door meerdere gelijktijdige bewerkingen toe te staan wanneer één verbinding het antwoord van een bewerking blokkeert.

Groepsgewijze verbindingen bestaan mogelijk al binnen het framework dat u gebruikt voor het ontwikkelen van uw toepassing of de configuratie-instellingen voor uw toepassing. U kunt groepsgewijze verbindingen combineren met opnieuw gebruiken van verbindingen. Uw meerdere aanvragen verbruiken vervolgens een vast, voorspelbaar aantal poorten naar hetzelfde doel-IP-adres en dezelfde poort.

De aanvragen profiteren van efficiënt gebruik van TCP-transacties, waardoor latentie en resourcegebruik worden verminderd. UDP-transacties kunnen ook profiteren. Het beheer van het aantal UDP-stromen kan uitlaatomstandigheden voorkomen en het SNAT-poortgebruik beheren.

Pas de toepassing zo aan dat deze minder agressieve logica voor opnieuw proberen gebruikt

Wanneer SNAT-poorten zijn uitgeput of toepassingsfouten optreden, leiden agressieve of brute force-pogingen zonder verval en back-offlogica tot uitputting of persistentie. U kunt de vraag naar SNAT-poorten verminderen met behulp van een minder agressieve logica voor opnieuw proberen.

Afhankelijk van de geconfigureerde time-out voor inactiviteit hebben verbindingen, als nieuwe pogingen te agressief zijn, mogelijk niet voldoende tijd om SNAT-poorten te sluiten en vrij te geven voor hergebruik.

Keep-alives gebruiken om de time-out voor uitgaande inactiviteit opnieuw in te stellen

Uitgaande regels voor load balancer hebben standaard een time-out van 4 minuten voor inactiviteit die kan worden ingesteld op maximaal 100 minuten. U kunt TCP-keepalives gebruiken om een niet-actieve stroom te vernieuwen en deze time-out voor inactiviteit zo nodig opnieuw in te stellen. Wanneer u TCP-keepalives gebruikt, is het voldoende om ze aan één kant van de verbinding in te schakelen.

Het is bijvoorbeeld voldoende om ze aan de serverzijde alleen in te schakelen om de niet-actieve timer van de stroom opnieuw in te stellen en het is niet nodig voor beide zijden om TCP-keepalives te initiëren. Er bestaan vergelijkbare concepten voor de toepassingslaag, waaronder databaseclient-serverconfiguraties. Controleer aan de serverzijde welke opties er bestaan voor toepassingsspecifieke keepalives.

Volgende stappen

Zie voor meer informatie over SNAT-poortuitputting, opties voor uitgaande connectiviteit en standaard uitgaande toegang: