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
- Narzędzie Kubernetes kubectl . Aby zainstalować narzędzie kubectl przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom polecenie az aks install-cli.
- Klaster usługi AKS. Jeśli nie masz klastra usługi AKS, utwórz go przy użyciu interfejsu wiersza polecenia platformy Azure lub za pośrednictwem witryny Azure Portal.
- Narzędzie wiersza polecenia tcpdump zainstalowane w węźle systemu Linux.
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.