Acquisire un dump TCP da un nodo Windows in un cluster del servizio Azure Kubernetes
I problemi di rete possono verificarsi quando si usa un cluster del servizio Azure Kubernetes di Microsoft servizio Azure Kubernetes. Per analizzare questi problemi, questo articolo illustra come acquisire un dump TCP da un nodo Windows in un cluster del servizio Azure Kubernetes e quindi scaricare l'acquisizione nel computer locale.
Prerequisiti
- Interfaccia della riga di comando di Azure, versione 2.0.59 o successiva. È possibile aprire Azure Cloud Shell nel Web browser per immettere i comandi dell'interfaccia della riga di comando di Azure. Oppure installare o aggiornare l'interfaccia della riga di comando di Azure nel computer locale. Per trovare la versione installata nel computer, eseguire
az --version
. - Un cluster servizio Azure Kubernetes. Se non si ha un cluster del servizio Azure Kubernetes, crearne uno usando l'interfaccia della riga di comando di Azure o tramite il portale di Azure.
Passaggio 1: Trovare i nodi da risolvere
Come si determina da quale nodo eseguire il pull del dump TCP? Per prima cosa si ottiene l'elenco dei nodi nel cluster del servizio Azure Kubernetes usando il client da riga di comando Kubernetes, kubectl. Seguire le istruzioni per connettersi al cluster ed eseguire il kubectl get nodes --output wide
comando usando il portale di Azure o l'interfaccia della riga di comando di Azure. Viene visualizzato un elenco di nodi simile all'output seguente:
$ 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
Passaggio 2: Connettersi a un nodo Windows
Il passaggio successivo consiste nel stabilire una connessione al nodo del cluster del servizio Azure Kubernetes. È possibile eseguire l'autenticazione usando una chiave SSH (Secure Shell) o usando la password di amministratore di Windows in una connessione RDP (Remote Desktop Protocol). Entrambi i metodi richiedono la creazione di una connessione intermedia, perché attualmente non è possibile connettersi direttamente al nodo Windows del servizio Azure Kubernetes. Sia che ci si connetta a un nodo tramite SSH o RDP, è necessario specificare il nome utente per i nodi del servizio Azure Kubernetes. Per impostazione predefinita, questo nome utente è azureuser. Oltre a usare una connessione SSH o RDP, è possibile connettersi a un nodo Windows dal contenitore HostProcess.
Creare hostprocess.yaml con il contenuto seguente. Sostituire
AKSWINDOWSNODENAME
con il nome del nodo windows del servizio Azure Kubernetes.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
Eseguire il
kubectl apply -f hostprocess.yaml
comando per distribuire il contenitore HostProcess di Windows nel nodo Windows specificato.Eseguire il comando
kubectl exec -it [HPC-POD-NAME] -- powershell
.Eseguire tutti i comandi di PowerShell all'interno del contenitore HostProcess per accedere al nodo Windows.
Note
Per accedere ai file nel nodo Windows, passare alla cartella
C:\
radice all'interno del contenitore HostProcess.
Passaggio 3: Creare un'acquisizione di pacchetti
Quando si è connessi al nodo Windows tramite SSH o RDP o dal contenitore HostProcess, viene visualizzato un modulo del prompt dei comandi di Windows:
azureuser@akswin000000 C:\Users\azureuser>
Aprire ora un prompt dei comandi e immettere il comando Network Shell (netsh) seguente per l'acquisizione di tracce (avvio della traccia netsh). Questo comando avvia il processo di acquisizione pacchetti.
netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl
L'output appare simile al testo seguente:
Trace configuration:
-------------------------------------------------------------------
Status: Running
Trace File: AKS_node_name.etl
Append: Off
Circular: On
Max Size: 250 MB
Report: Off
Durante l'esecuzione della traccia, replicare il problema più volte. Questa azione garantisce che il problema sia stato acquisito all'interno del dump TCP. Si noti il timestamp durante la replica del problema. Per arrestare l'acquisizione di pacchetti al termine, immettere 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.
Passaggio 4: Trasferire l'acquisizione in locale
Dopo aver completato l'acquisizione di pacchetti, identificare il pod HostProcess in modo che sia possibile copiare il dump in locale.
Nel computer locale aprire una seconda console e quindi ottenere un elenco di pod eseguendo il
kubectl get pods
comando :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
Il nome predefinito del pod HostProcess è hpc, come illustrato nella terza riga.
Copiare i file di dump TCP in locale eseguendo i comandi seguenti. Sostituire il nome del pod con
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
I file con estensione etl e .cab saranno ora presenti nella directory locale.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.