Dela via


Fånga in en TCP-dump från en Windows-nod i ett AKS-kluster

Nätverksproblem kan uppstå när du använder ett AKS-kluster (Microsoft Azure Kubernetes Service). För att undersöka dessa problem förklarar den här artikeln hur du samlar in en TCP-dump från en Windows-nod i ett AKS-kluster och sedan laddar ned avbildningen till den lokala datorn.

Förutsättningar

Steg 1: Hitta de noder som ska felsökas

Hur avgör du vilken nod som TCP-dumpen ska hämtas från? Du får först en lista över noder i AKS-klustret med kubernetes-kommandoradsklienten kubectl. Följ anvisningarna för att ansluta till klustret och köra kubectl get nodes --output wide kommandot med hjälp av Azure Portal eller Azure CLI. En nodlista som liknar följande utdata visas:

$ 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

Steg 2: Ansluta till en Windows-nod

Nästa steg är att upprätta en anslutning till AKS-klusternoden. Du autentiserar antingen med hjälp av en SSH-nyckel (Secure Shell) eller med windowsadministratörslösenordet i en RDP-anslutning (Remote Desktop Protocol). Båda metoderna kräver att du skapar en mellanliggande anslutning eftersom du för närvarande inte kan ansluta direkt till AKS Windows-noden. Oavsett om du ansluter till en nod via SSH eller RDP måste du ange användarnamnet för AKS-noderna. Som standard är det här användarnamnet azureuser. Förutom att använda en SSH- eller RDP-anslutning kan du ansluta till en Windows-nod från HostProcess-containern.

  1. Skapa hostprocess.yaml med följande innehåll. Ersätt AKSWINDOWSNODENAME med AKS Windows-nodens namn.

    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. kubectl apply -f hostprocess.yaml Kör kommandot för att distribuera Windows HostProcess-containern i den angivna Windows-noden.

  3. Kör kommandot kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Kör alla PowerShell-kommandon i HostProcess-containern för att få åtkomst till Windows-noden.

    Kommentar

    Om du vill komma åt filerna i Windows-noden växlar du rotmappen till C:\ i HostProcess-containern.

Steg 3: Skapa en paketinsamling

När du är ansluten till Windows-noden via SSH eller RDP, eller från HostProcess-containern, visas en form av Windows-kommandotolken:

azureuser@akswin000000 C:\Users\azureuser>

Öppna nu en kommandotolk och ange kommandot Network Shell (netsh) nedan för att samla in spårningar (netsh trace start). Det här kommandot startar paketinsamlingsprocessen.

netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl

Utdata visas som liknar följande text:

Trace configuration:
-------------------------------------------------------------------
Status:             Running
Trace File:         AKS_node_name.etl
Append:             Off
Circular:           On
Max Size:           250 MB
Report:             Off

När spårningen körs replikerar du problemet många gånger. Den här åtgärden säkerställer att problemet har registrerats i TCP-dumpen. Observera tidsstämpeln när du replikerar problemet. Om du vill stoppa paketinsamlingen när du är klar anger du 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.

Steg 4: Överföra avbildningen lokalt

När du har slutfört paketinsamlingen identifierar du HostProcess-podden så att du kan kopiera dumpen lokalt.

  1. Öppna en andra konsol på den lokala datorn och hämta sedan en lista över poddar genom att kubectl get pods köra kommandot:

    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
    

    Standardnamnet för HostProcess-podden är hpc, som visas på den tredje raden.

  2. Kopiera TCP-dumpfilerna lokalt genom att köra följande kommandon. Ersätt poddnamnet med 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
    

    Filerna .etl och .cab finns nu i din lokala katalog.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.