Capture d’un vidage TCP à partir d’un nœud Windows dans un cluster AKS

Des problèmes de mise en réseau peuvent se produire lorsque vous utilisez un cluster Microsoft Azure Kubernetes Service (AKS). Pour vous aider à examiner ces problèmes, cet article explique comment capturer un vidage TCP à partir d’un nœud Windows dans un cluster AKS, puis télécharger la capture sur votre ordinateur local.

Prerequisites

Étape 1 : Rechercher les nœuds à résoudre

Comment déterminer le nœud à partir duquel extraire le vidage TCP ? Vous obtenez d’abord la liste des nœuds dans le cluster AKS à l’aide du client de ligne de commande Kubernetes, kubectl. Suivez les instructions pour vous connecter au cluster et exécuter la kubectl get nodes --output wide commande à l’aide de la Portail Azure ou d’Azure CLI. Une liste de nœuds similaire à la sortie suivante s’affiche :

$ 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

Étape 2 : Se connecter à un nœud Windows

L’étape suivante consiste à établir une connexion au nœud de cluster AKS. Vous vous authentifiez à l’aide d’une clé SSH (Secure Shell) ou à l’aide du mot de passe administrateur Windows dans une connexion RDP (Remote Desktop Protocol). Les deux méthodes nécessitent la création d’une connexion intermédiaire, car vous ne pouvez pas vous connecter directement au nœud Windows AKS. Que vous vous connectiez à un nœud via SSH ou RDP, vous devez spécifier le nom d’utilisateur pour les nœuds AKS. Par défaut, ce nom d’utilisateur est azureuser. Outre l’utilisation d’une connexion SSH ou RDP, vous pouvez vous connecter à un nœud Windows à partir du conteneur HostProcess.

  1. Créez hostprocess.yaml avec le contenu suivant. Remplacez AKSWINDOWSNODENAME par le nom du nœud Windows AKS.

    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. Exécutez la kubectl apply -f hostprocess.yaml commande pour déployer le conteneur HostProcess Windows dans le nœud Windows spécifié.

  3. Exécutez la commande kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Exécutez toutes les commandes PowerShell à l’intérieur du conteneur HostProcess pour accéder au nœud Windows.

    Note

    Pour accéder aux fichiers dans le nœud Windows, basculez le dossier racine vers C:\ le conteneur HostProcess.

Étape 3 : Créer une capture de paquets

Lorsque vous êtes connecté au nœud Windows via SSH ou RDP, ou à partir du conteneur HostProcess, une forme de l’invite de commandes Windows s’affiche :

azureuser@akswin000000 C:\Users\azureuser>

Ouvrez maintenant une invite de commandes et entrez la commande Network Shell (netsh) ci-dessous pour capturer les traces (netsh trace start). Cette commande démarre le processus de capture de paquets.

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

La sortie s’affiche similaire au texte suivant :

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

Pendant que la trace est en cours d’exécution, répliquez votre problème plusieurs fois. Cette action garantit que le problème a été capturé dans le vidage TCP. Notez l’horodatage pendant la réplication du problème. Pour arrêter la capture de paquets lorsque vous avez terminé, entrez 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.

Étape 4 : Transférer la capture localement

Une fois la capture de paquets terminée, identifiez le pod HostProcess afin de pouvoir copier le vidage localement.

  1. Sur votre ordinateur local, ouvrez une deuxième console, puis obtenez la liste des pods en exécutant la kubectl get pods commande :

    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
    

    Le nom par défaut du pod HostProcess est hpc, comme indiqué dans la troisième ligne.

  2. Copiez les fichiers de vidage TCP localement en exécutant les commandes suivantes. Remplacez le nom du pod par 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
    

    Les fichiers .etl et .cab seront désormais présents dans votre répertoire local.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.