Erfassen eines TCP-Speicherabbilds von einem Linux-Knoten in einem AKS-Cluster
Netzwerkprobleme können auftreten, wenn Sie einen Microsoft Azure Kubernetes Service (AKS)-Cluster verwenden. Um diese Probleme zu untersuchen, wird in diesem Artikel erläutert, wie Sie ein TCP-Dump von einem Linux-Knoten in einem AKS-Cluster erfassen und dann die Aufnahme auf Ihren lokalen Computer herunterladen.
Voraussetzungen
- Das Kubernetes-Kubectl-Tool. Führen Sie zum Installieren von Kubectl mithilfe der Azure CLI den Befehl "az aks install-cli " aus.
- Ein AKS-Cluster. Wenn Sie keinen AKS-Cluster haben, erstellen Sie einen mit Azure CLI oder über die Azure-Portal.
- Das Befehlszeilentool tcpdump auf dem Linux-Knoten installiert.
Notiz
Sie können die TCP-Erfassung über ein Helm-Diagramm automatisieren, das im Hintergrund als DaemonSet ausgeführt werden kann. Weitere Informationen finden Sie in diesem benutzerdefinierten GitHub-Tool zum Erfassen von TCP-Dumps, oder führen Sie die Schritte in den folgenden Abschnitten aus.
Schritt 1: Suchen der Knoten zur Problembehandlung
Wie bestimmen Sie, von welchem Knoten das TCP-Dump abgerufen werden soll? Zuerst wird die Liste der Knoten im AKS-Cluster mithilfe des Kubernetes-Befehlszeilenclients kubectl abgerufen. Folgen Sie den Anweisungen zum Herstellen einer Verbindung mit dem Cluster, und führen Sie den kubectl get nodes --output wide
Befehl mit der Azure-Portal oder Azure CLI aus. Eine Knotenliste, die der folgenden Ausgabe ähnelt, wird angezeigt:
$ 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
Schritt 2: Herstellen einer Verbindung mit einem Linux-Knoten
Der nächste Schritt besteht darin, eine Verbindung mit dem AKS-Clusterknoten herzustellen, von dem Sie die Netzwerkablaufverfolgung erfassen möchten. Weitere Informationen finden Sie unter Erstellen einer interaktiven Shellverbindung mit einem Linux-Knoten.
Schritt 3: Sicherstellen, dass tcpdump installiert ist
Nachdem Sie eine Verbindung mit dem AKS Linux-Knoten hergestellt haben, überprüfen Sie, ob das Tcpdump-Tool zuvor auf einem Knoten installiert wurde, indem Sie ausführen tcpdump --version
. Wenn tcpdump nicht installiert wurde, wird der folgende Fehlertext angezeigt:
# tcpdump --version
bash: tcpdump: command not found
Installieren Sie dann tcpdump auf Ihrem Pod, indem Sie das Paketbehandlungsprogramm des Advanced Package Tool ausführen, apt-get:
apt-get update && apt-get install tcpdump
Wenn tcpdump installiert ist, wird etwas ähnliches wie der folgende Text angezeigt:
# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1 11 Sep 2018
Schritt 4: Erstellen einer Paketerfassung
Führen Sie zum Erfassen des Dumps den Befehl "tcpdump" wie folgt aus:
# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6
Notiz
Das Ausführen von tcpdump ohne Verwendung von Filterparametern kann die Größe der Packet Capture (PCAP)-Datei erheblich erhöhen, insbesondere bei langen Läufen. Daher wird empfohlen, Filter wie Quelle, Ziel und Port hinzuzufügen. Zum Beispiel:
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
Während die Ablaufverfolgung ausgeführt wird, replizieren Sie Ihr Problem mehrmals. Diese Aktion stellt sicher, dass das Problem innerhalb des TCP-Dumps erfasst wird. Notieren Sie sich den Zeitstempel, während Sie das Problem replizieren. Um die Paketerfassung zu beenden, wenn Sie fertig sind, drücken Sie STRG+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
Schritt 5: Lokales Übertragen der Aufzeichnung
Nachdem Sie die Paketerfassung abgeschlossen haben, identifizieren Sie den Hilfs-Pod, damit Sie das Dump lokal kopieren können. Öffnen Sie eine zweite Konsole, und rufen Sie dann eine Liste der Pods ab, indem Sie ausgeführt kubectl get pods
werden , wie unten dargestellt.
$ 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
Der Hilfs pod hat ein Präfix von node-debugger-aks
, wie in der dritten Zeile dargestellt. Ersetzen Sie den Podnamen, und führen Sie dann den folgenden Kubectl-Befehl aus. Diese Befehle rufen die Paketerfassung für Ihren Linux-Knoten ab.
kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap
Notiz
Wenn der Befehl beim Eingeben des chroot /host
Debug-Pods verwendet wurde, fügen Sie /host
vor der /capture.cap
Quelldatei hinzu.
Informationen zum Haftungsausschluss von Drittanbietern
Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.