Delen via


Verbindingsproblemen met tunnel

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

Diagram van de door Azure beheerde AKS-underlay, door de klant beheerd virtueel Azure-netwerk en subnet, en de tunnel van de API naar de tunnelpod.

Notitie

Voorheen was tunnel-fronthet AKS-tunnelonderdeel . Het is nu gemigreerd naar de Konnectivity-service, een upstream Kubernetes-onderdeel. Zie de releaseopmerkingen en wijzigingenlogboek van AKS voor meer informatie over deze migratie.

Voorwaarden

Symptomen

Er wordt een foutbericht weergegeven dat lijkt op de volgende voorbeelden van poort 10250:

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

Fout van server: fout bij het kiezen van back-end: 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 wordt geblokkeerd, werken de kubectl-logboeken en andere functies alleen voor pods die worden uitgevoerd op de knooppunten waarin het tunnelonderdeel is gepland. Zie Kubernetes-poorten en -protocollen voor meer informatie: Werkknooppunten.

Omdat de tunnelonderdelen of de connectiviteit tussen de server en de client niet tot stand kunnen worden gebracht, werkt de functionaliteit zoals hieronder niet zoals verwacht:

Oorzaak 1: Een netwerkbeveiligingsgroep (NSG) blokkeert poort 10250

Notitie

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 naar en van Azure-resources in een virtueel Azure-netwerk te filteren. Een netwerkbeveiligingsgroep bevat beveiligingsregels waarmee binnenkomend en uitgaand netwerkverkeer tussen verschillende typen Azure-resources wordt toegestaan of geweigerd. Voor elke regel kunt u de bron en het doel, de poort en het protocol opgeven. Zie Hoe netwerkbeveiligingsgroepen netwerkverkeer filteren voor meer informatie.

Als de NSG poort 10250 blokkeert op het niveau van het virtuele netwerk, werken tunnelfunctionaliteiten (zoals logboeken en code-uitvoering) alleen voor de pods die zijn gepland op de knooppunten waar tunnelpods worden 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 ervoor zorgen dat u een beveiligingsregel toevoegt die verkeer toestaat voor poort 10250 op het niveau van het virtuele netwerk. In de volgende afbeelding van Azure Portal ziet u een voorbeeld van een beveiligingsregel:

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

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

Notitie

  • 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 lager prioriteitsnummer 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 tunnelonderdeelpods opnieuw maken. Als u deze pods verwijdert, worden ze opnieuw gemaakt.

Oorzaak 2: Het hulpprogramma Uncomplicated Firewall (UFW) blokkeert poort 10250

Notitie

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

Uncomplicated Firewall (UFW) is een opdrachtregelprogramma voor het beheren van een netfilter-firewall . AKS-knooppunten maken gebruik van 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, inclusief poort 10250, geblokkeerd. 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 tunnelfunctionaliteiten (zoals logboeken en code-uitvoering) niet voor de pods die zijn gepland op de knooppunten waarvoor UFW is ingeschakeld. Als u het probleem wilt oplossen, past u een van de volgende oplossingen toe op UFW.

Belangrijk

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

Notitie

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 deze opnieuw gemaakt.

Oplossing 2a: Niet-gecompliceerde 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: Een niet-gecompliceerde firewall configureren om toegang tot poort 10250 toe te laten

Als u wilt afdwingen dat UFW toegang tot poort 10250 toestaat, 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: Het hulpprogramma iptables blokkeert poort 10250

Notitie

Deze oorzaak is van toepassing op alle tunnelonderdelen die 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 configureren om communicatie op poort 10250 te blokkeren.

U kunt de regels voor uw knooppunten bekijken om te controleren of poort 10250 is geblokkeerd of dat de bijbehorende pakketten worden 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 de bestemming is tcp dpt:10250? Als dit het geval is, iptables blokkeert u de toegang tot doelpoort 10250.

Oplossing 3: Verwijder de iptables-regel die de toegang blokkeert op poort 10250

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

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

Om uw exacte of potentiële scenario te verhelpen, raden we u aan de iptables handmatig te controleren door de opdracht uit te iptables --help voeren.

Belangrijk

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

Oorzaak 4: Uitgaande poort 1194 of 9000 is niet geopend

Notitie

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

Zijn er beperkingen voor uitgaand verkeer, zoals van een AKS-firewall? Als dat zo is, 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 9000 openen

Hoewel tunnel-front deze is verplaatst naar de Konnectivity-service, worden sommige AKS-clusters nog steeds gebruikt tunnel-front, die afhankelijk zijn van poort 9000. Zorg ervoor dat het virtuele apparaat of een netwerkapparaat of software toegang biedt tot poort 9000. Zie De vereiste netwerkregels van Azure Global voor meer informatie over de vereiste regels en afhankelijkheden.

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

Notitie

Deze oorzaak is van toepassing op alle tunnelonderdelen die u in uw AKS-cluster hebt. Dit geldt echter niet voor privé-AKS-clusters. SNAT-poortuitputting (Source Network Address Translation) kan alleen voor openbare communicatie optreden. 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 serverzijde van de API. Daarom wordt er geen tunnelconnectiviteit tot stand gebracht.

Als de SNAT-poortbronnen 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 voor inactiviteit van vier minuten 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 Hoe kan ik mijn statistieken voor uitgaande verbindingen bekijken voor meer informatie over het weergeven van SNAT-poorten.

Metrische gegevens van AKS Load Balancer

Als u metrische gegevens van de 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 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 kubernetes-load balancer.

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

  7. Voor het metrische type selecteert u het aantal SNAT-verbindingen.

  8. Selecteer Splitsen toepassen.

  9. Stel Splitsen 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 Azure Portal.

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

  3. Selecteer in het menuvenster van het cluster Diagnose en los problemen op.

  4. Selecteer Verbindingsproblemen.

  5. Selecteer Details weergeven onder SNAT-verbinding en poorttoewijzing.

  6. Gebruik zo 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 hoe u verbindingspooling gebruikt. De meeste bibliotheken ondersteunen groepsgewijze verbindingen. Daarom hoeft u niet per aanvraag een nieuwe uitgaande verbinding te maken.

Oplossing 5b: de toegewezen uitgaande poorten aanpassen

Als alles in de toepassing in orde is, 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 biedt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert niet de nauwkeurigheid van contactgegevens van derden.

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 Azure-feedbackcommunity.