Compartir a través de


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.4IP, 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:

  • Consulta correcta
  • Si la respuesta contiene un error
  • Servidor de nombres que se usa para la búsqueda
  • Latencia de la consulta-respuesta
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:

  • Marcas que se usan para abrir el archivo (por ejemplo, O_RDONLY, O_WRONLY, O_RDWR, etc.)
  • Si el intento de apertura del archivo se realiza correctamente
  • Error devuelto (si se produce un error en el intento de apertura de archivos)

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.

Implementación de Inspektor Gadget en un clúster de AKS

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 equipo

  • Ejecución del kubectl gadget complemento para instalar Inspektor Gadget en el clúster

    Advertencia

    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 de kubectl gadgetimplementación. Para obtener más información sobre este y otros casos de uso, consulte la documentación de Inspektor Gadget.

Requisitos previos

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.