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 del mundo real.

Demostración

Para empezar, tenga en cuenta la siguiente demostración rápida. Supongamos que tiene que averiguar por qué se produce un error en las solicitudes DNS de una aplicación. Con Inspektor Gadget, puede capturar el tráfico DNS en el espacio de nombres 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, supongamos 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 este tipo de casos, Inspektor Gadget va más allá de los diagnósticos 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 escritura 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 depurar e inspeccionar 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 específicos del sistema. El marco de Trabajo de Inspektor Gadget administra la asociación de los datos recopilados mediante referencias de alto nivel, como recursos de Kubernetes. Esta integración garantiza que existe una conexión perfecta entre la 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 pertinente.

Gadgets

Inspektor Gadget proporciona un conjunto de herramientas integradas diseñadas para depurar y observar situaciones comunes en un sistema. Por ejemplo, mediante el uso de estos gadgets, puede realizar un seguimiento de los siguientes eventos en el clúster:

  • Creación de procesos
  • Acceso a archivos
  • Actividad de red, como conexiones TCP o resolución DNS

Los gadgets presentan la información que recopilan mediante diferentes mecanismos. Por ejemplo, algunos gadgets pueden informarle 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 encuentras un caso de uso que los gadgets existentes no cubren actualmente, Inspektor Gadget ofrece flexibilidad. Puede ejecutar scripts compatibles con el lenguaje de seguimiento de eBPF bpftrace mediante la ejecución del comando script. O bien, puede ejecutar sus propios programas eBPF ejecutando el comando run. Dado que el marco de Trabajo de Inspektor Gadget controla la creación, el empaquetado y la implementación de los 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, hemos compilado una lista de problemas y escenarios prácticos que muestran cómo Inspektor Gadget le ayuda a abordar los desafíos de depuración. En los ejemplos siguientes se muestra el potencial de Inspektor Gadget. Pero las funcionalidades de esta herramienta se extienden más allá de estos escenarios. Esto convierte a Inspektor Gadget en un recurso inestimable para navegar por las complejidades de la depuración y observabilidad de Kubernetes.

Área de problemas Síntomas Solución de problemas
Aplicaciones que consumen mucho disco Uso elevado de memoria o CPU, o preparación incoherente del nodo Una aplicación podría participar de forma coherente en operaciones de lectura y escritura de disco, como un registro extenso. Al usar Inspektor Gadget, puede identificar en tiempo real qué contenedores generan más E/S de bloque. 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 está afectando al rendimiento de la aplicación:

  • Consulta correcta
  • Si la respuesta contiene un error
  • El servidor de nombres que se usa para la búsqueda
  • Latencia de la respuesta de consulta
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 tales escenarios, Inspektor Gadget permite realizar un seguimiento de todos los archivos abiertos dentro de pods para diagnosticar problemas de acceso. Cada vez que la aplicación intenta 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 del archivo)

Por ejemplo, si se produce un error al intentar 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 una ruta de acceso diferente.

Ejecución remota de código (RCE) Ejecución de código no autorizada, como cryptojacking , que es evidente en el uso elevado de 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 los procesos que implican comandos críticos como bash.

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

One-Click implementación de Inspektor Gadget

Al seleccionar el botón siguiente, se creará automáticamente un clúster de AKS y se implementará Inspektor Gadget 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 mediante la ejecución del 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 kubectl gadget complemento en el 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 los requisitos y casos de uso específicos. Puede usar el complemento de gadget kubectl 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 puede verse en peligro en ocasiones, se recomienda evitar el uso del kubectl gadgetmecanismo de implementació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 del gadget kubectl en GitHub.

kubectl krew install gadget

Ahora, compruebe la instalación ejecutando el 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

Compruebe la instalación ejecutando el version comando de nuevo:

kubectl gadget version

Esta vez, se muestra que el cliente y el servidor están 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. Dicha información de contacto puede cambiar sin notificación previa. 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.