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
- CLI de Azure, versión 2.0.59 o posterior. Puede abrir Azure Cloud Shell en el explorador web para escribir comandos de la CLI de Azure. O bien, instale o actualice la CLI de Azure en el equipo local. Para buscar la versión instalada en el equipo, ejecute
az --version
. - Un clúster de AKS. Si no tiene un clúster de AKS, cree uno mediante la CLI de Azure o a través de Azure Portal.
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.
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
Ejecute el
kubectl apply -f hostprocess.yaml
comando para implementar el contenedor de Windows HostProcess en el nodo de Windows especificado.Ejecute el comando
kubectl exec -it [HPC-POD-NAME] -- powershell
.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.
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.
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.