Share via


Realtime systeem insights van een AKS-cluster vastleggen

In dit artikel wordt het proces besproken van het verzamelen van realtime systeem insights van uw Microsoft Azure Kubernetes Service (AKS)-cluster met behulp van Inspektor Gadget. Het artikel bevat stapsgewijze instructies voor het installeren van dit hulpprogramma in uw AKS-omgeving. Het verkent ook praktische voorbeelden die laten zien hoe Inspektor Gadget u helpt bij het verzamelen van waardevolle informatie voor het effectief opsporen van problemen in de praktijk.

Demo

Bekijk eerst de volgende snelle demo. Stel dat u moet uitzoeken waarom de DNS-aanvragen van een toepassing mislukken. Met behulp van Inspektor Gadget kunt u het DNS-verkeer vastleggen in de Kubernetes-naamruimte waarin uw toepassing wordt uitgevoerd:

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

Op basis van deze informatie kunt u zien dat de DNS-aanvragen worden omgeleid naar de DNS-server op het IP-adres 1.2.3.4, maar dat de server nooit reageert.

Stel dat dit 1.2.3.4 niet de standaardconfiguratie van de naamserver is en u vermoedt dat een verdacht proces de configuratie tijdens runtime wijzigt. In dit soort gevallen gaat Inspektor Gadget verder dan DNS-diagnostische gegevens. Het stelt u ook in staat om processen te bewaken die toegang hebben tot kritieke bestanden (zoals /etc/resolv.conf) en de bedoeling hebben om deze bestanden te wijzigen. Als u deze bewakingsfunctie wilt gebruiken, filtert u de vlaggen in de uitvoer om een van de toegangsmodi voor het schrijven van bestanden weer te geven (O_WRONLY om alleen te openen voor schrijven of O_RDWR om te openen voor lezen en schrijven):

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

Wat is Inspektor Gadget?

Inspektor Gadget is een framework dat is ontworpen voor het bouwen, verpakken, implementeren en uitvoeren van hulpprogramma's die zijn bedoeld voor het opsporen en inspecteren van Linux- en Kubernetes-systemen. Deze hulpprogramma's (gadgets) worden geïmplementeerd als eBPF-programma's . Hun primaire doel is het verzamelen van kernelgegevens op laag niveau om inzicht te krijgen in specifieke systeemscenario's. Het Inspektor Gadget-framework beheert de koppeling van de verzamelde gegevens met behulp van verwijzingen op hoog niveau, zoals Kubernetes-resources. Deze integratie zorgt ervoor dat er een naadloze verbinding bestaat tussen inzichten op laag niveau en de bijbehorende context op hoog niveau. De integratie stroomlijnt het probleemoplossingsproces en het verzamelen van relevante informatie.

Gadgets

Inspektor Gadget biedt een set ingebouwde hulpprogramma's die zijn ontworpen om fouten op te sporen en veelvoorkomende situaties op een systeem te observeren. Door dergelijke gadgets te gebruiken, kunt u bijvoorbeeld de volgende gebeurtenissen in uw cluster traceren:

  • Proces maken
  • Bestandstoegang
  • Netwerkactiviteit, zoals TCP-verbindingen of DNS-omzetting

De gadgets bevatten de informatie die ze hebben verzameld met behulp van verschillende mechanismen. Sommige gadgets kunnen u bijvoorbeeld op specifieke tijdstippen informeren over de systeemstatus. Andere gadgets kunnen elke keer worden weergegeven wanneer een bepaalde gebeurtenis plaatsvindt, of ze kunnen periodieke updates bieden.

Dit zijn slechts enkele voorbeelden. De officiële documentatie bevat gedetailleerde beschrijvingen en voorbeelden van elke gadget, zodat u de meest geschikte gadget voor uw specifieke gebruiksscenario kunt bepalen. Als u echter een use-case vindt die momenteel niet door de bestaande gadgets wordt behandeld, biedt Inspektor Gadget flexibiliteit. U kunt scripts uitvoeren die compatibel zijn met de eBPF-traceringstaal bpftrace door de scriptopdracht uit te voeren. U kunt ook uw eigen eBPF-programma's uitvoeren door de opdracht uitvoeren. Omdat het Inspektor Gadget-framework het bouwen, verpakken en implementeren van uw aangepaste programma's afhandelt, stroomlijnt het het proces voor uw unieke vereisten. Het verzamelt ook metagegevens op hoog niveau om de gegevens te verrijken die u in uw programma verzamelt.

Gebruiksvoorbeelden

Als aanvulling op de demo die aan het begin van dit artikel wordt gepresenteerd, hebben we een lijst met problemen en praktische scenario's samengesteld die laten zien hoe Inspektor Gadget u helpt bij het oplossen van fouten. In de volgende voorbeelden ziet u het potentieel van Inspektor Gadget. Maar de mogelijkheden van dit hulpprogramma gaan verder dan deze scenario's. Dit maakt Inspektor Gadget van onschatbare waarde voor het navigeren door de complexiteit van Kubernetes-foutopsporing en waarneembaarheid.

Probleemgebied Symptomen Probleemoplossing
Schijfintensieve toepassingen Hoog geheugen- of CPU-gebruik of inconsistente knooppuntgereedheid Een toepassing kan consistent schijflees-/schrijfbewerkingen uitvoeren, zoals uitgebreide logboekregistratie. Met behulp van Inspektor Gadget kunt u in realtime bepalen welke containers meer blok-I/O genereren. Of, meer specifiek, kunt u de container vinden die meer lees- en schrijfbewerkingen in een bestand veroorzaakt.
"Het is altijd DNS" Hoge toepassingslatentie, time-outs of slechte ervaring voor eindgebruikers

Met behulp van Inspektor Gadget kunt u alle DNS-query's en antwoorden in het cluster traceren. Inspektor Gadget biedt met name de volgende informatie waarmee u kunt bepalen of de DNS de prestaties van uw toepassing beïnvloedt:

  • Query geslaagd
  • Of het antwoord een fout bevat
  • De naamserver die wordt gebruikt voor de opzoekactie
  • De latentie van queryreacties
Bestandssysteemtoegang Toepassing misdraagt of werkt niet goed

De toepassing heeft mogelijk geen toegang tot specifieke configuraties, logboeken of andere belangrijke bestanden in het bestandssysteem. In dergelijke scenario's kunt u met Inspektor Gadget alle geopende bestanden in pods traceren om toegangsproblemen vast te stellen. Wanneer uw toepassing probeert een bestand te openen, kunt u de volgende informatie detecteren:

  • De vlaggen die worden gebruikt om het bestand te openen (bijvoorbeeld O_RDONLY, O_WRONLY, O_RDWR, enzovoort)
  • Of de poging om het bestand te openen is geslaagd
  • De geretourneerde fout (als de poging om het bestand te openen mislukt)

Als de poging om het bestand te openen bijvoorbeeld mislukt vanwege fout 2 (ENOENT), probeert de toepassing waarschijnlijk een bestand te openen dat niet bestaat. Dit betekent dat u mogelijk een typefout in de code hebt of dat het bestand beschikbaar is in een ander pad.

Externe uitvoering van code (RCE) Niet-geautoriseerde code-uitvoering, zoals cryptojacking , dat duidelijk is bij hoog CPU-gebruik tijdens niet-actieve perioden van toepassingen Wanneer aanvallers dit soort aanvallen op een systeem proberen uit te voeren, moeten ze de code meestal uitvoeren met behulp van bash. Met Inspektor Gadget kunt u het maken van nieuwe processen traceren, met name processen waarbij kritieke opdrachten zijn betrokken, zoals bash.

Inspektor Gadget installeren in een AKS-cluster

One-Click Inspektor Gadget-implementatie

Als u de volgende knop selecteert, wordt automatisch een AKS-cluster gemaakt en wordt Inspektor Gadget geïmplementeerd in het cluster. Nadat de implementatie is voltooid, kunt u alle functies van Inspektor Gadget verkennen in de opgegeven shell-omgeving.

Inspektor Gadget implementeren in een AKS-cluster

Installeer Inspektor Gadget door de invoegtoepassing 'kubectl gadget' uit te voeren

In deze sectie worden de stappen beschreven voor het installeren van Inspektor Gadget in uw AKS-cluster door de kubectl gadget invoegtoepassing uit te voeren. De installatie bestaat uit twee delen:

  • kubectl gadget De invoegtoepassing installeren op uw computer

  • kubectl gadget De invoegtoepassing uitvoeren om Inspektor Gadget in het cluster te installeren

    Waarschuwing

    Er zijn veel mechanismen beschikbaar voor het implementeren en gebruiken van Inspektor Gadget. Elk van deze mechanismen is afgestemd op specifieke gebruiksscenario's en vereisten. U kunt de invoegtoepassing kubectl-gadget gebruiken om verschillende van deze mechanismen toe te passen, maar niet allemaal. Het implementeren van Inspektor Gadget met behulp van de kubectl gadget invoegtoepassing is bijvoorbeeld afhankelijk van de beschikbaarheid van de Kubernetes-API-server. Als u niet afhankelijk kunt zijn van een dergelijk onderdeel omdat de beschikbaarheid ervan af en toe kan worden aangetast, raden we u aan het kubectl gadgetimplementatiemechanisme te vermijden. Zie de Documentatie voor Inspektor Gadget voor meer informatie over deze en andere use cases.

Vereisten

Deel 1: Installeer het gadget kubectl-invoegtoepassing op uw computer

U wordt aangeraden krew de kubectl gadget invoegtoepassing te installeren.

Opmerking

Zie Kubectl-gadget installeren op GitHub om een specifieke release te installeren of te compileren vanuit de bron.

kubectl krew install gadget

Controleer nu de installatie door de opdracht uit te version voeren:

kubectl gadget version

De version opdracht toont u de versie van de client (kubectl gadget invoegtoepassing), maar geeft ook aan dat deze nog niet is geïnstalleerd op de server (het cluster):

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

Deel 2: Inspektor Gadget installeren in het cluster

Met de volgende opdracht wordt de DaemonSet-controller geïmplementeerd.

Opmerking

Er zijn verschillende opties beschikbaar om de implementatie aan te passen, zoals wordt weergegeven in de volgende lijst:

  • Een specifieke containerinstallatiekopieën gebruiken
  • Implementeren op specifieke knooppunten
  • Implementeren in een aangepaste naamruimte

Zie de sectie Installeren in het cluster van de officiële documentatie voor meer informatie over deze opties.

kubectl gadget deploy

Controleer de installatie door de version opdracht opnieuw uit te voeren:

kubectl gadget version

Deze keer wordt weergegeven dat de client en de server beide correct zijn geïnstalleerd:

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

Disclaimerinformatie van derden

De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.

Disclaimerinformatie van derden

Microsoft verstrekt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert de juistheid van contactgegevens van derden niet.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.