Comparteix a través de


Captura de un volcado TCP desde un nodo de Linux 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 Linux en un clúster de AKS y, a continuación, descargar la captura en la máquina local.

Requisitos previos

Nota:

Puede automatizar la captura TCP a través de un gráfico de Helm, que se puede ejecutar en segundo plano como daemonSet. Para obtener más información, consulte esta herramienta personalizada de GitHub para capturar volcados de TCP o siga los pasos descritos en las secciones siguientes.

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
aks-agentpool-34796016-vmss000000   Ready    agent   45h   v1.20.9   10.240.1.81    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002   Ready    agent   45h   v1.20.9   10.240.2.47    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure

Paso 2: Conexión a un nodo de Linux

El siguiente paso consiste en establecer una conexión con el nodo de clúster de AKS desde el que desea capturar el seguimiento de red. Para más información, vea Creación de una conexión de shell interactiva a un nodo de Linux.

Paso 3: Asegúrese de que tcpdump está instalado

Después de establecer una conexión con el nodo linux de AKS, compruebe que la herramienta tcpdump se ha instalado previamente en un nodo mediante la ejecución tcpdump --versionde . Si tcpdump no se ha instalado, aparece el texto de error siguiente:

# tcpdump --version
bash: tcpdump: command not found

A continuación, instale tcpdump en el pod mediante la ejecución de la utilidad de control de paquetes de advanced Package Tool, apt-get:

apt-get update && apt-get install tcpdump

Si tcpdump está instalado, aparece algo similar al texto siguiente:

# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018

Paso 4: Crear una captura de paquetes

Para capturar el volcado de memoria, ejecute el comando tcpdump de la siguiente manera:

# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6

Nota:

La ejecución de tcpdump sin usar parámetros de filtrado puede aumentar significativamente el tamaño del archivo de captura de paquetes (PCAP), especialmente para largas ejecuciones. Por lo tanto, se recomienda agregar filtros, como origen, destino y puerto. Por ejemplo:

  • tcpdump dst 192.168.1.100
  • tcpdump dst host.mydomain.com
  • tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet

Mientras se ejecuta el seguimiento, replique el problema muchas veces. Esta acción garantiza que el problema se captura dentro del volcado de TCP. Anote la marca de tiempo mientras replica el problema. Para detener la captura de paquetes cuando haya terminado, presione Ctrl+C:

# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel

Paso 5: Transferir la captura localmente

Después de completar la captura de paquetes, identifique el pod auxiliar para que pueda copiar el volcado localmente. Abra una segunda consola y, a continuación, obtenga una lista de pods mediante la ejecución kubectl get podsde , como se muestra a continuación.

$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   0          3m29s
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   0          3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2   1/1     Running   0          60s

El pod auxiliar tiene un prefijo de node-debugger-aks, como se muestra en la tercera fila. Reemplace el nombre del pod y, a continuación, ejecute el siguiente comando kubectl. Estos comandos recuperan la captura de paquetes para el nodo de Linux.

kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap

Nota:

Si el chroot /host comando se usó al escribir el pod de depuración, agregue /host antes /capture.cap para el archivo de origen.

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

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.