Utgående anslutningar (klassisk)
Azure tillhandahåller utgående anslutning för kunddistributioner via flera olika mekanismer. Den här artikeln beskriver vad scenarierna är, när de tillämpas, hur de fungerar och hur de hanteras.
Anteckning
Den här artikeln beskriver endast klassiska distributioner. Granska Utgående anslutningar för alla Resource Manager distributionsscenarier i Azure.
En distribution i Azure kan kommunicera med slutpunkter utanför Azure i det offentliga IP-adressutrymmet. När en instans initierar ett utgående flöde till ett mål i det offentliga IP-adressutrymmet mappar Azure dynamiskt den privata IP-adressen till en offentlig IP-adress. När den här mappningen har skapats kan returtrafik för det här utgående flödet också nå den privata IP-adress där flödet kom från.
Azure använder SNAT (Source Network Address Translation) för att utföra den här funktionen. När flera privata IP-adresser maskeras bakom en enda offentlig IP-adress använder Azure portadressöversättning (PAT) för att maskera privata IP-adresser. Tillfälliga portar används för PAT och förallokeras baserat på poolstorlek.
Det finns flera utgående scenarier. Du kan kombinera dessa scenarier efter behov. Granska dem noggrant för att förstå funktionerna, begränsningarna och mönstren när de gäller för din distributionsmodell och ditt programscenario. Läs vägledningen för att hantera dessa scenarier.
Översikt över scenario
Azure tillhandahåller tre olika metoder för att uppnå klassiska utgående anslutningar. Alla klassiska distributioner har inte alla tre scenarier tillgängliga för dem:
Scenario | Metod | IP-protokoll | Description | Webbarbetsroll | IaaS |
---|---|---|---|---|---|
1. Virtuell dator med en offentlig IP-adress på instansnivå | SNAT, portmaskering används inte | TCP, UDP, ICMP, ESP | Azure använder den offentliga IP-tilldelade virtuella datorn. Instansen har alla tillfälliga portar tillgängliga. | Inga | Ja |
2. Offentlig belastningsutjämningsslutpunkt | SNAT med portmaskering (PAT) till den offentliga slutpunkten | TCP, UDP | Azure delar den offentliga IP-adressens offentliga slutpunkt med flera privata slutpunkter. Azure använder tillfälliga portar för den offentliga slutpunkten för PAT. | Ja | Yes |
3. Fristående virtuell dator | SNAT med portmaskering (PAT) | TCP, UDP | Azure anger automatiskt en offentlig IP-adress för SNAT, delar den här offentliga IP-adressen med hela distributionen och använder tillfälliga portar för den offentliga slutpunkts-IP-adressen för PAT. Det här är ett reservscenario för föregående scenarier. Vi rekommenderar det inte om du behöver synlighet och kontroll. | Ja | Yes |
Det här är en delmängd av utgående anslutningsfunktioner som är tillgängliga för Resource Manager distributioner i Azure.
Olika distributioner i Klassisk har olika funktioner:
Klassisk distribution | Tillgängliga funktioner |
---|---|
Virtuell dator | scenario 1, 2 eller 3 |
Webbarbetsroll | endast scenario 2, 3 |
Riskreduceringsstrategier har också samma skillnader.
Algoritmen som används för att förallokera tillfälliga portar för PAT för klassiska distributioner är samma som för Azure Resource Manager resursdistributioner.
Scenario 1: Virtuell dator med en offentlig IP-adress på instansnivå
I det här scenariot har den virtuella datorn tilldelats en offentlig IP-adress på instansnivå (ILPIP). När det gäller utgående anslutningar spelar det ingen roll om den virtuella datorn har en belastningsutjämnad slutpunkt eller inte. Det här scenariot har företräde framför de andra. När en ILPIP används använder den virtuella datorn ILPIP för alla utgående flöden.
En offentlig IP-adress som tilldelats en virtuell dator är en 1:1-relation (i stället för 1:många) och implementeras som en tillståndslös 1:1 NAT. Portmaskering (PAT) används inte och den virtuella datorn har alla tillfälliga portar tillgängliga för användning.
Om ditt program initierar många utgående flöden och du upplever SNAT-portöverbelastning kan du överväga att tilldela en ILPIP för att minska SNAT-begränsningar. Granska Hantera SNAT-överbelastning i sin helhet.
Scenario 2: Offentlig belastningsutjämningsslutpunkt
I det här scenariot associeras den virtuella datorn eller webbarbetsrollen med en offentlig IP-adress via den belastningsutjämningsslutpunkten. Den virtuella datorn har ingen offentlig IP-adress tilldelad.
När den belastningsutjämnade virtuella datorn skapar ett utgående flöde översätter Azure den privata käll-IP-adressen för det utgående flödet till den offentliga IP-adressen för den offentliga belastningsutjämnade slutpunkten. Azure använder SNAT för att utföra den här funktionen. Azure använder också PAT för att maskera flera privata IP-adresser bakom en offentlig IP-adress.
Tillfälliga portar i lastbalanserarens offentliga IP-adressklientdel används för att skilja enskilda flöden från den virtuella datorn. SNAT använder dynamiskt förallokerade tillfälliga portar när utgående flöden skapas. I det här sammanhanget kallas de tillfälliga portar som används för SNAT SNAT-portar.
SNAT-portar förallokeras enligt beskrivningen i avsnittet Understanding SNAT and PAT (Förstå SNAT och PAT ). De är en begränsad resurs som kan vara uttömd. Det är viktigt att förstå hur de används. Information om hur du utformar för den här förbrukningen och minimerar vid behov finns i Hantera SNAT-överbelastning.
När det finns flera offentliga belastningsutjämnade slutpunkter är någon av dessa offentliga IP-adresser en kandidat för utgående flöden och en väljs slumpmässigt.
Scenario 3: Ingen associerad offentlig IP-adress
I det här scenariot är den virtuella datorn eller Web Worker ROle inte en del av en offentlig belastningsutjämningsslutpunkt. Och när det gäller den virtuella datorn har den inte någon tilldelad ILPIP-adress. När den virtuella datorn skapar ett utgående flöde översätter Azure ip-adressen för den privata källan för det utgående flödet till en IP-adress för offentlig källa. Den offentliga IP-adress som används för det här utgående flödet kan inte konfigureras och räknas inte mot prenumerationens offentliga IP-resursgräns. Azure allokerar den här adressen automatiskt.
Azure använder SNAT med portmaskering (PAT) för att utföra den här funktionen. Det här scenariot liknar scenario 2, förutom att det inte finns någon kontroll över den IP-adress som används. Det här är ett reservscenario för när scenarier 1 och 2 inte finns. Vi rekommenderar inte det här scenariot om du vill ha kontroll över den utgående adressen. Om utgående anslutningar är en viktig del av ditt program bör du välja ett annat scenario.
SNAT-portar förallokeras enligt beskrivningen i avsnittet Understanding SNAT and PAT (Förstå SNAT och PAT ). Antalet virtuella datorer eller webbarbetsroller som delar den offentliga IP-adressen avgör antalet förallokerade tillfälliga portar. Det är viktigt att förstå hur de används. Information om hur du utformar för den här förbrukningen och minimerar vid behov finns i Hantera SNAT-överbelastning.
Förstå SNAT och PAT
Portmaskerad SNAT (PAT)
När en distribution upprättar en utgående anslutning skrivs varje utgående anslutningskälla om. Källan skrivs om från det privata IP-adressutrymmet till den offentliga IP-adress som är associerad med distributionen (baserat på scenarier som beskrivs ovan). I det offentliga IP-adressutrymmet måste flödets 5-tupppel (käll-IP-adress, källport, IP-transportprotokoll, mål-IP-adress, målport) vara unik.
Tillfälliga portar (SNAT-portar) används för att uppnå detta när ip-adressen för den privata källan har skrivits om, eftersom flera flöden kommer från en enda offentlig IP-adress.
En SNAT-port används per flöde till en enda mål-IP-adress, port och protokoll. För flera flöden till samma mål-IP-adress, port och protokoll förbrukar varje flöde en enda SNAT-port. Detta säkerställer att flödena är unika när de kommer från samma offentliga IP-adress och går till samma mål-IP-adress, port och protokoll.
Flera flöden, var och en till en annan mål-IP-adress, port och protokoll, delar en enda SNAT-port. Målets IP-adress, port och protokoll gör flöden unika utan att ytterligare källportar behöver särskilja flöden i det offentliga IP-adressutrymmet.
När SNAT-portresurser är slut misslyckas utgående flöden tills befintliga flöden släpper SNAT-portar. Load Balancer återtar SNAT-portar när flödet stängs och använder en tidsgräns på 4 minuter för inaktivitet för att frigöra SNAT-portar från inaktiva flöden.
Mönster för att minimera villkor som ofta leder till SNAT-portöverbelastning finns i avsnittet Hantera SNAT .
Tillfällig portförlokalisering för portmaskerad SNAT (PAT)
Azure använder en algoritm för att fastställa antalet förallokerade SNAT-portar som är tillgängliga baserat på storleken på serverdelspoolen när du använder portmaskerad SNAT (PAT). SNAT-portar är tillfälliga portar som är tillgängliga för en viss offentlig IP-källadress.
Azure förallokerar SNAT-portar när en instans distribueras baserat på hur många vm- eller web worker-rollinstanser som delar en viss offentlig IP-adress. När utgående flöden skapas förbrukar PAT dynamiskt (upp till den förallokerade gränsen) och släpper dessa portar när flödet stängs eller tidsgränser för inaktivitet inträffar.
Följande tabell visar SNAT-portförallokeringar för nivåer av serverdelspoolstorlekar:
Instanser | Förallokerade SNAT-portar per instans |
---|---|
1-50 | 1,024 |
51-100 | 512 |
101-200 | 256 |
201-400 | 128 |
Kom ihåg att antalet tillgängliga SNAT-portar inte översätts direkt till antalet flöden. En enda SNAT-port kan återanvändas för flera unika mål. Portar används endast om det är nödvändigt att göra flöden unika. Design- och åtgärdsvägledning finns i avsnittet om hur du hanterar den här uttömbara resursen och avsnittet som beskriver PAT.
Om du ändrar storleken på distributionen kan det påverka vissa av dina etablerade flöden. Om storleken på serverdelspoolen ökar och övergår till nästa nivå frigörs hälften av dina förallokerade SNAT-portar under övergången till nästa större serverdelspoolnivå. Flöden som är associerade med en återvunnen SNAT-port överskrider tidsgränsen och måste återupprättas. Om ett nytt flöde försöker utföras kommer flödet att lyckas omedelbart så länge förallokerade portar är tillgängliga.
Om distributionsstorleken minskar och övergår till en lägre nivå ökar antalet tillgängliga SNAT-portar. I det här fallet påverkas inte befintliga allokerade SNAT-portar och deras respektive flöden.
Om en molntjänst distribueras om eller ändras kan infrastrukturen tillfälligt rapportera att serverdelspoolen är upp till dubbelt så stor som den faktiska, och Azure förallokerar i sin tur färre SNAT-portar per instans än förväntat. Detta kan tillfälligt öka sannolikheten för SNAT-portöverbelastning. Så småningom övergår poolstorleken till den faktiska storleken och Azure ökar automatiskt förallokerade SNAT-portar till det förväntade antalet enligt tabellen ovan. Det här beteendet är avsiktligt och kan inte konfigureras.
SNAT-portallokeringar är IP-transportprotokollspecifika (TCP och UDP underhålls separat) och släpps under följande villkor:
TCP SNAT-portversion
- Om båda servrarna/klienten skickar FIN/ACK släpps SNAT-porten efter 240 sekunder.
- Om en RST visas släpps SNAT-porten efter 15 sekunder.
- tidsgränsen för inaktivitet har uppnåtts
UDP SNAT-portversion
- tidsgränsen för inaktivitet har uppnåtts
Problemlösning
Det här avsnittet är avsett att minska SNAT-överbelastning och andra scenarier som kan inträffa med utgående anslutningar i Azure.
Hantera SNAT-portöverbelastning (PAT)
Tillfälliga portar som används för PAT är en outtömlig resurs, enligt beskrivningen i ingen offentlig IP-associerad och offentlig belastningsutjämnad slutpunkt.
Om du vet att du initierar många utgående TCP- eller UDP-anslutningar till samma mål-IP-adress och port, och du observerar misslyckade utgående anslutningar eller får råd av support om att du uttömmer SNAT-portar (förallokerade tillfälliga portar som används av PAT), har du flera allmänna alternativ för åtgärder. Granska de här alternativen och bestäm vad som är tillgängligt och bäst för ditt scenario. Det är möjligt att en eller flera kan hjälpa dig att hantera det här scenariot.
Om du har problem med att förstå beteendet för utgående anslutningar kan du använda IP-stackstatistik (netstat). Eller så kan det vara bra att observera anslutningsbeteenden med hjälp av paketinsamlingar.
Ändra programmet så att det återanvänder anslutningar
Du kan minska efterfrågan på tillfälliga portar som används för SNAT genom att återanvända anslutningar i ditt program. Detta gäller särskilt för protokoll som HTTP/1.1, där återanvändning av anslutningar är standard. Och andra protokoll som använder HTTP som transport (till exempel REST) kan i sin tur gynnas.
Återanvändning är alltid bättre än enskilda, atomära TCP-anslutningar för varje begäran. Återanvändning resulterar i mer högpresterande och mycket effektiva TCP-transaktioner.
Ändra programmet så att det använder anslutningspooler
Du kan använda ett schema för anslutningspooler i ditt program, där begäranden distribueras internt över en fast uppsättning anslutningar (varje återanvändning där det är möjligt). Det här schemat begränsar antalet tillfälliga portar som används och skapar en mer förutsägbar miljö. Det här schemat kan också öka dataflödet för begäranden genom att tillåta flera samtidiga åtgärder när en enda anslutning blockerar svaret på en åtgärd.
Anslutningspooler kanske redan finns inom det ramverk som du använder för att utveckla ditt program eller konfigurationsinställningarna för ditt program. Du kan kombinera anslutningspooler med återanvändning av anslutningar. Dina flera begäranden använder sedan ett fast, förutsägbart antal portar till samma mål-IP-adress och port. Begäranden drar också nytta av effektiv användning av TCP-transaktioner som minskar svarstiden och resursutnyttjandet. UDP-transaktioner kan också dra nytta av detta, eftersom hantering av antalet UDP-flöden i sin tur kan undvika avgasvillkor och hantera SNAT-portanvändningen.
Ändra programmet så att det använder mindre aggressiv omförsökslogik
När förallokerade tillfälliga portar som används för PAT är uttömda eller programfel uppstår, orsakar aggressiva eller råstyrkeåterförsök utan förfall och backoff-logik att överbelastning uppstår eller kvarstår. Du kan minska efterfrågan på tillfälliga portar med hjälp av en mindre aggressiv logik för återförsök.
Tillfälliga portar har en tidsgräns på 4 minuter för inaktivitet (inte justerbar). Om återförsöken är för aggressiva har utmattningen ingen möjlighet att rensa upp på egen hand. Med tanke på hur – och hur ofta – ditt program gör återförsök är därför en viktig del av designen.
Tilldela en offentlig IP-adress på instansnivå till varje virtuell dator
När du tilldelar en ILPIP ändras scenariot till offentlig IP-adress på instansnivå till en virtuell dator. Alla tillfälliga portar för den offentliga IP-adressen som används för varje virtuell dator är tillgängliga för den virtuella datorn. (I motsats till scenarier där tillfälliga portar för en offentlig IP-adress delas med alla virtuella datorer som är associerade med respektive distribution.) Det finns kompromisser att tänka på, till exempel den potentiella effekten av att tillåtalistning av ett stort antal enskilda IP-adresser.
Anteckning
Det här alternativet är inte tillgängligt för webbarbetsroller.
Använd keepalives för att återställa tidsgränsen för utgående inaktivitet
Utgående anslutningar har en tidsgräns på 4 minuter för inaktivitet. Den här tidsgränsen kan inte justeras. Du kan dock använda transport (till exempel TCP keepalives) eller keepalives på programnivå för att uppdatera ett inaktivt flöde och återställa tidsgränsen för inaktivitet om det behövs. Kontakta leverantören av paketerad programvara om detta stöds eller hur du aktiverar det. Vanligtvis behöver bara en sida generera keepalives för att återställa tidsgränsen för inaktivitet.
Identifiera den offentliga IP-adress som en virtuell dator använder
Det finns många sätt att fastställa ip-adressen för den offentliga källan för en utgående anslutning. OpenDNS tillhandahåller en tjänst som kan visa den virtuella datorns offentliga IP-adress.
Med hjälp av kommandot nslookup kan du skicka en DNS-fråga för namnet myip.opendns.com till OpenDNS-matcharen. Tjänsten returnerar käll-IP-adressen som användes för att skicka frågan. När du kör följande fråga från den virtuella datorn är svaret den offentliga IP-adress som används för den virtuella datorn:
nslookup myip.opendns.com resolver1.opendns.com
Nästa steg
- Läs mer om Load Balancer som används i Resource Manager distributioner.
- Lär dig mer om scenarier för utgående anslutningar som är tillgängliga i Resource Manager distributioner.