Udostępnij za pośrednictwem


Rozwiązywanie problemów z połączeniami z zasobnikami lub usługami w klastrze usługi AKS (ruch wewnętrzny).

W tym artykule omówiono sposób rozwiązywania problemów z połączeniem z zasobnikami lub usługami jako ruch wewnętrzny z poziomu tego samego klastra usług Microsoft Azure Kubernetes Services (AKS).

Wymagania wstępne

Lista kontrolna rozwiązywania problemów

Krok 1. Konfigurowanie zasobnika testowego i portu serwera zdalnego

Skonfiguruj zasobnik testowy i upewnij się, że wymagany port jest otwarty na serwerze zdalnym. Z poziomu zasobnika źródłowego (lub zasobnika testowego znajdującego się w tej samej przestrzeni nazw co zasobnik źródłowy), wykonaj następujące kroki:

  1. Uruchom zasobnik testowy w klastrze, uruchamiając polecenie kubectl run :

    kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
    
  2. Po uzyskaniu dostępu do zasobnika uruchom następujące apt-get polecenia, aby zainstalować pakiety Utils, cURL i Netcat systemu DNS:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat-openbsd -y
    
  3. Po zainstalowaniu pakietów uruchom następujące polecenie cURL, aby przetestować łączność z adresem IP zasobnika:

    curl -Iv http://<pod-ip-address>:<port>
    
  4. Uruchom polecenie Netcat, aby sprawdzić, czy serwer zdalny otworzył wymagany port:

    nc -z -v <endpoint> <port>
    

Krok 2. Wyświetlanie informacji operacyjnych dotyczących zasobników, kontenerów, usług Kubernetes i punktów końcowych

Korzystając z narzędzia kubectl i cURL w wierszu polecenia, wykonaj następujące kroki, aby sprawdzić, czy wszystko działa zgodnie z oczekiwaniami:

  1. Sprawdź, czy zasobnik docelowy jest uruchomiony:

    kubectl get pods -n <namespace-name>
    

    Jeśli zasobnik docelowy działa poprawnie, stan zasobnika jest wyświetlany jako Running, a zasobnik jest wyświetlany jako READY.

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  2. Wyszukaj w dziennikach zasobnika błędy dostępu:

    kubectl logs <pod-name> -n <namespace-name>
    
  3. Przeszukaj dzienniki zasobnika dla pojedynczego kontenera w zasobniku wielokontenerowym:

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  4. Jeśli aplikacja wewnątrz zasobnika jest wielokrotnie uruchamiana ponownie, wyświetl dzienniki zasobnika poprzedniego wystąpienia kontenera, aby pobrać komunikaty zakończenia:

    kubectl logs <pod-name> --previous                      
    

    W przypadku wielokontenera użyj następującego polecenia:

    kubectl logs <pod-name> -c <container-name> --previous  
    
  5. Sprawdź, czy istnieją jakieś zasady sieciowe, które mogą blokować ruch:

    kubectl get networkpolicies -A
    

    Powinny zostać wyświetlone dane wyjściowe podobne do poniższej tabeli.

    NAMESPACE     NAME                 POD-SELECTOR             AGE
    kube-system   konnectivity-agent   app=konnectivity-agent   4d1h
    

    Jeśli widzisz jakiekolwiek inne niestandardowe zasady sieciowe, sprawdź, czy te zasady nie blokują dostępu do lub z zasobników.

  6. Sprawdź, czy możesz uzyskać dostęp do aplikacji z adresu IP usługi. Najpierw wyświetl szczegółowe informacje o zasobie usługi, takie jak zewnętrzny adres IP i port, uruchamiając kubectl get services polecenie:

    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
    

    Następnie uruchom polecenie cURL przy użyciu adresu IP usługi i portu, aby sprawdzić, czy możesz uzyskać dostęp do aplikacji:

    curl -Iv http://20.119.121.232:80
    .
    .
    .
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    
  7. Uzyskaj więcej pełnych informacji o usłudze:

    kubectl describe services <service-name> -n <namespace-name>
    
  8. Sprawdź adres IP zasobnika:

    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. Sprawdź, czy adres IP zasobnika istnieje jako punkt końcowy w usłudze:

    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. Sprawdź punkty końcowe bezpośrednio:

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  11. Jeśli połączenie z usługą nie działa, uruchom ponownie kube-proxy zasobniki i CoreDNS:

    kubectl delete pods -n kube-system -l component=kube-proxy
    kubectl delete pods -n kube-system -l k8s-app=kube-dns
    
  12. Sprawdź, czy węzeł nie jest nadmiernie zawyżone:

    kubectl top nodes
    

    Uwaga 16.

    Możesz również użyć usługi Azure Monitor, aby uzyskać dane użycia klastra.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.