Verbindingsproblemen met pods of services in een AKS-cluster (intern verkeer) oplossen
In dit artikel wordt beschreven hoe u verbindingsproblemen met pods of services kunt oplossen als intern verkeer vanuit hetzelfde Microsoft Azure Kubernetes Services-cluster (AKS).
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 opdrachtregelprogramma Netcat (
nc
) voor TCP-verbindingen.
Controlelijst voor probleemoplossing
Stap 1: De testpod en de poort van de externe server instellen
Stel de testpod in en zorg ervoor dat de vereiste poort is geopend op de externe server. Voer vanuit de bronpod (of een testpod die zich in dezelfde naamruimte bevindt als de bronpod) de volgende stappen uit:
Start een testpod in het cluster door de opdracht kubectl run uit te voeren:
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
Nadat u toegang hebt tot de pod, voert u de volgende
apt-get
opdrachten uit om de DNS Utils-, cURL- en Netcat-pakketten te installeren:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat-openbsd -y
Nadat de pakketten zijn geïnstalleerd, voert u de volgende cURL-opdracht uit om de verbinding met het IP-adres van de pod te testen:
curl -Iv http://<pod-ip-address>:<port>
Voer de Netcat-opdracht uit om te controleren of de externe server de vereiste poort heeft geopend:
nc -z -v <endpoint> <port>
Stap 2: operationele informatie weergeven over pods, containers, de Kubernetes-services en eindpunten
Volg deze stappen om te controleren of alles werkt zoals verwacht met behulp van kubectl en cURL op de opdrachtregel:
Controleer of de doelpod actief is:
kubectl get pods -n <namespace-name>
Als de doelpod correct werkt, wordt de podstatus weergegeven als
Running
en wordt de pod weergegeven alsREADY
.NAME READY STATUS RESTARTS AGE my-other-pod 1/1 Running 0 44m my-pod 1/1 Running 0 44m
Doorzoek de podlogboeken op toegangsfouten:
kubectl logs <pod-name> -n <namespace-name>
Zoek in de podlogboeken naar een afzonderlijke container in een pod met meerdere containers:
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
Als de toepassing in de pod herhaaldelijk opnieuw wordt opgestart, bekijkt u podlogboeken van een vorige containerinstantie om de afsluitberichten op te halen:
kubectl logs <pod-name> --previous
Gebruik voor de case met meerdere containers de volgende opdracht:
kubectl logs <pod-name> -c <container-name> --previous
Controleer of er netwerkbeleidsregels zijn waarmee het verkeer mogelijk wordt geblokkeerd:
kubectl get networkpolicies -A
U ziet een uitvier dat lijkt op de volgende tabel.
NAMESPACE NAME POD-SELECTOR AGE kube-system konnectivity-agent app=konnectivity-agent 4d1h
Als u een ander aangepast netwerkbeleid ziet, controleert u of dat beleid de toegang tot of van de pods blokkeert.
Controleer of u de toepassing kunt bereiken vanaf het IP-adres van de service. Geef eerst details weer over de serviceresource, zoals het externe IP-adres en de poort, door de opdracht uit te
kubectl get services
voeren:kubectl get services -n <namespace-name>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.0.21.43 20.119.121.232 80:31773/TCP 28s
Voer vervolgens cURL uit met behulp van het IP-adres en de poort van de service om te controleren of u de toepassing kunt bereiken:
curl -Iv http://20.119.121.232:80 . . . < HTTP/1.1 200 OK HTTP/1.1 200 OK
Meer uitgebreide informatie over de service:
kubectl describe services <service-name> -n <namespace-name>
Controleer het IP-adres van de pod:
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE my-pod 1/1 Running 0 12m 10.244.0.15 aks-agentpool-000000-vmss000000
Controleer of het IP-adres van de pod bestaat als eindpunt in de service:
kubectl describe services my-cluster-ip-service
Name: my-cluster-ip-service Namespace: default Selector: app=my-pod Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.0.174.133 IPs: 10.0.174.133 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 10.244.0.15:80 # <--- Here
Controleer de eindpunten rechtstreeks:
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
Als de verbinding met een service niet werkt, start u de
kube-proxy
coreDNS-pods opnieuw op:kubectl delete pods -n kube-system -l component=kube-proxy kubectl delete pods -n kube-system -l k8s-app=kube-dns
Controleer of het knooppunt niet te veel wordt gebruikt:
kubectl top nodes
Notitie
U kunt Azure Monitor ook gebruiken om de gebruiksgegevens voor het cluster op te halen.
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.