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.4
weitergeleitet 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 | Symptome | 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:
|
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:
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 bash von . 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.
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 ComputerAusführen des Plug-Ins zum Installieren des
kubectl gadget
Inspektor Gadgets im ClusterWarnung
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 deskubectl gadget
Bereitstellungsmechanismus zu vermeiden. Weitere Informationen zu diesem und anderen Anwendungsfällen finden Sie in der Dokumentation zum Inspektor Gadget.
Voraussetzungen
Das Kubernetes kubectl-Befehlszeilentool . Wenn Sie über Azure CLI verfügen, können Sie den Befehl az aks install-cli ausführen, um kubectl zu installieren.
Ein AKS-Cluster. Wenn Sie nicht über einen AKS-Cluster verfügen, erstellen Sie einen mit Azure CLI oder mithilfe der Azure-Portal.
Der Krew-Paketmanager für Plug-Ins in kubectl. Sie können dem Schnellstarthandbuch für die Installation dieses Paket-Managers folgen.
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
Die Kontaktinformationen zu den in diesem Artikel erwähnten Drittanbietern sollen Ihnen helfen, zusätzliche Informationen zu diesem Thema zu finden. Diese Kontaktinformationen können ohne vorherige Ankündigung geändert werden. Sie werden von Microsoft ohne jede Gewähr weitergegeben.
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.