Delen via


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

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:

  1. 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
    
  2. 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
    
  3. 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>
    
  4. 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:

  1. Controleer of de doelpod actief is:

    kubectl get pods -n <namespace-name>
    

    Als de doelpod correct werkt, wordt de podstatus weergegeven als Runningen wordt de pod weergegeven als READY.

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  2. Doorzoek de podlogboeken op toegangsfouten:

    kubectl logs <pod-name> -n <namespace-name>
    
  3. Zoek in de podlogboeken naar een afzonderlijke container in een pod met meerdere containers:

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  4. 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  
    
  5. 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.

  6. 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
    
  7. Meer uitgebreide informatie over de service:

    kubectl describe services <service-name> -n <namespace-name>
    
  8. 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  
    
  9. 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
    
  10. Controleer de eindpunten rechtstreeks:

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  11. 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
    
  12. 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.