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
- La herramienta kubectl de Kubernetes. Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
- 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.
- La herramienta de línea de comandos tcpdump instalada en el nodo Linux.
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 --version
de . 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 pods
de , 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.