Captura de información del sistema en tiempo real desde un clúster de AKS
En este artículo se describe el proceso de recopilación de información del sistema en tiempo real del clúster de Microsoft Azure Kubernetes Service (AKS) mediante Inspektor Gadget. El artículo contiene instrucciones paso a paso para instalar esta herramienta en el entorno de AKS. También explora ejemplos prácticos que muestran cómo Inspektor Gadget le ayuda a recopilar información valiosa para realizar una depuración eficaz de problemas reales.
Demostración
Para empezar, considere la siguiente demostración rápida. Supongamos que tiene que averiguar por qué se producen errores en las solicitudes DNS de una aplicación. Con Inspektor Gadget, puede capturar el tráfico DNS en el espacio de nombres de Kubernetes en el que se ejecuta la aplicación:
kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE K8S.NAMESPACE K8S.POD PID TID COMM QR TYPE QTYPE NAME RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
A partir de esta información, puede ver que las solicitudes DNS se dirigen al servidor DNS en la dirección 1.2.3.4
IP, pero el servidor nunca responde.
Ahora suponga que 1.2.3.4
no es la configuración predeterminada del servidor de nombres y sospecha que un proceso sospechoso está modificando la configuración en tiempo de ejecución. En estos tipos de casos, Inspektor Gadget va más allá del diagnóstico de DNS. También permite supervisar los procesos que acceden a archivos críticos (como /etc/resolv.conf) y tienen la intención de modificar esos archivos. Para usar esta característica de supervisión, filtre las marcas de la salida para mostrar cualquiera de los modos de acceso a archivos de escritura (O_WRONLY
para abrir solo para escribir o O_RDWR
para leer y escribir):
kubectl gadget trace open --namespace my-ns \
--filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
--output columns=+flags
K8S.NODE K8S.NAMESPACE K8S.POD K8S.CONTAINER PID COMM FD ERR PATH FLAGS
aks-agentpool-97833681-vmss000001 my-ns my-app my-app 1365052 vi 3 0 /etc/resolv.conf O_WRONLY|O_CREAT
¿Qué es Inspektor Gadget?
Inspektor Gadget es un marco diseñado para compilar, empaquetar, implementar y ejecutar herramientas dedicadas a la depuración e inspección de sistemas Linux y Kubernetes. Estas herramientas ("gadgets") se implementan como programas eBPF . Su objetivo principal es recopilar datos de kernel de bajo nivel para proporcionar información sobre escenarios de sistema específicos. El marco Inspektor Gadget administra la asociación de los datos recopilados mediante referencias de alto nivel, como los recursos de Kubernetes. Esta integración garantiza que existe una conexión sin problemas entre información de bajo nivel y su contexto de alto nivel correspondiente. La integración simplifica el proceso de solución de problemas y la recopilación de información relevante.
Gadgets
Inspektor Gadget proporciona un conjunto de herramientas integradas diseñadas para depurar y observar situaciones comunes en un sistema. Por ejemplo, mediante este tipo de gadgets, puede realizar un seguimiento de los siguientes eventos en el clúster:
- Creación de un proceso
- Acceso a archivos
- Actividad de red, como conexiones TCP o resolución DNS
Los gadgets presentan la información recopilada mediante diferentes mecanismos. Por ejemplo, algunos gadgets pueden informar sobre el estado del sistema en momentos específicos. Otros gadgets pueden informar cada vez que se produce un evento determinado o pueden proporcionar actualizaciones periódicas.
Estos son solo algunos ejemplos. La documentación oficial proporciona descripciones detalladas y ejemplos de cada gadget para que pueda determinar el gadget más adecuado para su caso de uso específico. Sin embargo, si encuentra un caso de uso que los gadgets existentes no cubren actualmente, Inspektor Gadget le permite ejecutar sus propios programas eBPF mediante el comando run. Dado que el marco inspektor Gadget controla la creación, el empaquetado y la implementación de sus programas personalizados, simplifica el proceso para sus requisitos únicos. Además, recopila metadatos de alto nivel para enriquecer los datos que recopila en el programa.
Casos de uso
Para complementar la demostración que se presenta al principio de este artículo, compilamos una lista de problemas y escenarios prácticos que muestran cómo Inspektor Gadget le ayuda a abordar los desafíos de depuración. Los ejemplos siguientes muestran el potencial de Inspektor Gadget. Pero las funcionalidades de esta herramienta se extienden más allá de estos escenarios. Esto hace que Inspektor Gadget sea un recurso inestimable para navegar por las complejidades de la depuración y la observabilidad de Kubernetes.
Área problemática | Síntomas | Solución de problemas |
---|---|---|
Aplicaciones intensivas en disco | Uso elevado de memoria o CPU, o preparación incoherente del nodo | Una aplicación puede participar de forma coherente en operaciones de lectura y escritura de disco, como un registro extenso. Mediante el uso de Inspektor Gadget, puede identificar en tiempo real qué contenedores generan más E/S de bloques. O, más concretamente, puede encontrar el contenedor que provoca más lecturas y escrituras en un archivo. |
"Siempre es DNS" | Alta latencia de aplicaciones, tiempos de espera o experiencia deficiente del usuario final | Con Inspektor Gadget, puede realizar un seguimiento de todas las consultas y respuestas DNS del clúster. En concreto, Inspektor Gadget proporciona la siguiente información que le ayuda a determinar si el DNS afecta al rendimiento de la aplicación:
|
Acceso al sistema de archivos | La aplicación se comporta mal o no puede funcionar correctamente | Es posible que la aplicación no pueda acceder a configuraciones, registros u otros archivos vitales específicos en el sistema de archivos. En estos escenarios, Inspektor Gadget permite realizar un seguimiento de todos los archivos abiertos dentro de pods para diagnosticar problemas de acceso. Siempre que la aplicación intente abrir un archivo, puede detectar la siguiente información:
Por ejemplo, si se produce un error en el intento de abrir el archivo debido al error 2 (ENOENT), es probable que la aplicación intente abrir un archivo que no existe. Esto significa que es posible que tenga un error tipográfico en el código o que el archivo esté disponible en otra ruta de acceso. |
Ejecución remota de código (RCE) | Ejecución de código no autorizado, como cryptojacking que es evidente en un uso elevado de la CPU durante los períodos de inactividad de la aplicación | Cuando los atacantes intentan realizar este tipo de ataque en un sistema, normalmente tienen que ejecutar el código mediante bash . Inspektor Gadget le permite realizar un seguimiento de la creación de nuevos procesos, especialmente procesos que implican comandos críticos, como bash . |
Instalación de Inspektor Gadget en un clúster de AKS
Implementación de Gadget de Inspektor con un solo clic
Al seleccionar el botón siguiente, se creará automáticamente un clúster de AKS y Inspektor Gadget se implementará en el clúster. Una vez finalizada la implementación, puede explorar todas las características de Inspektor Gadget en el entorno de shell proporcionado.
Instale Inspektor Gadget ejecutando el complemento "kubectl gadget"
En esta sección se describen los pasos para instalar Inspektor Gadget en el clúster de AKS mediante la ejecución del kubectl gadget
complemento. La instalación consta de dos partes:
Instalación del complemento en el
kubectl gadget
equipoEjecución del
kubectl gadget
complemento para instalar Inspektor Gadget en el clústerAdvertencia
Hay muchos mecanismos disponibles para implementar y usar Inspektor Gadget. Cada uno de estos mecanismos se adapta a determinados casos de uso y requisitos. Puede usar el complemento kubectl gadget para aplicar varios de estos mecanismos, pero no todos ellos. Por ejemplo, la implementación de Inspektor Gadget mediante el
kubectl gadget
complemento depende de la disponibilidad del servidor de API de Kubernetes. Si no puede depender de este componente porque su disponibilidad podría estar en peligro ocasionalmente, se recomienda evitar el uso del mecanismo dekubectl gadget
implementación. Para obtener más información sobre este y otros casos de uso, consulte la documentación de Inspektor Gadget.
Requisitos previos
La herramienta de línea de comandos kubectl de Kubernetes. Si tiene la CLI de Azure, puede ejecutar el comando az aks install-cli para instalar kubectl.
Un clúster de AKS. Si no tiene un clúster de AKS, cree uno mediante la CLI de Azure o mediante Azure Portal.
El administrador de paquetes krew para complementos en kubectl. Puede seguir la guía de inicio rápido de krew para instalar este administrador de paquetes.
Parte 1: Instalar el gadget del complemento kubectl en el equipo
Se recomienda usar krew
para instalar el kubectl gadget
complemento.
Nota:
Para instalar una versión específica o compilarla desde el origen, consulte Instalación de kubectl gadget en GitHub.
kubectl krew install gadget
Ahora, compruebe la instalación mediante la ejecución del version
comando :
kubectl gadget version
El version
comando muestra la versión del cliente (kubectl gadget
complemento), pero también le indica que aún no está instalado en el servidor (el clúster):
Client version: vX.Y.Z
Server version: not installed
Parte 2: Instalación de Inspektor Gadget en el clúster
El siguiente comando implementa el controlador DaemonSet .
Nota:
Hay varias opciones disponibles para personalizar la implementación, como se muestra en la lista siguiente:
- Uso de una imagen de contenedor específica
- Implementación en nodos específicos
- Implementación en un espacio de nombres personalizado
Para obtener información sobre estas opciones, consulte la sección Instalación en el clúster de la documentación oficial.
kubectl gadget deploy
Vuelva a ejecutar el comando para comprobar la version
instalación:
kubectl gadget version
Esta vez, el cliente y el servidor se muestran como instalados correctamente:
Client version: vX.Y.Z
Server version: vX.Y.Z
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.
Aviso de declinación de responsabilidades sobre la información de contacto de terceros
Microsoft proporciona información de contacto de otros proveedores para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la precisión de esta información de contacto de terceros.
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.