Partager via


Capturer des insights système en temps réel à partir d’un cluster AKS

Cet article décrit le processus de collecte des insights système en temps réel à partir de votre cluster Microsoft Azure Kubernetes Service (AKS) à l’aide d’Inspektor Gadget. L’article contient des instructions pas à pas pour installer cet outil sur votre environnement AKS. Il explore également des exemples pratiques qui montrent comment Inspektor Gadget vous aide à recueillir des informations précieuses pour effectuer un débogage efficace des problèmes réels.

Démo

Pour commencer, tenez compte de la démonstration rapide suivante. Supposons que vous devez déterminer pourquoi les requêtes DNS d’une application échouent. En utilisant Inspektor Gadget, vous pouvez capturer le trafic DNS dans l’espace de noms Kubernetes dans lequel votre application s’exécute :

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

À partir de ces informations, vous pouvez voir que les requêtes DNS sont dirigées vers le serveur DNS à l’adresse 1.2.3.4IP, mais que le serveur ne répond jamais.

Supposons maintenant que 1.2.3.4 ce n’est pas la configuration du serveur de noms par défaut et que vous pensez qu’un processus suspect modifie la configuration au moment de l’exécution. Dans ces types de cas, Inspektor Gadget dépasse les diagnostics DNS. Il vous permet également de surveiller les processus qui accèdent aux fichiers critiques (tels que /etc/resolv.conf) et ont l’intention de modifier ces fichiers. Pour utiliser cette fonctionnalité de surveillance, filtrez les indicateurs dans la sortie pour afficher l’un des modes d’accès aux fichiers d’écriture (O_WRONLY pour ouvrir uniquement pour l’écriture ou O_RDWR pour ouvrir uniquement pour la lecture et l’écriture) :

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’est-ce qu’Inspektor Gadget ?

Inspektor Gadget est un framework conçu pour la création, l’empaquetage, le déploiement et l’exécution d’outils dédiés au débogage et à l’inspection des systèmes Linux et Kubernetes. Ces outils (« gadgets ») sont implémentés en tant que programmes eBPF . Leur objectif principal est de collecter des données de noyau de bas niveau pour fournir des insights sur des scénarios système spécifiques. Le framework Inspektor Gadget gère l’association des données collectées à l’aide de références de haut niveau, telles que des ressources Kubernetes. Cette intégration garantit qu’une connexion transparente existe entre les insights de bas niveau et leur contexte de haut niveau correspondant. L’intégration simplifie le processus de résolution des problèmes et la collecte d’informations pertinentes.

Gadgets

Inspektor Gadget fournit un ensemble d’outils intégrés conçus pour déboguer et observer des situations courantes sur un système. Par exemple, en utilisant ces gadgets, vous pouvez suivre les événements suivants dans votre cluster :

  • Création de processus
  • Accès aux fichiers
  • Activité réseau, comme les connexions TCP ou la résolution DNS

Les gadgets présentent les informations qu’ils ont collectées à l’aide de différents mécanismes. Par exemple, certains gadgets peuvent vous informer de l’état du système à des moments spécifiques. D’autres gadgets peuvent signaler chaque fois qu’un événement donné se produit, ou ils peuvent fournir des mises à jour périodiques.

Et ce n’est que quelques exemples. La documentation officielle fournit des descriptions détaillées et des exemples de chaque gadget afin que vous puissiez déterminer le gadget le plus approprié pour votre cas d’usage spécifique. Toutefois, si vous trouvez un cas d’usage que les gadgets existants ne couvrent pas actuellement, Inspektor Gadget vous permet d’exécuter vos propres programmes eBPF à l’aide de la commande d’exécution. Étant donné que l’infrastructure Inspektor Gadget gère la génération, l’empaquetage et le déploiement de vos programmes personnalisés, elle simplifie le processus pour vos besoins uniques. En outre, il collecte des métadonnées de haut niveau pour enrichir les données que vous collectez dans votre programme.

Cas d’utilisation

Pour compléter la démonstration présentée au début de cet article, nous avons compilé une liste de problèmes et de scénarios pratiques qui montrent comment Inspektor Gadget vous aide à relever les défis de débogage. Les exemples suivants présentent le potentiel d’Inspektor Gadget. Mais les fonctionnalités de cet outil s’étendent au-delà de ces scénarios. Cela rend Inspektor Gadget un atout inestimable pour naviguer dans les complexités du débogage et de l’observabilité Kubernetes.

Domaine du problème Symptômes Dépannage
Applications gourmandes en disques Utilisation élevée de la mémoire ou du processeur ou préparation des nœuds incohérents Une application peut constamment s’engager dans des opérations de lecture/écriture sur disque, telles que la journalisation étendue. En utilisant Inspektor Gadget, vous pouvez identifier en temps réel quels conteneurs génèrent davantage d’E/S de blocs. Ou, plus précisément, vous pouvez trouver le conteneur qui provoque davantage de lectures et d’écritures dans un fichier.
« C’est toujours DNS » Latence élevée des applications, délais d’attente ou expérience utilisateur final médiocre

En utilisant Inspektor Gadget, vous pouvez suivre toutes les requêtes et réponses DNS dans le cluster. En particulier, Inspektor Gadget fournit les informations suivantes qui vous aident à déterminer si le DNS affecte les performances de votre application :

  • Réussite de la requête
  • Indique si la réponse contient une erreur
  • Serveur de noms utilisé pour la recherche
  • Latence de la réponse aux requêtes
Accès au système de fichiers L’application se comporte mal ou ne peut pas fonctionner correctement

L’application peut ne pas accéder à des configurations, journaux ou autres fichiers essentiels dans le système de fichiers. Dans de tels scénarios, Inspektor Gadget vous permet de suivre tous les fichiers ouverts à l’intérieur des pods pour diagnostiquer les problèmes d’accès. Chaque fois que votre application tente d’ouvrir un fichier, vous pouvez découvrir les informations suivantes :

  • Indicateurs utilisés pour ouvrir le fichier (par exemple, O_RDONLY, O_WRONLY, O_RDWR, et ainsi de suite)
  • Indique si la tentative d’ouverture de fichier réussit
  • Erreur retournée (en cas d’échec de la tentative d’ouverture de fichier)

Par exemple, si la tentative d’ouverture du fichier échoue en raison de l’erreur 2 (ENOENT), l’application tente probablement d’ouvrir un fichier qui n’existe pas. Cela signifie que vous pouvez avoir une faute de frappe dans le code, ou que le fichier est disponible dans un autre chemin d’accès.

Exécution de code à distance (RCE) Exécution de code non autorisée telle que le verrouillage de chiffrement évident dans une utilisation élevée du processeur pendant les périodes d’inactivité de l’application Lorsque les attaquants essaient de faire ce type d’attaque sur un système, ils doivent généralement exécuter le code à l’aide bashde . Inspektor Gadget vous permet de suivre la création de nouveaux processus, en particulier les processus qui impliquent des commandes critiques telles que bash.

Comment installer Inspektor Gadget dans un cluster AKS

Déploiement de gadgets inspektor en un clic

En sélectionnant le bouton suivant, un cluster AKS sera créé automatiquement et Inspektor Gadget sera déployé dans le cluster. Une fois le déploiement terminé, vous pouvez explorer toutes les fonctionnalités de Inspektor Gadget dans l’environnement shell fourni.

Déployer Inspektor Gadget dans un cluster AKS

Installez Inspektor Gadget en exécutant le plug-in « kubectl gadget »

Cette section décrit les étapes d’installation d’Inspektor Gadget dans votre cluster AKS en exécutant le kubectl gadget plug-in. L’installation se compose de deux parties :

  • Installation du kubectl gadget plug-in sur votre ordinateur

  • Exécution du kubectl gadget plug-in pour installer Inspektor Gadget dans le cluster

    Avertissement

    De nombreux mécanismes sont disponibles pour déployer et utiliser Inspektor Gadget. Chacun de ces mécanismes est adapté aux cas d’usage et exigences spécifiques. Vous pouvez utiliser le plug-in kubectl gadget pour appliquer plusieurs de ces mécanismes, mais pas tous. Par exemple, le déploiement d’Inspektor Gadget à l’aide du kubectl gadget plug-in dépend de la disponibilité du serveur d’API Kubernetes. Si vous ne pouvez pas dépendre d’un tel composant, car sa disponibilité peut être parfois compromise, nous vous recommandons d’éviter d’utiliser le mécanisme de kubectl gadgetdéploiement. Pour plus d’informations sur ce cas d’usage et d’autres cas d’usage, consultez la documentation inspektor Gadget.

Prerequisites

Partie 1 : Installer le gadget de plug-in kubectl sur votre ordinateur

Nous vous recommandons d’installer krew le kubectl gadget plug-in.

Note

Pour installer une version spécifique ou la compiler à partir de la source, consultez Installer kubectl gadget sur GitHub.

kubectl krew install gadget

À présent, vérifiez l’installation en exécutant la version commande :

kubectl gadget version

La version commande vous montre la version du client (kubectl gadget plug-in), mais elle vous indique également qu’elle n’est pas encore installée sur le serveur (le cluster) :

Client version: vX.Y.Z
Server version: not installed

Partie 2 : Installer Inspektor Gadget dans le cluster

La commande suivante déploie le contrôleur DaemonSet .

Note

Plusieurs options sont disponibles pour personnaliser le déploiement, comme indiqué dans la liste suivante :

  • Utiliser une image conteneur spécifique
  • Déployer sur des nœuds spécifiques
  • Déployer dans un espace de noms personnalisé

Pour en savoir plus sur ces options, consultez la section Installation dans la section de cluster de la documentation officielle.

kubectl gadget deploy

Vérifiez l’installation en exécutant à nouveau la version commande :

kubectl gadget version

Cette fois, le client et le serveur sont tous deux correctement installés :

Client version: vX.Y.Z
Server version: vX.Y.Z

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Exclusion de responsabilité sur les coordonnées externes

Microsoft fournit des informations de contacts externes afin de vous aider à obtenir un support technique sur ce sujet. Ces informations de contact peuvent changer sans préavis. Microsoft ne garantit pas l’exactitude des informations concernant les sociétés externes.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.