Freigeben über


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

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 podswerden , 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.