Freigeben über


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

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.

  1. 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
    
  2. Führen Sie den kubectl apply -f hostprocess.yaml Befehl aus, um den Windows HostProcess-Container im angegebenen Windows-Knoten bereitzustellen.

  3. Führen Sie den Befehl kubectl exec -it [HPC-POD-NAME] -- powershell aus.

  4. 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.

  1. Ö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.

  2. 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.