Samla in systeminsikter i realtid från ett AKS-kluster

I den här artikeln beskrivs processen för att samla in systeminsikter i realtid från ditt Microsoft Azure Kubernetes Service-kluster (AKS) med hjälp av Inspektor Gadget. Artikeln innehåller stegvisa instruktioner för att installera det här verktyget i AKS-miljön. Den utforskar också praktiska exempel som visar hur Inspektor Gadget hjälper dig att samla in värdefull information för att utföra effektiv felsökning av verkliga problem.

Demo

Börja med följande snabbdemo. Anta att du måste ta reda på varför DNS-begäranden från ett program misslyckas. Genom att använda Inspektor Gadget kan du avbilda DNS-trafiken i Kubernetes-namnområdet där programmet körs:

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

Med den här informationen kan du se att DNS-begäranden dirigeras till DNS-servern på IP-adressen 1.2.3.4, men servern svarar aldrig.

Anta nu att det 1.2.3.4 inte är standardkonfigurationen för namnservern, och du misstänker att en misstänkt process ändrar konfigurationen vid körning. I den här typen av fall går Inspektor Gadget utöver DNS-diagnostik. Det gör också att du kan övervaka processer som har åtkomst till viktiga filer (till exempel /etc/resolve.conf) och har för avsikt att ändra dessa filer. Om du vill använda den här övervakningsfunktionen filtrerar du flaggorna i utdata för att visa något av skrivlägena för filåtkomst (O_WRONLY för att endast öppna för skrivning eller O_RDWR för att öppna för läsning och skrivning):

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

Vad är Inspektor Gadget?

Inspektor Gadget är ett ramverk som är utformat för att skapa, paketera, distribuera och köra verktyg som är dedikerade för att felsöka och inspektera Linux- och Kubernetes-system. Dessa verktyg ("gadgets") implementeras som eBPF-program . Deras primära mål är att samla in kerneldata på låg nivå för att ge insikter om specifika systemscenarier. Ramverket Inspektor Gadget hanterar associationen av insamlade data med hjälp av referenser på hög nivå, till exempel Kubernetes-resurser. Den här integreringen ser till att det finns en sömlös anslutning mellan insikter på låg nivå och motsvarande högnivåkontext. Integreringen effektiviserar felsökningsprocessen och insamlingen av relevant information.

Prylar

Inspektor Gadget innehåller en uppsättning inbyggda verktyg som är utformade för att felsöka och observera vanliga situationer i ett system. Genom att till exempel använda sådana gadgetar kan du spåra följande händelser i klustret:

  • Skapande av process
  • Filåtkomst
  • Nätverksaktivitet, till exempel TCP-anslutningar eller DNS-matchning

Gadgetarna visar den information som de samlade in med hjälp av olika mekanismer. Vissa gadgetar kan till exempel informera dig om systemstatusen vid specifika tidpunkter. Andra gadgetar kan rapportera varje gång en viss händelse inträffar, eller så kan de tillhandahålla regelbundna uppdateringar.

Det här är bara några exempel. Den officiella dokumentationen innehåller detaljerade beskrivningar och exempel på varje gadget så att du kan fastställa den lämpligaste gadgeten för ditt specifika användningsfall. Men om du hittar ett användningsfall som de befintliga gadgetarna för närvarande inte täcker, erbjuder Inspektor Gadget flexibilitet. Du kan köra skript som är kompatibla med eBPF-spårningsspråket bpftrace genom att köra skriptkommandot. Du kan också köra egna eBPF-program genom att köra körningskommandot. Eftersom Inspektor Gadget-ramverket hanterar skapandet, paketeringen och distributionen av dina anpassade program, effektiviserar det processen för dina unika krav. Dessutom samlar den in högnivåmetadata för att utöka de data som du samlar in i ditt program.

Användningsfall

För att komplettera demonstrationen som presenteras i början av den här artikeln sammanställde vi en lista över problem och praktiska scenarier som visar hur Inspektor Gadget hjälper dig att hantera felsökningsutmaningar. I följande exempel visas potentialen hos Inspektor Gadget. Men funktionerna i det här verktyget sträcker sig bortom dessa scenarier. Detta gör Inspektor Gadget till en ovärderlig tillgång för att navigera i komplexiteten i Kubernetes felsökning och observerbarhet.

Problemområde Symptom Felsökning
Diskintensiva program Hög minnes- eller CPU-användning eller inkonsekvent nodberedskap Ett program kan konsekvent delta i läs-/skrivåtgärder för diskar, till exempel omfattande loggning. Genom att använda Inspektor Gadget kan du identifiera i realtid vilka containrar som genererar mer block-I/O. Eller mer specifikt kan du hitta containern som orsakar fler läsningar och skrivningar i en fil.
"Det är alltid DNS" Hög programfördröjning, tidsgränser eller dålig slutanvändarupplevelse

Genom att använda Inspektor Gadget kan du spåra alla DNS-frågor och svar i klustret. I synnerhet innehåller Inspektor Gadget följande information som hjälper dig att avgöra om DNS påverkar programmets prestanda:

  • Frågan lyckades
  • Om svaret innehåller ett fel
  • Namnservern som används för sökningen
  • Svarstid för frågor och svar
Åtkomst till filsystem Programmet fungerar felaktigt eller fungerar inte korrekt

Programmet kanske inte kan komma åt specifika konfigurationer, loggar eller andra viktiga filer i filsystemet. I sådana scenarier kan du med Inspektor Gadget spåra alla öppnade filer i poddar för att diagnostisera åtkomstproblem. När ditt program försöker öppna en fil kan du identifiera följande information:

  • Flaggorna som används för att öppna filen (till exempel O_RDONLY, O_WRONLY, O_RDWR och så vidare)
  • Om filöppningsförsöket lyckas
  • Det returnerade felet (om filöppningsförsöket misslyckas)

Om försöket att öppna filen till exempel misslyckas på grund av fel 2 (ENOENT) försöker programmet förmodligen öppna en fil som inte finns. Det innebär att du kan ha ett skrivfel i koden eller att filen är tillgänglig i en annan sökväg.

Fjärrkörning av kod (RCE) Otillåten kodkörning, till exempel kryptokapning som är uppenbar i hög CPU-användning under inaktiva programperioder När angripare försöker utföra den här typen av angrepp på ett system måste de vanligtvis köra koden med hjälp bashav . Med Inspektor Gadget kan du spåra skapandet av nya processer, särskilt processer som omfattar kritiska kommandon som bash.

Så här installerar du Inspektor Gadget i ett AKS-kluster

One-Click Inspektor Gadget-distribution

Genom att välja följande knapp skapas ett AKS-kluster automatiskt och Inspektor Gadget distribueras i klustret. När distributionen är klar kan du utforska alla funktioner i Inspektor Gadget i den angivna gränssnittsmiljön.

Distribuera inspektor-gadget i ett AKS-kluster

Installera Inspektor Gadget genom att köra plugin-programmet "kubectl gadget"

I det här avsnittet beskrivs stegen för att installera Inspektor Gadget i AKS-klustret genom att köra kubectl gadget plugin-programmet. Installationen består av två delar:

  • kubectl gadget Installera plugin-programmet på datorn

  • kubectl gadget Köra plugin-programmet för att installera Inspektor Gadget i klustret

    Varning

    Det finns många mekanismer för att distribuera och använda Inspektor Gadget. Var och en av dessa mekanismer är skräddarsydd för specifika användningsfall och krav. Du kan använda plugin-programmet kubectl gadget för att tillämpa flera av dessa mekanismer, men inte alla. Distributionen av Inspektor Gadget med hjälp kubectl gadget av plugin-programmet beror till exempel på tillgängligheten för Kubernetes API-servern. Om du inte kan vara beroende av en sådan komponent eftersom tillgängligheten ibland kan komprometteras rekommenderar vi att du undviker att använda distributionsmekanismen kubectl gadget. Mer information om detta och andra användningsfall finns i dokumentationen för Inspektor Gadget.

Förutsättningar

Del 1: Installera kubectl-plugin-gadgeten på datorn

Vi rekommenderar att du använder krew för att installera kubectl gadget plugin-programmet.

Obs!

Information om hur du installerar en specifik version eller kompilerar den från källan finns i Installera kubectl-gadget på GitHub.

kubectl krew install gadget

Kontrollera nu installationen genom att version köra kommandot :

kubectl gadget version

Kommandot version visar versionen av klienten (kubectl gadget plugin-programmet), men visar även att den inte är installerad än på servern (klustret):

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

Del 2: Installera Inspektor Gadget i klustret

Följande kommando distribuerar DaemonSet-kontrollanten .

Obs!

Det finns flera alternativ för att anpassa distributionen, som du ser i följande lista:

  • Använda en specifik containeravbildning
  • Distribuera till specifika noder
  • Distribuera till ett anpassat namnområde

Mer information om de här alternativen finns i avsnittet Installera i klustret i den officiella dokumentationen.

kubectl gadget deploy

Kontrollera installationen genom att version köra kommandot igen:

kubectl gadget version

Den här gången visas både klienten och servern vara korrekt installerade:

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

Ansvarsfriskrivning för information från tredje part

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.

Ansvarsfriskrivning för tredje part

Microsoft tillhandahåller kontaktinformation från tredje part som hjälper dig att hitta ytterligare information om det här ämnet. Denna kontaktinformation kan ändras utan föregående meddelande. Microsoft garanterar inte att kontaktinformation från tredje part är korrekt.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.