Condividi tramite


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

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.

  1. 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
    
  2. Eseguire il kubectl apply -f hostprocess.yaml comando per distribuire il contenitore HostProcess di Windows nel nodo Windows specificato.

  3. Eseguire il comando kubectl exec -it [HPC-POD-NAME] -- powershell.

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

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

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