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 ułatwić badanie 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 komputer lokalny.

Wymagania wstępne

Uwaga 16.

Przechwytywanie PROTOKOŁU TCP można zautomatyzować za pomocą wykresu programu Helm, który może być uruchamiany w tle jako element DaemonSet. 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ązania 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 witryny 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órego chcesz przechwycić ślad sieci. Aby uzyskać więcej informacji, zobacz Tworzenie interakcyjnego 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 protokół 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 zaawansowanych apt-get:

apt-get update && apt-get install tcpdump

Jeśli zainstalowano protokół tcpdump, zostanie wyświetlony podobny do następującego tekstu:

# 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

Uwaga 16.

Uruchomienie polecenia tcpdump bez używania parametrów filtrowania może znacznie zwiększyć rozmiar pliku przechwytywania pakietów (PCAP), szczególnie w przypadku długich przebiegów. W związku z tym zalecamy dodanie filtrów, takich jak źródło, lokalizacja docelowa i port. Na przykład:

  • tcpdump dst 192.168.1.100
  • tcpdump dst host.mydomain.com
  • tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet

Gdy śledzenie jest uruchomione, zreplikuj problem wiele razy. Ta akcja umożliwia upewnienie się, że problem został przechwycony w ramach zrzutu TCP. Zanotuj sygnaturę czasową podczas replikowania problemu. Aby zatrzymać przechwytywanie pakietów po zakończeniu, naciśnij 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 pobierz 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-aks, jak 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

Uwaga 16.

chroot /host Jeśli polecenie zostało użyte podczas wprowadzania zasobnika debugowania, dodaj /host przed /capture.cap plikiem źródłowym.

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