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
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 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:
Uruchom zasobnik testowy w klastrze, uruchamiając polecenie kubectl run :
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
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
Po zainstalowaniu pakietów uruchom następujące polecenie cURL, aby przetestować łączność z adresem IP zasobnika:
curl -Iv http://<pod-ip-address>:<port>
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:
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 jakoREADY
.NAME READY STATUS RESTARTS AGE my-other-pod 1/1 Running 0 44m my-pod 1/1 Running 0 44m
Wyszukaj w dziennikach zasobnika błędy dostępu:
kubectl logs <pod-name> -n <namespace-name>
Przeszukaj dzienniki zasobnika dla pojedynczego kontenera w zasobniku wielokontenerowym:
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
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
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.
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
Uzyskaj więcej pełnych informacji o usłudze:
kubectl describe services <service-name> -n <namespace-name>
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
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
Sprawdź punkty końcowe bezpośrednio:
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
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
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.