Udostępnij za pośrednictwem


Przechwytywanie zrzutu TCP z węzła systemu Linux w klastrze usługi AKS

Problemy z siecią mogą wystąpić, gdy używasz klastra usługi Microsoft Azure Kubernetes Service (AKS). Aby pomóc w zbadaniu tych problemów, w tym artykule wyjaśniono, jak przechwycić zrzut TCP z węzła systemu Linux w klastrze usługi AKS, a następnie pobrać przechwytywanie na maszynę lokalną.

Wymagania wstępne

Uwaga

Przechwytywanie TCP można zautomatyzować za pomocą wykresu helm, który może być uruchamiany w tle jako DemonSet. Aby uzyskać więcej informacji, zobacz to niestandardowe narzędzie GitHub do przechwytywania zrzutów TCP lub wykonaj kroki opisane w poniższych sekcjach.

Krok 1. Znajdowanie węzłów do rozwiązywania problemów

Jak określić, z którego węzła ściągnąć zrzut TCP? Najpierw uzyskasz listę węzłów w klastrze usługi AKS przy użyciu klienta wiersza polecenia Kubernetes kubectl. Postępuj zgodnie z instrukcjami, aby nawiązać połączenie z klastrem i uruchomić kubectl get nodes --output wide polecenie przy użyciu Azure Portal lub interfejsu wiersza polecenia platformy Azure. Zostanie wyświetlona lista węzłów podobna do następujących danych wyjściowych:

$ kubectl get nodes --output wide
NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
aks-agentpool-34796016-vmss000000   Ready    agent   45h   v1.20.9   10.240.1.81    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002   Ready    agent   45h   v1.20.9   10.240.2.47    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure

Krok 2. Nawiązywanie połączenia z węzłem systemu Linux

Następnym krokiem jest nawiązanie połączenia z węzłem klastra usługi AKS, z których chcesz przechwycić ślad sieci. Aby uzyskać więcej informacji, zobacz Tworzenie interaktywnego połączenia powłoki z węzłem systemu Linux.

Krok 3. Upewnij się, że zainstalowano protokół tcpdump

Po nawiązaniu połączenia z węzłem systemu Linux usługi AKS sprawdź, czy narzędzie tcpdump zostało wcześniej zainstalowane w węźle, uruchamiając polecenie tcpdump --version. Jeśli tcpdump nie został zainstalowany, zostanie wyświetlony następujący tekst błędu:

# tcpdump --version
bash: tcpdump: command not found

Następnie zainstaluj narzędzie tcpdump na zasobniku, uruchamiając narzędzie do obsługi pakietów narzędzia Advanced Package Tool, apt-get:

apt-get update && apt-get install tcpdump

Jeśli tcpdump jest zainstalowany, zostanie wyświetlony tekst podobny do następującego:

# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018

Krok 4. Tworzenie przechwytywania pakietów

Aby przechwycić zrzut, uruchom polecenie tcpdump w następujący sposób:

# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6

Gdy śledzenie jest uruchomione, wielokrotnie replikuj problem. Ta akcja gwarantuje, że problem został przechwycony w ramach zrzutu TCP. Zwróć uwagę na sygnaturę czasową podczas replikowania problemu. Aby zatrzymać przechwytywanie pakietów po zakończeniu, naciśnij klawisze Ctrl+C:

# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel

Krok 5. Przenoszenie przechwytywania lokalnie

Po zakończeniu przechwytywania pakietów zidentyfikuj zasobnik pomocnika, aby można było skopiować zrzut lokalnie. Otwórz drugą konsolę, a następnie uzyskaj listę zasobników, uruchamiając polecenie kubectl get pods, jak pokazano poniżej.

$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   0          3m29s
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   0          3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2   1/1     Running   0          60s

Zasobnik pomocnika ma prefiks , node-debugger-aksjak pokazano w trzecim wierszu. Zastąp nazwę zasobnika, a następnie uruchom następujące polecenie kubectl. Te polecenia pobierają przechwytywanie pakietów dla węzła systemu Linux.

kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap

Zastrzeżenie dotyczące innych firm

Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.

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.