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.4
IP , 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:
|
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:
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.
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 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 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 delkubectl gadget
mecanismo 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
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 el Azure Portal.
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 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.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de