Erfassen eines TCP-Speicherabbilds von einem Windows-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 Windows-Knoten in einem AKS-Cluster erfassen und dann die Aufnahme auf Ihren lokalen Computer herunterladen.
Voraussetzungen
- Azure CLI, Version 2.0.59 oder höher. Sie können Azure Cloud Shell im Webbrowser öffnen, um Azure CLI-Befehle einzugeben. Oder installieren oder aktualisieren Sie Azure CLI auf Ihrem lokalen Computer. Um die version zu finden, die auf Ihrem Computer installiert ist, führen Sie den Befehl
az --version
aus. - Ein AKS-Cluster. Wenn Sie keinen AKS-Cluster haben, erstellen Sie einen mit Azure CLI oder über die Azure-Portal.
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
akswin000000 Ready agent 3m8s v1.20.9 10.240.0.4 <none> Windows Server 2019 Datacenter 10.0.17763.2237 docker://20.10.6
akswin000001 Ready agent 3m50s v1.20.9 10.240.0.115 <none> Windows Server 2019 Datacenter 10.0.17763.2237 docker://20.10.6
akswin000002 Ready agent 3m32s v1.20.9 10.240.0.226 <none> Windows Server 2019 Datacenter 10.0.17763.2237 docker://20.10.6
Schritt 2: Herstellen einer Verbindung mit einem Windows-Knoten
Der nächste Schritt besteht darin, eine Verbindung mit dem AKS-Clusterknoten herzustellen. Sie authentifizieren sich entweder mithilfe eines SSH-Schlüssels (Secure Shell) oder mithilfe des Windows-Administratorkennworts in einer RDP-Verbindung (Remote Desktop Protocol). Beide Methoden erfordern das Erstellen einer Zwischenverbindung, da Sie derzeit keine direkte Verbindung mit dem AKS Windows-Knoten herstellen können. Unabhängig davon, ob Sie eine Verbindung mit einem Knoten über SSH oder RDP herstellen, müssen Sie den Benutzernamen für die AKS-Knoten angeben. Standardmäßig ist dieser Benutzername azureuser. Neben der Verwendung einer SSH- oder RDP-Verbindung können Sie über den HostProcess-Container eine Verbindung mit einem Windows-Knoten herstellen.
Erstellen Sie hostprocess.yaml mit dem folgenden Inhalt. Ersetzen Sie den
AKSWINDOWSNODENAME
Namen des Windows-Knotens "AKS".apiVersion: v1 kind: Pod metadata: labels: pod: hpc name: hpc spec: securityContext: windowsOptions: hostProcess: true runAsUserName: "NT AUTHORITY\\SYSTEM" hostNetwork: true containers: - name: hpc image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019 command: - powershell.exe - -Command - "Start-Sleep 2147483" imagePullPolicy: IfNotPresent nodeSelector: kubernetes.io/os: windows kubernetes.io/hostname: AKSWINDOWSNODENAME tolerations: - effect: NoSchedule key: node.kubernetes.io/unschedulable operator: Exists - effect: NoSchedule key: node.kubernetes.io/network-unavailable operator: Exists - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists
Führen Sie den
kubectl apply -f hostprocess.yaml
Befehl aus, um den Windows HostProcess-Container im angegebenen Windows-Knoten bereitzustellen.Führen Sie den Befehl
kubectl exec -it [HPC-POD-NAME] -- powershell
aus.Führen Sie alle PowerShell-Befehle im HostProcess-Container aus, um auf den Windows-Knoten zuzugreifen.
Notiz
Um auf die Dateien im Windows-Knoten zuzugreifen, wechseln Sie in den Stammordner
C:\
in den HostProcess-Container.
Schritt 3: Erstellen einer Paketerfassung
Wenn Sie über SSH oder RDP oder über den HostProcess-Container mit dem Windows-Knoten verbunden sind, wird eine Form der Windows-Eingabeaufforderung angezeigt:
azureuser@akswin000000 C:\Users\azureuser>
Öffnen Sie nun eine Eingabeaufforderung, und geben Sie unten den Befehl "Netzwerkshell " (netsh) ein, um Ablaufverfolgungen zu erfassen (Start der netsh-Ablaufverfolgung). Dieser Befehl startet den Paketerfassungsprozess.
netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl
Die Ausgabe wird angezeigt, die dem folgenden Text ähnelt:
Trace configuration:
-------------------------------------------------------------------
Status: Running
Trace File: AKS_node_name.etl
Append: Off
Circular: On
Max Size: 250 MB
Report: Off
Während die Ablaufverfolgung ausgeführt wird, replizieren Sie Ihr Problem mehrmals. Diese Aktion stellt sicher, dass das Problem innerhalb des TCP-Dumps erfasst wurde. Notieren Sie sich den Zeitstempel, während Sie das Problem replizieren. Um die Paketerfassung zu beenden, wenn Sie fertig sind, geben Sie Folgendes ein netsh trace stop
:
azureuser@akswin000000 C:\Users\azureuser>netsh trace stop
Merging traces ... done
Generating data collection ... done
The trace file and additional troubleshooting information have been compiled as "C:\temp\AKS_node_name.cab".
File location = C:\temp\AKS_node_name.etl
Tracing session was successfully stopped.
Schritt 4: Lokales Übertragen der Aufzeichnung
Nachdem Sie die Paketerfassung abgeschlossen haben, identifizieren Sie den HostProcess-Pod, damit Sie das Dump lokal kopieren können.
Öffnen Sie auf Ihrem lokalen Computer eine zweite Konsole, und rufen Sie dann eine Liste der Pods ab, indem Sie den
kubectl get pods
Befehl ausführen:kubectl get pods NAME READY STATUS RESTARTS AGE azure-vote-back-6c4dd64bdf-m4nk7 1/1 Running 2 3d21h azure-vote-front-85b4df594d-jhpzw 1/1 Running 2 3d21h hpc 1/1 Running 0 3m58s
Der Standardname des HostProcess-Pods ist hpc, wie in der dritten Zeile dargestellt.
Kopieren Sie die TCP-Speicherabbilddateien lokal, indem Sie die folgenden Befehle ausführen. Ersetzen Sie den Podnamen durch
hpc
.kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.etl tar: Removing leading '/' from member names kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.cab tar: Removing leading '/' from member names
Die ETL - und .cab-Dateien sind jetzt in Ihrem lokalen Verzeichnis vorhanden.
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.