Share via


Problemen met uitgaande connectiviteit van Azure Load Balancer oplossen

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

Zie Source Network Address Translation 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. Bewaak om het risico van SNAT-uitputting te bevestigen of te bepalen. Als u problemen ondervindt met het begrijpen van uw gedrag voor 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 aan om een NAT-gateway te gebruiken voor uitgaande connectiviteit om het risico op SNAT-uitputting te verminderen. Een NAT-gateway wordt ten zeerste aanbevolen als uw service herhaalde TCP- of UDP-uitgaande 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 verlichten.

NAT-gateway implementeren voor uitgaande internetverbinding

Azure NAT Gateway is een uiterst tolerante en schaalbare Azure-service die uitgaande connectiviteit met internet biedt vanuit uw virtuele netwerk. De unieke methode van het gebruik van SNAT-poorten van een NAT-gateway 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 een virtuele machine in een back-endpool. Deze toewijzingsmethode kan leiden tot SNAT-uitputting, met name als ongelijke verkeerspatronen resulteren in een specifieke virtuele machine die een hoger volume uitgaande verbindingen verzendt. In tegenstelling tot load balancer wijst een NAT-gateway SNAT-poorten dynamisch toe aan alle VM-exemplaren binnen een subnet.

    Een NAT-gateway maakt beschikbare SNAT-poorten toegankelijk voor elk exemplaar in een subnet. Met deze dynamische toewijzing kunnen VM-exemplaren het aantal SNAT-poorten gebruiken dat elk nodig is uit de beschikbare groep poorten voor nieuwe verbindingen. De dynamische toewijzing vermindert het risico op SNAT-uitputting.

    Diagram van Azure Load Balancer versus Azure NAT Gateway.

  • Poortselectie en gedrag voor 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. Deze poortselectie en het gedrag van een NAT-gateway hergebruiken maakt het minder waarschijnlijk dat er verbindingstime-outs optreden.

    Zie de basisprincipes van SNAT voor meer informatie over het gebruik van SNAT en poort voor NAT-gateway. Er zijn enkele voorwaarden waarin u geen NAT-gateway 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 vertrouwt u waarschijnlijk op de standaardpoorttoewijzing van de load balancer. Standaardpoorttoewijzing wijst automatisch een conservatief aantal poorten toe, dat is gebaseerd op het aantal exemplaren in uw back-endpool. Standaardpoorttoewijzing 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 Bronnetwerkadresomzetting voor uitgaande verbindingen voor meer informatie over 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 u maximaal 10 VM's in uw back-endpool hebt, kunt u maximaal 6.400 SNAT-poorten per VM toewijzen in plaats van de standaardwaarde 1024. Als u meer SNAT-poorten nodig hebt, kunt u meerdere front-end-IP-adressen toevoegen voor uitgaande verbindingen om het aantal beschikbare SNAT-poorten te vermenigvuldigen. Zorg ervoor dat u begrijpt waarom u SNAT-poorten gebruikt voordat u meer front-end-IP-adressen toevoegt.

Zie Ontwerp uw toepassingen voor het efficiënt gebruiken van verbindingen 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 verbeterde bewaking en probleemoplossing.

Een afzonderlijk openbaar IP-adres op vm configureren

Voor kleinere implementaties kunt u overwegen om een openbaar IP-adres toe te wijzen aan een VIRTUELE machine. Als een openbaar IP-adres is toegewezen aan een virtuele machine, zijn alle poorten die door het openbare IP-adres worden geleverd, beschikbaar voor de virtuele machine. 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 voorkomen. Azure Private Link verzendt verkeer van uw virtuele netwerk naar Azure-services via het Backbone-netwerk van Azure in plaats van via internet.

Private Link is de aanbevolen optie voor service-eindpunten voor privétoegang tot gehoste Azure-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 deze verbindingen efficiënt gebruiken. Verbindingsefficiëntie kan SNAT-poortuitputting in uw geïmplementeerde toepassingen verminderen of elimineren.

Pas de toepassing aan om verbindingen opnieuw te gebruiken

In plaats van afzonderlijke, atomische TCP-verbindingen te genereren voor elke aanvraag, raden we u aan uw toepassing te configureren voor hergebruik van verbindingen. Opnieuw gebruiken van verbindingen resulteert in meer presterende TCP-transacties en is vooral relevant voor protocollen zoals HTTP/1.1, waarbij het opnieuw gebruiken van verbindingen de standaardinstelling is. Dit hergebruik is van toepassing op andere protocollen die HTTP gebruiken als hun transport, 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 maakt een voorspelbarere omgeving.

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

Verbindingspooling bestaat mogelijk al binnen het framework dat u gebruikt om uw toepassing of de configuratie-instellingen voor uw toepassing te ontwikkelen. U kunt groepsgewijze verbindingen combineren met hergebruik 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 voordeel hebben. 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, agressieve of brute force nieuwe pogingen zonder verval en back-off logica leiden 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, is het mogelijk dat verbindingen onvoldoende tijd hebben om SNAT-poorten te sluiten en los te laten 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 voor inactiviteit van 4 minuten die maximaal 100 minuten kan worden aangepast. 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 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 toepassingslaag, waaronder configuraties van de databaseclientserver. 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 standaardtoegang voor uitgaand verkeer: