Eenvoudige problemen met uitgaande verbindingen vanuit een AKS-cluster oplossen
In dit artikel wordt beschreven hoe u eenvoudige probleemoplossing kunt uitvoeren voor uitgaande verbindingen vanuit een AKS-cluster (Microsoft Azure Kubernetes Service) en foutieve onderdelen identificeert.
Voorwaarden
Het Kubernetes kubectl-hulpprogramma of een vergelijkbaar hulpprogramma om verbinding te maken met het cluster. Als u kubectl wilt installeren met behulp van Azure CLI, voert u de opdracht az aks install-cli uit.
Het apt-get-opdrachtregelprogramma voor het verwerken van pakketten.
Het hulpprogramma Client-URL (cURL) of een vergelijkbaar opdrachtregelprogramma.
Het
nslookup
opdrachtregelprogramma (dnsutils) voor het controleren van DE DNS-resolutie.
Scenario's voor uitgaand verkeer in Azure Kubernetes Service
Verkeer dat afkomstig is van het AKS-cluster, ongeacht of dit afkomstig is van een pod of een werkknooppunt, wordt beschouwd als uitgaand verkeer van het cluster. Wat gebeurt er als er een probleem is in de uitgaande stroom voor een AKS-cluster? Voordat u problemen oplost, bekijkt u eerst de scenario's voor de uitgaande verkeersstroom.
Het uitgaande verkeer van een AKS-cluster kan worden geclassificeerd in de volgende categorieën:
Verkeer naar een pod of service in hetzelfde cluster (intern verkeer).
Verkeer naar een apparaat of eindpunt in hetzelfde virtuele netwerk of een ander virtueel netwerk dat gebruikmaakt van peering van virtuele netwerken.
Verkeer naar een on-premises omgeving via een VPN-verbinding of een Azure ExpressRoute-verbinding.
Verkeer buiten het AKS-netwerk via Azure Load Balancer (openbaar uitgaand verkeer).
Verkeer buiten het AKS-netwerk via Azure Firewall of een proxyserver (openbaar uitgaand verkeer).
Intern verkeer
Een basisaanvraagstroom voor intern verkeer van een AKS-cluster lijkt op de stroom die wordt weergegeven in het volgende diagram.
Openbaar uitgaand verkeer via Azure Load Balancer
Als het verkeer voor een bestemming op internet is, is de standaardmethode om het verkeer via de Azure Load Balancer te verzenden.
Openbaar uitgaand verkeer via Azure Firewall of een proxyserver
In sommige gevallen moet het uitgaand verkeer worden gefilterd en is mogelijk Azure Firewall vereist.
Een gebruiker kan een proxyserver toevoegen in plaats van een firewall of een NAT-gateway instellen voor uitgaand verkeer. De basisstroom blijft hetzelfde als in het diagram.
Het is belangrijk om inzicht te hebben in de aard van uitgaand verkeer voor uw cluster, zodat u kunt doorgaan met het oplossen van problemen.
Overwegingen bij het oplossen van problemen
Controleer uw uitgaand apparaat
Wanneer u problemen met uitgaand verkeer in AKS oplost, is het belangrijk om te weten wat uw uitgaand apparaat is (dat wil zeggen het apparaat waarmee het verkeer wordt doorgegeven). Hier kan het uitgaande apparaat een van de volgende onderdelen zijn:
- Azure-belastingsverdeling
- Azure Firewall of een aangepaste firewall
- Een NAT-gateway (Network Address Translation)
- Een proxyserver
De stroom kan ook verschillen op basis van de bestemming. Intern verkeer (dat wil gezegd, binnen het cluster) gaat bijvoorbeeld niet via het uitgaande apparaat. Het interne verkeer gebruikt alleen het clusternetwerk. Bepaal voor openbaar uitgaand verkeer of er een uitgaand apparaat wordt doorgegeven en controleer dat apparaat.
Elke hop in de verkeersstroom controleren
Nadat u het uitgaande apparaat hebt geïdentificeerd, controleert u de volgende factoren:
De bron en de bestemming voor de aanvraag.
De hops tussen de bron en de bestemming.
De aanvraag-antwoordstroom.
De hops die worden uitgebreid door extra beveiligingslagen, zoals de volgende lagen:
- Firewall
- Netwerkbeveiligingsgroep (NSG)
- Netwerkbeleid
Als u een problematische hop wilt identificeren, controleert u de antwoordcodes vóór en na deze hop. Als u wilt controleren of de pakketten correct in een specifieke hop binnenkomen, kunt u doorgaan met pakketopnamen.
HTTP-antwoordcodes controleren
Wanneer u elk onderdeel controleert, haalt u HTTP-antwoordcodes op en analyseert u deze. Deze codes zijn handig om de aard van het probleem te identificeren. De codes zijn vooral handig in scenario's waarin de toepassing reageert op HTTP-aanvragen.
Pakketopnamen van de client en server maken
Als andere stappen voor probleemoplossing geen overtuigend resultaat bieden, neemt u pakketopnamen van de client en server. Pakketopnamen zijn ook handig wanneer niet-HTTP-verkeer tussen de client en de server wordt gebruikt. Zie de volgende artikelen in de handleiding voor het verzamelen van gegevens voor meer informatie over het verzamelen van pakketopnamen voor de AKS-omgeving:
Een TCP-dump vastleggen vanaf een Linux-knooppunt in een AKS-cluster
Een TCP-dump vastleggen vanaf een Windows-knooppunt in een AKS-cluster
Controlelijsten voor probleemoplossing
Voer de volgende stappen uit voor eenvoudige probleemoplossing voor uitgaand verkeer van een AKS-cluster:
Zorg ervoor dat de DNS-resolutie (Domain Name System) voor het eindpunt correct werkt.
Zorg ervoor dat u het eindpunt kunt bereiken via een IP-adres.
Zorg ervoor dat u het eindpunt vanuit een andere bron kunt bereiken.
Controleer of het cluster een ander extern eindpunt kan bereiken.
Controleer of het verkeer wordt geblokkeerd door een netwerkbeleid.
Controleer of een firewall of proxy het verkeer blokkeert.
Controleer of de AKS-service-principal of beheerde identiteit de vereiste AKS-servicemachtigingen heeft om de netwerkwijzigingen in Azure-resources aan te brengen.
Notitie
Gaat ervan uit dat er geen service-mesh is wanneer u eenvoudige probleemoplossing uitvoert. Als u een service-mesh zoals Istio gebruikt, produceert het ongebruikelijke resultaten voor TCP-verkeer.
Controleer of de pod en het knooppunt het eindpunt kunnen bereiken
Vanuit de pod kunt u een DNS-zoekopdracht uitvoeren naar het eindpunt.
Wat gebeurt er als u de opdracht kubectl exec niet kunt uitvoeren om verbinding te maken met de pod en het DNS Utils-pakket te installeren? In deze situatie kunt u een testpod starten in dezelfde naamruimte als de problematische pod en vervolgens de tests uitvoeren.
Notitie
Als u met de DNS-omzetting of uitgaand verkeer de benodigde netwerkpakketten niet kunt installeren, kunt u de rishasi/ubuntu-netutil:1.0
Docker-installatiekopieën gebruiken. In deze installatiekopieën zijn de vereiste pakketten al geïnstalleerd.
Voorbeeldprocedure voor het controleren van DNS-resolutie van een Linux-pod
Start een testpod in dezelfde naamruimte als de problematische pod:
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux"}}}'
Nadat de testpod wordt uitgevoerd, krijgt u toegang tot de pod.
Voer de volgende
apt-get
opdrachten uit om andere hulpprogrammapakketten te installeren:# Update and install tool packages apt-get update && apt-get install -y dnsutils curl
Nadat de pakketten zijn geïnstalleerd, voert u de opdracht nslookup uit om de DNS-omzetting naar het eindpunt te testen:
$ nslookup microsoft.com # Microsoft.com is used as an example Server: <server> Address: <server IP address>#53 ... ... Name: microsoft.com Address: 20.53.203.50
Probeer de DNS-omzetting rechtstreeks vanaf de upstream-DNS-server. In dit voorbeeld wordt Azure DNS gebruikt:
$ nslookup microsoft.com 168.63.129.16 Server: 168.63.129.16 Address: 168.63.129.16#53 ... ... Address: 20.81.111.85
Soms is er een probleem met het eindpunt zelf in plaats van een cluster-DNS. Houd in dergelijke gevallen rekening met de volgende controles:
Controleer of de gewenste poort is geopend op de externe host:
curl -Ivm5 telnet://microsoft.com:443
Controleer de HTTP-antwoordcode:
curl -Ivm5 https://microsoft.com
Controleer of u verbinding kunt maken met een ander eindpunt:
curl -Ivm5 https://kubernetes.io
Voer de volgende stappen uit om te controleren of het eindpunt bereikbaar is vanaf het knooppunt waarin de problematische pod zich bevindt en controleer vervolgens de DNS-instellingen:
Voer het knooppunt in waarin de problematische pod zich bevindt via de foutopsporingspod. Zie Verbinding maken met AKS-clusterknooppunten (Azure Kubernetes Service) voor onderhoud of probleemoplossing voor meer informatie over hoe u dit doet.
Test de DNS-omzetting naar het eindpunt:
$ nslookup microsoft.com Server: 168.63.129.16 Address: 168.63.129.16#53 Non-authoritative answer: Name: microsoft.com Address: 20.112.52.29 Name: microsoft.com Address: 20.81.111.85 Name: microsoft.com Address: 20.84.181.62 Name: microsoft.com Address: 20.103.85.33 Name: microsoft.com Address: 20.53.203.50
Controleer het bestand resolv.conf om te bepalen of de verwachte naamservers worden toegevoegd:
cat /etc/resolv.conf cat /run/systemd/resolve/resolv.conf
Voorbeeldprocedure voor het controleren van DE DNS-resolutie van een Windows-pod
Voer een testpod uit in de Windows-knooppuntgroep:
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:ltsc2022' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
Voer de opdracht kubectl exec uit om verbinding te maken met de pod met behulp van PowerShell:
kubectl exec -it dnsutil-win -- powershell
Voer de cmdlet Resolve-DnsName uit in PowerShell om te controleren of de DNS-resolutie werkt voor het eindpunt:
PS C:\> Resolve-DnsName www.microsoft.com Name Type TTL Section NameHost ---- ---- --- ------- -------- www.microsoft.com CNAME 20 Answer www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey. CNAME 20 Answer www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net net www.microsoft.com-c-3.edgekey. CNAME 20 Answer e13678.dscb.akamaiedge.net net.globalredir.akadns.net Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:484::356e Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:496::356e Name : e13678.dscb.akamaiedge.net QueryType : A TTL : 12 Section : Answer IP4Address : 23.200.197.152
In een ongebruikelijk scenario met DNS-omzetting krijgen de DNS-query's een correct antwoord van het knooppunt, maar mislukken ze van de pod. Voor dit scenario kunt u overwegen om DNS-omzettingsfouten vanuit de pod te controleren, maar niet vanuit het werkknooppunt. Als u de DNS-resolutie voor een eindpunt in het cluster wilt controleren, kunt u overwegen om de DNS-omzettingsstatus in het cluster te controleren.
Als de DNS-omzetting is geslaagd, gaat u verder met de netwerktests. Controleer anders de DNS-configuratie voor het cluster.
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.