Compartir a través de


Captura de un volcado TCP desde un nodo de Windows en un clúster de AKS

Los problemas de red pueden producirse cuando se usa un clúster de Microsoft Azure Kubernetes Service (AKS). Para ayudar a investigar estos problemas, en este artículo se explica cómo capturar un volcado de TCP desde un nodo de Windows en un clúster de AKS y, a continuación, descargar la captura en el equipo local.

Requisitos previos

Paso 1: Buscar los nodos para solucionar problemas

¿De qué nodo se va a extraer el volcado de TCP? Primero obtendrá la lista de nodos del clúster de AKS mediante el cliente de línea de comandos de Kubernetes, kubectl. Siga las instrucciones para conectarse al clúster y ejecutar el kubectl get nodes --output wide comando mediante Azure Portal o la CLI de Azure. Aparece una lista de nodos similar a la siguiente salida:

$ 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

Paso 2: Conectarse a un nodo de Windows

El siguiente paso consiste en establecer una conexión con el nodo del clúster de AKS. Puede autenticarse mediante una clave de Secure Shell (SSH) o mediante la contraseña de administrador de Windows en una conexión de Protocolo de escritorio remoto (RDP). Ambos métodos requieren la creación de una conexión intermedia, ya que actualmente no se puede conectar directamente al nodo de Windows de AKS. Tanto si se conecta a un nodo a través de SSH como rdP, debe especificar el nombre de usuario para los nodos de AKS. De forma predeterminada, este nombre de usuario es azureuser. Además de usar una conexión SSH o RDP, puede conectarse a un nodo de Windows desde el contenedor HostProcess.

  1. Cree hostprocess.yaml con el siguiente contenido. Reemplace por AKSWINDOWSNODENAME el nombre del nodo de Windows de 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. Ejecute el kubectl apply -f hostprocess.yaml comando para implementar el contenedor de Windows HostProcess en el nodo de Windows especificado.

  3. Ejecute el comando kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Ejecute los comandos de PowerShell dentro del contenedor HostProcess para acceder al nodo de Windows.

    Nota:

    Para acceder a los archivos del nodo de Windows, cambie la carpeta raíz al C:\ contenedor HostProcess.

Paso 3: Crear una captura de paquetes

Cuando está conectado al nodo de Windows a través de SSH o RDP, o desde el contenedor HostProcess, aparece un formulario del símbolo del sistema de Windows:

azureuser@akswin000000 C:\Users\azureuser>

Ahora abra un símbolo del sistema y escriba el comando de Network Shell (netsh) siguiente para capturar seguimientos (inicio de seguimiento de netsh). Este comando inicia el proceso de captura de paquetes.

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

La salida aparece similar al texto siguiente:

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

Mientras se ejecuta el seguimiento, replique el problema muchas veces. Esta acción garantiza que el problema se ha capturado dentro del volcado de TCP. Anote la marca de tiempo mientras replica el problema. Para detener la captura de paquetes cuando haya terminado, escriba 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.

Paso 4: Transferir la captura localmente

Después de completar la captura de paquetes, identifique el pod HostProcess para que pueda copiar el volcado localmente.

  1. En el equipo local, abra una segunda consola y, a continuación, ejecute el kubectl get pods comando para obtener una lista de pods:

    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
    

    El nombre predeterminado del pod hostProcess es hpc, como se muestra en la tercera línea.

  2. Copie los archivos de volcado tcp localmente mediante la ejecución de los siguientes comandos. Reemplace el nombre del pod por 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
    

    Los archivos .etl y .cab ahora estarán presentes en el directorio local.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.