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.
Opmerking
Standaard, en afhankelijk van de regio, was tunnel-front
het 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-front
aks-link
vervangt. 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:
Toegangscontroller-webhooks
Mogelijkheid om logboeken op te halen (met behulp van de opdracht kubectl-logboeken )
Een opdracht uitvoeren in een container of een container binnenhalen (met behulp van de opdracht kubectl exec )
Een of meer lokale poorten van een pod doorsturen (met behulp van de opdracht kubectl port-forward )
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:
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 tcp
en 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:
Zoek en selecteer Kubernetes-services in de Azure Portal.
Selecteer in de lijst met Kubernetes-services de naam van uw cluster.
Zoek in het menuvenster van het cluster de kop Instellingen en selecteer vervolgens Eigenschappen.
Selecteer de naam die wordt vermeld onder Infrastructuurresourcegroep.
Selecteer de load balancer van kubernetes .
Zoek in het menuvenster van de load balancer de kop Bewaking en selecteer vervolgens Metrische gegevens.
Selecteer SNAT Connection Count voor het metrische type.
Selecteer Splitting toepassen.
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:
Zoek en selecteer Kubernetes-services in de Azure Portal.
Selecteer in de lijst met Kubernetes-services de naam van uw cluster.
Selecteer in het menuvenster van het cluster de optie Problemen vaststellen en oplossen.
Selecteer Verbindingsproblemen.
Selecteer onder SNAT-verbinding en poorttoewijzingde optie Details weergeven.
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.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor