Przechwytywanie szczegółowych informacji o systemie w czasie rzeczywistym z klastra usługi AKS
W tym artykule omówiono proces zbierania szczegółowych informacji o systemie w czasie rzeczywistym z klastra usługi Microsoft Azure Kubernetes Service (AKS) przy użyciu gadżetu Inspektora. Ten artykuł zawiera instrukcje krok po kroku dotyczące instalowania tego narzędzia w środowisku usługi AKS. Przedstawiono również praktyczne przykłady pokazujące, jak inspektor gadżet pomaga zebrać cenne informacje w celu skutecznego debugowania rzeczywistych problemów.
Demonstracja
Aby rozpocząć, rozważmy następujący szybki pokaz. Załóżmy, że musisz ustalić, dlaczego żądania DNS z aplikacji kończą się niepowodzeniem. Za pomocą gadżetu Inspektor można przechwycić ruch DNS w przestrzeni nazw Kubernetes, w której działa aplikacja:
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
Z tych informacji można zobaczyć, że żądania DNS są kierowane do serwera DNS pod adresem 1.2.3.4
IP , ale serwer nigdy nie odpowiada.
Teraz załóżmy, że 1.2.3.4
nie jest to domyślna konfiguracja serwera nazw i podejrzewasz, że podejrzany proces modyfikuje konfigurację w czasie wykonywania. W tego rodzaju przypadkach Inspektor Gadżet wykracza poza diagnostykę DNS. Umożliwia również monitorowanie procesów, które uzyskują dostęp do krytycznych plików (takich jak /etc/resolv.conf) i mają zamiar zmodyfikować te pliki. Aby użyć tej funkcji monitorowania, przefiltruj flagi w danych wyjściowych, aby wyświetlić dowolny z trybów dostępu do plików zapisu (O_WRONLY
aby otworzyć tylko do zapisu lub O_RDWR
otworzyć w celu odczytu i zapisu):
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
Co to jest Gadżet Inspektora?
Inspektor Gadget to struktura przeznaczona do tworzenia, pakowania, wdrażania i uruchamiania narzędzi przeznaczonych do debugowania i inspekcji systemów Linux i Kubernetes. Te narzędzia ("gadżety") są implementowane jako programy eBPF . Ich głównym celem jest zebranie danych jądra niskiego poziomu w celu zapewnienia wglądu w konkretne scenariusze systemowe. Struktura Inspektor Gadget zarządza skojarzeniem zebranych danych przy użyciu odwołań wysokiego poziomu, takich jak zasoby platformy Kubernetes. Ta integracja zapewnia, że istnieje bezproblemowe połączenie między szczegółowymi informacjami niskiego poziomu a odpowiadającym im kontekstem wysokiego poziomu. Integracja usprawnia proces rozwiązywania problemów i zbieranie odpowiednich informacji.
Gadżety
Inspektor Gadget udostępnia zestaw wbudowanych narzędzi przeznaczonych do debugowania i obserwowania typowych sytuacji w systemie. Na przykład za pomocą takich gadżetów można śledzić następujące zdarzenia w klastrze:
- Tworzenie procesu
- Dostęp do plików
- Działanie sieciowe, takie jak połączenia TCP lub rozpoznawanie nazw DNS
Gadżety przedstawiają informacje zebrane przy użyciu różnych mechanizmów. Na przykład niektóre gadżety mogą informować o stanie systemu o określonym czasie. Inne gadżety mogą raportować za każdym razem, gdy wystąpi określone zdarzenie, lub mogą dostarczać okresowe aktualizacje.
To tylko kilka przykładów. Oficjalna dokumentacja zawiera szczegółowe opisy i przykłady każdego gadżetu, dzięki czemu można określić najbardziej odpowiedni gadżet dla konkretnego przypadku użycia. Jeśli jednak znajdziesz przypadek użycia, że istniejące gadżety nie są obecnie objęte, Inspektor Gadżet umożliwia uruchamianie własnych programów eBPF za pomocą polecenia uruchamiania. Ponieważ struktura Inspektor Gadget obsługuje budynek, pakowanie i wdrażanie niestandardowych programów, usprawnia proces tworzenia unikatowych wymagań. Ponadto zbiera metadane wysokiego poziomu, aby wzbogacić dane zbierane w programie.
Przypadki użycia
Aby uzupełnić pokaz przedstawiony na początku tego artykułu, skompilowaliśmy listę problemów i praktycznych scenariuszy pokazujących, jak inspektor gadżet pomaga w rozwiązywaniu problemów z debugowaniem. W poniższych przykładach przedstawiono potencjał inspektora gadżetu. Jednak możliwości tego narzędzia wykraczają poza te scenariusze. Dzięki temu inspektor gadżet jest nieocenionym zasobem do poruszania się po złożoności debugowania i obserwowania platformy Kubernetes.
Obszar problematyczny | Symptomy | Rozwiązywanie problemów |
---|---|---|
Aplikacje intensywnie korzystające z dysków | Wysokie użycie pamięci lub procesora CPU lub niespójna gotowość węzła | Aplikacja może konsekwentnie angażować się w operacje odczytu/zapisu dysku, takie jak obszerne rejestrowanie. Za pomocą gadżetu Inspektor można zidentyfikować w czasie rzeczywistym, które kontenery generują więcej operacji we/wy bloku. Możesz też znaleźć kontener, który powoduje więcej operacji odczytu i zapisu w pliku. |
"To zawsze DNS" | Duże opóźnienie aplikacji, przekroczenie limitu czasu lub słabe środowisko użytkownika końcowego | Za pomocą gadżetu Inspektor można śledzić wszystkie zapytania i odpowiedzi DNS w klastrze. W szczególności inspektor gadżet zawiera następujące informacje, które ułatwiają ustalenie, czy system DNS ma wpływ na wydajność aplikacji:
|
Dostęp do systemu plików | Nieprawidłowo działa aplikacja lub nie może działać poprawnie | Aplikacja może nie mieć dostępu do określonych konfiguracji, dzienników lub innych ważnych plików w systemie plików. W takich scenariuszach gadżet Inspektor umożliwia śledzenie wszystkich otwartych plików wewnątrz zasobników w celu zdiagnozowania problemów z dostępem. Za każdym razem, gdy aplikacja próbuje otworzyć plik, możesz odnaleźć następujące informacje:
Jeśli na przykład próba otwarcia pliku zakończy się niepowodzeniem z powodu błędu 2 (ENOENT), aplikacja prawdopodobnie próbuje otworzyć plik, który nie istnieje. Oznacza to, że możesz mieć literówkę w kodzie lub plik jest dostępny w innej ścieżce. |
Zdalne wykonywanie kodu (RCE) | Nieautoryzowane wykonywanie kodu, takie jak cryptojacking , które jest widoczne w przypadku wysokiego użycia procesora CPU w okresach bezczynności aplikacji | Gdy osoby atakujące próbują dokonać tego rodzaju ataku na system, zazwyczaj muszą uruchomić kod przy użyciu polecenia bash . Inspektor Gadżet umożliwia śledzenie tworzenia nowych procesów, szczególnie procesów obejmujących polecenia krytyczne, takie jak bash . |
Jak zainstalować gadżet Inspektora w klastrze usługi AKS
Wdrożenie gadżetu inspektora jednym kliknięciem
Po wybraniu poniższego przycisku klaster usługi AKS zostanie automatycznie utworzony, a gadżet inspektora zostanie wdrożony w klastrze. Po zakończeniu wdrażania możesz zapoznać się ze wszystkimi funkcjami gadżetu Inspektora w podanym środowisku powłoki.
Zainstaluj gadżet Inspektora, uruchamiając wtyczkę "gadżet kubectl"
W tej sekcji opisano kroki instalowania gadżetu Inspektora w klastrze usługi AKS przez uruchomienie kubectl gadget
wtyczki. Instalacja składa się z dwóch części:
Instalowanie
kubectl gadget
wtyczki na komputerzeUruchamianie wtyczki w celu zainstalowania gadżetu
kubectl gadget
Inspektora w klastrzeOstrzeżenie
Dostępnych jest wiele mechanizmów wdrażania i używania gadżetu Inspektora. Każdy z tych mechanizmów jest dostosowany do konkretnych przypadków użycia i wymagań. Możesz użyć wtyczki gadżetu kubectl, aby zastosować kilka z tych mechanizmów, ale nie wszystkie z nich. Na przykład wdrożenie gadżetu
kubectl gadget
Inspektor przy użyciu wtyczki zależy od dostępności serwera interfejsu API Kubernetes. Jeśli nie możesz zależeć od takiego składnika, ponieważ jej dostępność może być od czasu do czasu naruszona, zalecamy unikanie korzystania zkubectl gadget
mechanizmu wdrażania. Aby uzyskać więcej informacji na temat tego i innych przypadków użycia, zobacz dokumentację inspektora gadżetu.
Wymagania wstępne
Narzędzie wiersza polecenia kubernetes kubectl kubernetes. Jeśli masz interfejs wiersza polecenia platformy Azure, możesz uruchomić polecenie az aks install-cli , aby zainstalować narzędzie kubectl.
Klaster usługi AKS. Jeśli nie masz klastra usługi AKS, utwórz go przy użyciu interfejsu wiersza polecenia platformy Azure lub przy użyciu witryny Azure Portal.
Menedżer pakietów krew dla wtyczek w kubectl. Aby zainstalować tego menedżera pakietów, możesz skorzystać z przewodnika Szybki start krew.
Część 1. Instalowanie gadżetu wtyczki kubectl na komputerze
Zalecamy zainstalowanie kubectl gadget
wtyczki przy użyciu krew
polecenia .
Uwaga 16.
Aby zainstalować określoną wersję lub skompilować ją ze źródła, zobacz Instalowanie gadżetu kubectl w witrynie GitHub.
kubectl krew install gadget
Teraz zweryfikuj instalację, uruchamiając version
polecenie :
kubectl gadget version
Polecenie version
wyświetla wersję klienta (kubectl gadget
wtyczka), ale informuje również, że nie jest jeszcze zainstalowany na serwerze (klastrze):
Client version: vX.Y.Z
Server version: not installed
Część 2. Instalowanie gadżetu Inspektora w klastrze
Następujące polecenie służy do wdrażania kontrolera DaemonSet .
Uwaga 16.
Dostępnych jest kilka opcji dostosowywania wdrożenia, jak pokazano na poniższej liście:
- Używanie określonego obrazu kontenera
- Wdrażanie w określonych węzłach
- Wdrażanie w niestandardowej przestrzeni nazw
Aby dowiedzieć się więcej o tych opcjach, zobacz sekcję Instalowanie w klastrze w oficjalnej dokumentacji.
kubectl gadget deploy
Sprawdź instalację, uruchamiając version
ponownie polecenie:
kubectl gadget version
Tym razem klient i serwer są wyświetlane jako poprawnie zainstalowane:
Client version: vX.Y.Z
Server version: vX.Y.Z
Zastrzeżenie dotyczące innych firm
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.
Wyłączenie odpowiedzialności za kontakty z osobami trzecimi
Firma Microsoft udostępnia informacje kontaktowe innych firm, aby uzyskać dodatkowe informacje na temat tego tematu. Informacje te mogą zostać zmienione bez powiadomienia. Firma Microsoft nie gwarantuje dokładności informacji kontaktowych innych firm.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.