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
- Azure CLI, version 2.0.59 eller senare. Du kan öppna Azure Cloud Shell i webbläsaren för att ange Azure CLI-kommandon. Eller installera eller uppgradera Azure CLI på din lokala dator. Kör för att hitta den version som är installerad på datorn
az --version
. - Ett AKS-kluster. Om du inte har något AKS-kluster skapar du ett med Hjälp av Azure CLI eller via Azure Portal.
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.
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
kubectl apply -f hostprocess.yaml
Kör kommandot för att distribuera Windows HostProcess-containern i den angivna Windows-noden.Kör kommandot
kubectl exec -it [HPC-POD-NAME] -- powershell
.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.
Ö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.
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.