Een TCP-dump vastleggen vanaf een Windows-knooppunt in een AKS-cluster
Netwerkproblemen kunnen optreden wanneer u een AKS-cluster (Microsoft Azure Kubernetes Service) gebruikt. Om deze problemen te onderzoeken, wordt in dit artikel uitgelegd hoe u een TCP-dump van een Windows-knooppunt in een AKS-cluster vastlegt en vervolgens de opname downloadt naar uw lokale computer.
Voorwaarden
- Azure CLI, versie 2.0.59 of hoger. U kunt Azure Cloud Shell openen in de webbrowser om Azure CLI-opdrachten in te voeren. Of installeer of upgrade Azure CLI op uw lokale computer. Als u wilt zoeken naar de versie die op uw computer is geïnstalleerd, voert u de opdracht uit
az --version
. - Een AKS-cluster. Als u geen AKS-cluster hebt, maakt u er een met behulp van Azure CLI of via Azure Portal.
Stap 1: de knooppunten zoeken om problemen op te lossen
Hoe bepaalt u van welk knooppunt de TCP-dump moet worden opgehaald? U haalt eerst de lijst met knooppunten in het AKS-cluster op met behulp van de Kubernetes-opdrachtregelclient, kubectl. Volg de instructies om verbinding te maken met het cluster en voer de kubectl get nodes --output wide
opdracht uit met behulp van Azure Portal of Azure CLI. Er wordt een knooppuntlijst weergegeven die vergelijkbaar is met de volgende uitvoer:
$ 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
Stap 2: Verbinding maken met een Windows-knooppunt
De volgende stap bestaat uit het tot stand brengen van een verbinding met het AKS-clusterknooppunt. U verifieert zich met behulp van een SSH-sleutel (Secure Shell) of met het Windows-beheerderswachtwoord in een RDP-verbinding (Remote Desktop Protocol). Voor beide methoden moet een tussenliggende verbinding worden gemaakt, omdat u momenteel niet rechtstreeks verbinding kunt maken met het AKS Windows-knooppunt. Of u nu verbinding maakt met een knooppunt via SSH of RDP, u moet de gebruikersnaam voor de AKS-knooppunten opgeven. Deze gebruikersnaam is standaard azureuser. Naast het gebruik van een SSH- of RDP-verbinding, kunt u verbinding maken met een Windows-knooppunt vanuit de HostProcess-container.
Maak hostprocess.yaml met de volgende inhoud. Vervang door
AKSWINDOWSNODENAME
de naam van het AKS Windows-knooppunt.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
Voer de
kubectl apply -f hostprocess.yaml
opdracht uit om de Windows HostProcess-container in het opgegeven Windows-knooppunt te implementeren.Voer de opdracht
kubectl exec -it [HPC-POD-NAME] -- powershell
uit.Voer PowerShell-opdrachten uit in de HostProcess-container om toegang te krijgen tot het Windows-knooppunt.
Notitie
Als u toegang wilt krijgen tot de bestanden in het Windows-knooppunt, schakelt u de hoofdmap over naar
C:\
de HostProcess-container.
Stap 3: Een pakketopname maken
Wanneer u verbinding hebt met het Windows-knooppunt via SSH of RDP, of vanuit de HostProcess-container, wordt een vorm van de Windows-opdrachtprompt weergegeven:
azureuser@akswin000000 C:\Users\azureuser>
Open nu een opdrachtprompt en voer de onderstaande opdracht Network Shell (netsh) in voor het vastleggen van traceringen (netsh trace start). Met deze opdracht wordt het proces voor pakketopname gestart.
netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl
De uitvoer lijkt op de volgende tekst:
Trace configuration:
-------------------------------------------------------------------
Status: Running
Trace File: AKS_node_name.etl
Append: Off
Circular: On
Max Size: 250 MB
Report: Off
Terwijl de tracering wordt uitgevoerd, repliceert u het probleem vaak. Deze actie zorgt ervoor dat het probleem is vastgelegd in de TCP-dump. Noteer het tijdstempel tijdens het repliceren van het probleem. Als u de pakketopname wilt stoppen wanneer u klaar bent, voert u het volgende in 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.
Stap 4: De opname lokaal overdragen
Nadat u de pakketopname hebt voltooid, identificeert u de HostProcess-pod, zodat u de dump lokaal kunt kopiëren.
Open op uw lokale computer een tweede console en haal vervolgens een lijst met pods op door de opdracht uit te
kubectl get pods
voeren: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
De standaardnaam van de HostProcess-pod is hpc, zoals wordt weergegeven in de derde regel.
Kopieer de TCP-dumpbestanden lokaal door de volgende opdrachten uit te voeren. Vervang de podnaam door
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
De .etl - en .cab-bestanden zijn nu aanwezig in uw lokale map.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.