Share via


Verbindingsproblemen met tunnel

Microsoft Azure Kubernetes Service (AKS) maakt gebruik van een specifiek onderdeel voor beveiligde communicatie via tunnel tussen de knooppunten en het besturingsvlak. De tunnel bestaat uit een server aan de besturingsvlakzijde en een client aan de kant van de clusterknooppunten. In dit artikel wordt beschreven hoe u problemen met tunnelconnectiviteit in AKS kunt oplossen.

Diagram van de door Azure beheerde AKS-onderlay, het door de klant beheerde virtuele Azure-netwerk en -subnet en de tunnel van de API naar de tunnelpod.

Opmerking

Standaard, en afhankelijk van de regio, was tunnel-fronthet tunnelonderdeel . Bij het bijwerken naar sla-functie (Service Level Agreement) voor uptime is tunnel-front vervangen door het aks-link tunnelonderdeel dat OpenVPN gebruikte. AKS migreert naar Konnectivity. Dit is een upstream-onderdeel van Kubernetes dat zowel als tunnel-frontaks-linkvervangt. Zie de opmerkingen bij de release en het wijzigingenlogboek van AKS voor meer informatie over migratie naar Konnectivity als het tunnelonderdeel.

Vereisten

Symptomen

U ontvangt een foutbericht dat lijkt op de volgende voorbeelden over poort 10250:

Fout van server: "https://< aks-node-name>:10250/containerLogs/<namespace>/<pod-name>/<container-name>": dial tcp <aks-node-ip>:10250: i/o time-out

Fout van server: fout bij het kiezen van back-end: dial tcp <aks-node-ip>:10250: i/o time-out

De Kubernetes API-server gebruikt poort 10250 om verbinding te maken met de kubelet van een knooppunt om de logboeken op te halen. Als poort 10250 is geblokkeerd, werken de kubectl-logboeken en andere functies alleen voor pods die worden uitgevoerd op de knooppunten waarop het tunnelonderdeel is gepland. Zie Kubernetes-poorten en -protocollen: Werkknooppunten voor meer informatie.

Omdat de tunnelonderdelen of de verbinding tussen de server en de client niet tot stand kan worden gebracht, werkt functionaliteit zoals de volgende niet zoals verwacht:

Oorzaak 1: poort 10250 wordt geblokkeerd door een netwerkbeveiligingsgroep (NSG)

Opmerking

Deze oorzaak is van toepassing op alle tunnelonderdelen die u mogelijk in uw AKS-cluster hebt.

U kunt een Azure-netwerkbeveiligingsgroep (NSG) gebruiken om netwerkverkeer van en naar Azure-resources in een virtueel Azure-netwerk te filteren. Een netwerkbeveiligingsgroep bevat beveiligingsregels die binnenkomend en uitgaand netwerkverkeer tussen verschillende typen Azure-resources toestaan of weigeren. Voor elke regel kunt u bron en bestemming, poort en protocol opgeven. Zie Hoe netwerkbeveiligingsgroepen netwerkverkeer filteren voor meer informatie.

Als de NSG poort 10250 blokkeert op het niveau van het virtuele netwerk, werken tunnelfuncties (zoals logboeken en code-uitvoering) alleen voor de pods die zijn gepland op de knooppunten waarop tunnelpods zijn gepland. De andere pods werken niet omdat hun knooppunten de tunnel niet kunnen bereiken en de tunnel is gepland op andere knooppunten. Als u deze status wilt controleren, kunt u de connectiviteit testen met behulp van netcat (nc) of telnet-opdrachten. U kunt de opdracht az vmss run-command invoke uitvoeren om de connectiviteitstest uit te voeren en te controleren of deze slaagt, een time-out optreedt of een ander probleem veroorzaakt:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "nc -v -w 2 <ip-of-node-that-schedules-the-tunnel-component> 10250" \
    --output tsv \
    --query 'value[0].message'

Oplossing 1: Een NSG-regel toevoegen om toegang tot poort 10250 toe te staan

Als u een NSG gebruikt en u specifieke beperkingen hebt, moet u een beveiligingsregel toevoegen die verkeer toestaat voor poort 10250 op het niveau van het virtuele netwerk. In de volgende Azure Portal afbeelding ziet u een voorbeeld van een beveiligingsregel:

Schermopname van het deelvenster Binnenkomende beveiligingsregel toevoegen in de Azure Portal. Het vak Doelpoortbereiken is ingesteld op 10250 voor de nieuwe beveiligingsregel.

Als u beperkend wilt zijn, kunt u alleen toegang tot poort 10250 op subnetniveau toestaan.

Opmerking

  • Het veld Prioriteit moet dienovereenkomstig worden aangepast. Als u bijvoorbeeld een regel hebt die meerdere poorten weigert (inclusief poort 10250), moet de regel die in de afbeelding wordt weergegeven, een lagere prioriteit hebben (lagere getallen hebben een hogere prioriteit). Zie Beveiligingsregels voor meer informatie over Prioriteit.

  • Als u geen gedragswijziging ziet nadat u deze oplossing hebt toegepast, kunt u de pods van het tunnelonderdeel opnieuw maken. Als u deze pods verwijdert, worden ze opnieuw gemaakt.

Oorzaak 2: poort 10250 wordt geblokkeerd door het hulpprogramma Ongecompliceerde firewall (UFW)

Opmerking

Deze oorzaak is van toepassing op elk tunnelonderdeel dat u in uw AKS-cluster hebt.

Uncomplicated Firewall (UFW) is een opdrachtregelprogramma voor het beheren van een netfilterfirewall . AKS-knooppunten gebruiken Ubuntu. Daarom wordt UFW standaard geïnstalleerd op AKS-knooppunten, maar UFW is uitgeschakeld.

Als UFW is ingeschakeld, wordt standaard de toegang tot alle poorten geblokkeerd, inclusief poort 10250. In dit geval is het onwaarschijnlijk dat u Secure Shell (SSH) kunt gebruiken om verbinding te maken met AKS-clusterknooppunten voor probleemoplossing. Dit komt doordat UFW mogelijk ook poort 22 blokkeert. Als u problemen wilt oplossen, kunt u de opdracht az vmss run-command invoke uitvoeren om een ufw-opdracht aan te roepen waarmee wordt gecontroleerd of UFW is ingeschakeld:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw status" \
    --output tsv \
    --query 'value[0].message'

Wat gebeurt er als de resultaten aangeven dat UFW is ingeschakeld en poort 10250 niet specifiek is toegestaan? In dit geval werken tunnelfuncties (zoals logboeken en code-uitvoering) niet voor de pods die zijn gepland op de knooppunten waarvoor UFW is ingeschakeld. U kunt het probleem oplossen door een van de volgende oplossingen toe te passen op UFW.

Belangrijk

Voordat u dit hulpprogramma gebruikt om wijzigingen aan te brengen, raadpleegt u het AKS-ondersteuningsbeleid (met name knooppuntonderhoud en toegang) om te voorkomen dat uw cluster in een niet-ondersteund scenario terechtkomt.

Opmerking

Als u geen gedragswijziging ziet nadat u een oplossing hebt toegepast, kunt u de pods van het tunnelonderdeel opnieuw maken. Als u deze pods verwijdert, worden ze opnieuw gemaakt.

Oplossing 2a: Ongecompliceerde firewall uitschakelen

Voer de volgende az vmss run-command invoke opdracht uit om UFW uit te schakelen:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw disable" \
    --output tsv \
    --query 'value[0].message'

Oplossing 2b: Configureer een ongecompliceerde firewall om toegang tot poort 10250 toe te staat

Als u wilt afdwingen dat UFW toegang toestaat tot poort 10250, voert u de volgende az vmss run-command invoke opdracht uit:

az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
    --name <virtual-machine-scale-set-name> \
    --command-id RunShellScript \
    --instance-id <instance-id> \
    --scripts "ufw allow 10250" \
    --output tsv \
    --query 'value[0].message'

Oorzaak 3: Poort 10250 wordt geblokkeerd door het hulpprogramma iptables

Opmerking

Deze oorzaak is van toepassing op elk tunnelonderdeel dat u in uw AKS-cluster hebt.

Met het hulpprogramma iptables kan een systeembeheerder de IP-pakketfilterregels van een Linux-firewall configureren. U kunt de iptables regels zo configureren dat communicatie op poort 10250 wordt geblokkeerd.

U kunt de regels voor uw knooppunten bekijken om te controleren of poort 10250 is geblokkeerd of de bijbehorende pakketten zijn verwijderd. Voer hiervoor de volgende iptables opdracht uit:

iptables --list --line-numbers

In de uitvoer worden de gegevens gegroepeerd in verschillende ketens, waaronder de INPUT keten. Elke keten bevat een tabel met regels onder de volgende kolomkoppen:

  • num (regelnummer)
  • target
  • prot (protocol)
  • opt
  • source
  • destination

Bevat de INPUT keten een regel waarin het doel is DROP, het protocol is tcpen het doel is tcp dpt:10250? Als dit het geval is, iptables wordt de toegang tot doelpoort 10250 geblokkeerd.

Oplossing 3: De iptables-regel verwijderen die toegang blokkeert op poort 10250

Voer een van de volgende opdrachten uit om de iptables regel te verwijderen die toegang tot poort 10250 voorkomt:

iptables --delete INPUT --jump DROP --protocol tcp --source <ip-number> --destination-port 10250
iptables --delete INPUT <input-rule-number>

Als u uw exacte of potentiële scenario wilt aanpakken, raden we u aan de iptables-handleiding te controleren door de opdracht uit te iptables --help voeren.

Belangrijk

Voordat u dit hulpprogramma gebruikt om wijzigingen aan te brengen, raadpleegt u het AKS-ondersteuningsbeleid (met name knooppuntonderhoud en toegang) om te voorkomen dat uw cluster in een niet-ondersteund scenario terechtkomt.

Oorzaak 4: Uitgaand poort 1194 of 9000 is niet geopend

Opmerking

Deze oorzaak is alleen van toepassing op de tunnel-front pods en aks-link .

Zijn er beperkingen voor uitgaand verkeer, zoals van een AKS-firewall? Als die er zijn, is poort 9000 vereist om de juiste functionaliteit van de tunnel-front pod in te schakelen. Op dezelfde manier is poort 1194 vereist voor de aks-link pod.

Konnectivity is afhankelijk van poort 443. Deze poort is standaard geopend. Daarom hoeft u zich geen zorgen te maken over verbindingsproblemen op die poort.

Oplossing 4: Poort 1194 of 9000 openen

Zorg ervoor dat het virtuele apparaat toegang toestaat tot poort 1194 of poort 9000. Zie Vereiste netwerkregels voor Azure Global voor meer informatie over de vereiste regels en afhankelijkheden.

Oorzaak 5: SNAT-poortuitputting (Source Network Address Translation)

Opmerking

Deze oorzaak is van toepassing op elk tunnelonderdeel dat u in uw AKS-cluster hebt. Dit is echter niet van toepassing op privé-AKS-clusters. SNAT-poortuitputting (Source Network Address Translation) kan alleen optreden voor openbare communicatie. Voor privé-AKS-clusters bevindt de API-server zich in het virtuele AKS-netwerk of -subnet.

Als SNAT-poortuitputting optreedt (mislukte SNAT-poorten), kunnen de knooppunten geen verbinding maken met de API-server. De tunnelcontainer bevindt zich aan de API-serverzijde. Daarom wordt er geen tunnelverbinding tot stand gebracht.

Als de SNAT-poortresources zijn uitgeput, mislukken de uitgaande stromen totdat de bestaande stromen enkele SNAT-poorten vrijgeven. Azure Load Balancer maakt de SNAT-poorten vrij wanneer de stroom wordt gesloten. Er wordt een time-out van vier minuten voor inactiviteit gebruikt om de SNAT-poorten vrij te maken van de niet-actieve stromen.

U kunt de SNAT-poorten bekijken vanuit de metrische gegevens van de AKS-load balancer of de servicediagnose, zoals beschreven in de volgende secties. Zie voor meer informatie over het weergeven van SNAT-poorten Hoe kan ik mijn statistieken voor uitgaande verbindingen controleren? .

Metrische gegevens van AKS load balancer

Als u metrische gegevens van AKS load balancer wilt gebruiken om de SNAT-poorten weer te geven, voert u de volgende stappen uit:

  1. Zoek en selecteer Kubernetes-services in de Azure Portal.

  2. Selecteer in de lijst met Kubernetes-services de naam van uw cluster.

  3. Zoek in het menuvenster van het cluster de kop Instellingen en selecteer vervolgens Eigenschappen.

  4. Selecteer de naam die wordt vermeld onder Infrastructuurresourcegroep.

  5. Selecteer de load balancer van kubernetes .

  6. Zoek in het menuvenster van de load balancer de kop Bewaking en selecteer vervolgens Metrische gegevens.

  7. Selecteer SNAT Connection Count voor het metrische type.

  8. Selecteer Splitting toepassen.

  9. Stel Split by in op Verbindingsstatus.

Servicediagnose

Als u servicediagnose wilt gebruiken om de SNAT-poorten weer te geven, voert u de volgende stappen uit:

  1. Zoek en selecteer Kubernetes-services in de Azure Portal.

  2. Selecteer in de lijst met Kubernetes-services de naam van uw cluster.

  3. Selecteer in het menuvenster van het cluster de optie Problemen vaststellen en oplossen.

  4. Selecteer Verbindingsproblemen.

  5. Selecteer onder SNAT-verbinding en poorttoewijzingde optie Details weergeven.

  6. Gebruik indien nodig de knop Tijdsbereik om het tijdsbestek aan te passen.

Oplossing 5a: Zorg ervoor dat de toepassing gebruikmaakt van groepsgewijze verbindingen

Dit gedrag kan optreden omdat een toepassing bestaande verbindingen niet opnieuw gebruikt. U wordt aangeraden niet één uitgaande verbinding per aanvraag te maken. Een dergelijke configuratie kan leiden tot uitputting van de verbinding. Controleer of de toepassingscode de aanbevolen procedures volgt en gebruikmaakt van groepsgewijze verbindingen. De meeste bibliotheken ondersteunen groepsgewijze verbindingen. Daarom hoeft u geen nieuwe uitgaande verbinding per aanvraag te maken.

Oplossing 5b: De toegewezen uitgaande poorten aanpassen

Als alles in orde is binnen de toepassing, moet u de toegewezen uitgaande poorten aanpassen. Zie De toegewezen uitgaande poorten configureren voor meer informatie over de toewijzing van uitgaande poorten.

Oplossing 5c: Een NAT-gateway (Managed Network Address Translation) gebruiken wanneer u een cluster maakt

U kunt een nieuw cluster instellen voor het gebruik van een NAT-gateway (Managed Network Address Translation) voor uitgaande verbindingen. Zie Een AKS-cluster maken met een beheerde NAT-gateway voor meer informatie.

Disclaimerinformatie van derden

Microsoft verstrekt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert de juistheid van contactgegevens van derden niet.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.