Udostępnij za pośrednictwem


Rozwiązywanie problemów z połączeniem 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 ruchem wewnętrznym z tego samego klastra usługi Microsoft Azure Kubernetes Services (AKS).

Wymagania wstępne

  • Narzędzie Kubernetes kubectl lub podobne narzędzie do nawiązywania połączenia z klastrem. Aby zainstalować narzędzie kubectl przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom polecenie az aks install-cli .

  • Narzędzie wiersza polecenia apt-get do obsługi pakietów.

  • Narzędzie Adres URL klienta (cURL) lub podobne narzędzie wiersza polecenia.

  • Narzędzie wiersza polecenia Netcat (nc) dla połączeń TCP.

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 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 DNS Utils, cURL i Netcat:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -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ędzi 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. Search dzienniki zasobnika w przypadku błędów dostępu:

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

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  4. Jeśli aplikacja znajdująca się wewnątrz zasobnika jest ponownie uruchamiana wielokrotnie, wyświetl stdout dzienniki zasobnika zrzutu poprzedniego wystąpienia kontenera, aby uzyskać komunikaty zakończenia. W przypadku wielokontenerów pobierz komunikaty zakończenia, wyświetlając stdout dzienniki kontenera zasobnika zrzutu dla poprzedniego wystąpienia kontenera:

    kubectl logs <pod-name> --previous                      
    
    kubectl logs <pod-name> -c <container-name> --previous  
    
  5. Sprawdź, czy istnieją jakiekolwiek 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 zasady sieciowe utworzone niestandardowo, sprawdź, czy te zasady blokują dostęp do zasobników lub z nich.

  6. Sprawdź, czy możesz uzyskać dostęp do aplikacji z adresu IP usługi. Najpierw pokaż szczegóły dotyczące zasobu 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żna nawiązać połączenie z aplikacją:

    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 nieużywany:

    kubectl top nodes
    

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 platformy Azure.