Freigeben über


Erfassen von Echtzeit-Systemerkenntnissen aus einem AKS-Cluster

In diesem Artikel wird der Prozess der Erfassung von Echtzeit-Systemeinblicken aus Ihrem Microsoft Azure Kubernetes Service (AKS)-Cluster mithilfe von Inspektor Gadget erläutert. Der Artikel enthält schrittweise Anleitungen zum Installieren dieses Tools in Ihrer AKS-Umgebung. Außerdem werden praktische Beispiele untersucht, die zeigen, wie Inspektor Gadget Ihnen hilft, wertvolle Informationen zu sammeln, um effektives Debuggen von realen Problemen zu erledigen.

Demo

Betrachten Sie zunächst die folgende kurze Demo. Angenommen, Sie müssen herausfinden, warum die DNS-Anforderungen einer Anwendung fehlschlagen. Mithilfe von Inspektor Gadget können Sie den DNS-Datenverkehr im Kubernetes-Namespace erfassen, in dem Ihre Anwendung ausgeführt wird:

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

Anhand dieser Informationen können Sie sehen, dass die DNS-Anforderungen an den DNS-Server an die IP-Adresse 1.2.3.4weitergeleitet werden, der Server antwortet jedoch nie.

Angenommen, die 1.2.3.4 Standardnamenserverkonfiguration ist nicht, und Sie vermuten, dass ein verdächtiger Prozess die Konfiguration zur Laufzeit ändert. In diesen Fällen geht Inspektor Gadget über DNS-Diagnose hinaus. Außerdem können Sie Prozesse überwachen, die auf kritische Dateien zugreifen (z . B. /etc/resolv.conf) und die Absicht haben, diese Dateien zu ändern. Um dieses Überwachungsfeature zu verwenden, filtern Sie die Flags in der Ausgabe, um einen der Schreibdateizugriffsmodi anzuzeigen (O_WRONLY nur zum Schreiben öffnen oder O_RDWR zum Lesen und Schreiben öffnen):

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

Was ist Inspektor Gadget?

Inspektor Gadget ist ein Framework, das für das Erstellen, Packen, Bereitstellen und Ausführen von Tools entwickelt wurde, die für das Debuggen und Prüfen von Linux- und Kubernetes-Systemen vorgesehen sind. Diese Tools ("Gadgets") werden als eBPF-Programme implementiert. Ihr Hauptziel ist es, Kerneldaten auf niedriger Ebene zu sammeln, um Einblicke in bestimmte Systemszenarien zu liefern. Das Inspektor Gadget Framework verwaltet die Zuordnung der gesammelten Daten mithilfe von allgemeinen Verweisen, z. B. Kubernetes-Ressourcen. Diese Integration stellt sicher, dass eine nahtlose Verbindung zwischen Erkenntnissen auf niedriger Ebene und dem entsprechenden allgemeinen Kontext besteht. Die Integration optimiert den Problembehandlungsprozess und die Sammlung relevanter Informationen.

Apparate

Inspektor Gadget bietet eine Reihe von integrierten Tools, die entwickelt wurden, um häufige Situationen auf einem System zu debuggen und zu beobachten. Beispielsweise können Sie mithilfe solcher Gadgets die folgenden Ereignisse in Ihrem Cluster nachverfolgen:

  • Prozesserstellung
  • Zugriff auf Dateien
  • Netzwerkaktivität, z. B. TCP-Verbindungen oder DNS-Auflösung

Die Gadgets stellen die Informationen dar, die sie mithilfe verschiedener Mechanismen gesammelt haben. Beispielsweise können einige Gadgets Sie zu bestimmten Zeiten über den Systemstatus informieren. Andere Gadgets können jedes Mal melden, wenn ein bestimmtes Ereignis eintritt, oder sie können regelmäßige Updates bereitstellen.

Und das sind nur einige Beispiele. Die offizielle Dokumentation enthält detaillierte Beschreibungen und Beispiele für jedes Gadget, damit Sie das am besten geeignete Gadget für Ihren spezifischen Anwendungsfall ermitteln können. Wenn Sie jedoch einen Anwendungsfall finden, den die vorhandenen Gadgets derzeit nicht abdecken, können Sie mit dem Befehl "Ausführen" Ihre eigenen eBPF-Programme ausführen. Da das Inspektor Gadget-Framework das Erstellen, Verpacken und Bereitstellen Ihrer benutzerdefinierten Programme verarbeitet, optimiert es den Prozess für Ihre individuellen Anforderungen. Außerdem werden allgemeine Metadaten gesammelt, um die Daten zu erweitern, die Sie in Ihrem Programm sammeln.

Anwendungsfälle

Um die Demo zu ergänzen, die zu Beginn dieses Artikels vorgestellt wird, haben wir eine Liste der Probleme und praktischen Szenarien zusammengestellt, die zeigen, wie Inspektor Gadget Ihnen bei der Bewältigung von Debugging-Herausforderungen hilft. Die folgenden Beispiele zeigen das Potenzial von Inspektor Gadget. Die Funktionen dieses Tools reichen jedoch über diese Szenarien hinaus. Dies macht Inspektor Gadget zu einem unschätzbaren Gut für die Navigation in den Komplexitäten von Kubernetes Debugging und Observability.

Problembereich Problembeschreibung Problembehandlung
Datenträgerintensive Anwendungen Hohe Arbeitsspeicher- oder CPU-Auslastung oder inkonsistente Knotenbereitschaft Eine Anwendung kann sich konsistent mit Lese-/Schreibvorgängen auf datenträgern, z. B. einer umfangreichen Protokollierung, befassen. Mithilfe von Inspektor Gadget können Sie in Echtzeit erkennen, welche Container mehr Block-E/A generieren. Oder genauer gesagt können Sie den Container finden, der mehr Lese- und Schreibvorgänge in eine Datei verursacht.
"Es ist immer DNS" Hohe Anwendungslatenz, Timeouts oder schlechte Endbenutzererfahrung

Mithilfe des Inspektor Gadgets können Sie alle DNS-Abfragen und -Antworten im Cluster nachverfolgen. Insbesondere stellt Inspektor Gadget die folgenden Informationen bereit, mit denen Sie ermitteln können, ob sich das DNS auf die Leistung Ihrer Anwendung auswirkt:

  • Abfrageerfolg
  • Gibt an, ob die Antwort einen Fehler enthält.
  • Der Nameserver, der für die Suche verwendet wird
  • Die Latenz der Abfrageantwort
Dateisystemzugriff Anwendungsfehler oder kann nicht ordnungsgemäß funktionieren

Die Anwendung kann möglicherweise nicht auf bestimmte Konfigurationen, Protokolle oder andere wichtige Dateien im Dateisystem zugreifen. In solchen Szenarien können Sie mit dem Inspektor Gadget alle geöffneten Dateien innerhalb von Pods nachverfolgen, um Zugriffsprobleme zu diagnostizieren. Wenn Ihre Anwendung versucht, eine Datei zu öffnen, können Sie die folgenden Informationen ermitteln:

  • Die Flags, die zum Öffnen der Datei verwendet werden (z . B. O_RDONLY, O_WRONLY, O_RDWR usw.)
  • Gibt an, ob der Dateiöffnungsversuch erfolgreich ist.
  • Der zurückgegebene Fehler (wenn der Dateiöffnungsversuch fehlschlägt)

Wenn beispielsweise der Versuch, die Datei zu öffnen, aufgrund von Fehler 2 (ENOENT) fehlschlägt, versucht die Anwendung wahrscheinlich, eine Datei zu öffnen, die nicht vorhanden ist. Dies bedeutet, dass Sie möglicherweise einen Tippfehler im Code haben oder die Datei in einem anderen Pfad verfügbar ist.

Remotecodeausführung (RCE) Nicht autorisierte Codeausführung wie Kryptojacking , die bei hoher CPU-Auslastung während des Leerlaufs der Anwendung offensichtlich ist Wenn Angreifer versuchen, diese Art von Angriff auf ein System zu machen, müssen sie den Code in der Regel mithilfe bashvon . Inspektor Gadget ermöglicht es Ihnen, die Erstellung neuer Prozesse zu verfolgen, insbesondere Prozesse, die kritische Befehle wie z bash. B. .

So installieren Sie Inspektor Gadget in einem AKS-Cluster

One-Click Inspektor Gadget-Bereitstellung

Durch Auswählen der folgenden Schaltfläche wird automatisch ein AKS-Cluster erstellt, und Inspektor Gadget wird im Cluster bereitgestellt. Nachdem die Bereitstellung abgeschlossen ist, können Sie alle Features des Inspektor Gadgets in der bereitgestellten Shellumgebung erkunden.

Bereitstellen des Inspektor Gadgets in einem AKS-Cluster

Installieren Sie Inspektor Gadget, indem Sie das Plug-In "kubectl gadget" ausführen.

In diesem Abschnitt werden die Schritte zum Installieren des Inspektor Gadgets in Ihrem AKS-Cluster beschrieben, indem sie das kubectl gadget Plug-In ausführen. Die Installation besteht aus zwei Teilen:

  • Installieren des kubectl gadget Plug-Ins auf Ihrem Computer

  • Ausführen des Plug-Ins zum Installieren des kubectl gadget Inspektor Gadgets im Cluster

    Warnung

    Viele Mechanismen stehen zur Verfügung, um Inspektor Gadget bereitzustellen und zu verwenden. Jeder dieser Mechanismen ist auf bestimmte Anwendungsfälle und Anforderungen zugeschnitten. Sie können das Kubectl-Gadget-Plug-In verwenden, um mehrere dieser Mechanismen anzuwenden, aber nicht alle. Beispielsweise hängt die Bereitstellung des Inspektor Gadgets mithilfe des kubectl gadget Plug-Ins von der Verfügbarkeit des Kubernetes-API-Servers ab. Wenn Sie nicht von einer solchen Komponente abhängen können, da ihre Verfügbarkeit gelegentlich kompromittiert werden kann, empfehlen wir, die Verwendung des kubectl gadgetBereitstellungsmechanismus zu vermeiden. Weitere Informationen zu diesem und anderen Anwendungsfällen finden Sie in der Dokumentation zum Inspektor Gadget.

Voraussetzungen

Teil 1: Installieren des Kubectl-Plug-In-Gadgets auf Ihrem Computer

Es wird empfohlen, das krew kubectl gadget Plug-In zu installieren.

Notiz

Informationen zum Installieren einer bestimmten Version oder zum Kompilieren aus der Quelle finden Sie unter Installieren des Kubectl-Gadgets auf GitHub.

kubectl krew install gadget

Überprüfen Sie nun die Installation, indem Sie den version Befehl ausführen:

kubectl gadget version

Der version Befehl zeigt die Version des Clients (kubectl gadget Plug-In) an, teilt ihnen aber auch mit, dass er noch nicht auf dem Server (dem Cluster) installiert ist:

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

Teil 2: Installieren des Inspektor Gadgets im Cluster

Der folgende Befehl stellt den DaemonSet-Controller bereit.

Notiz

Es stehen mehrere Optionen zum Anpassen der Bereitstellung zur Verfügung, wie in der folgenden Liste dargestellt:

  • Verwenden eines bestimmten Containerimages
  • Bereitstellen auf bestimmten Knoten
  • Bereitstellen in einem benutzerdefinierten Namespace

Weitere Informationen zu diesen Optionen finden Sie im Abschnitt "Installieren" im Abschnitt "Cluster " der offiziellen Dokumentation.

kubectl gadget deploy

Überprüfen Sie die Installation, indem Sie den version Befehl erneut ausführen:

kubectl gadget version

Diesmal werden der Client und der Server als ordnungsgemäß installiert angezeigt:

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

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Haftungsausschluss für Kontaktinformationen von Drittanbietern

Microsoft stellt Kontaktinformationen von Drittanbietern bereit, damit Sie weitere Informationen zu diesem Thema einholen können. Diese Kontaktinformationen können ohne vorherige Ankündigung geändert werden. Microsoft übernimmt keine Garantie für die Richtigkeit dieser Kontaktinformationen von Drittanbietern.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.