Udostępnij za pośrednictwem


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.4IP , 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:

  • Powodzenie zapytania
  • Czy odpowiedź zawiera błąd
  • Serwer nazw używany do wyszukiwania
  • Opóźnienie odpowiedzi na zapytanie
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:

  • Flagi używane do otwierania pliku (na przykład O_RDONLY, O_WRONLY, O_RDWR itd.)
  • Czy próba otwarcia pliku zakończyła się powodzeniem
  • Zwrócony błąd (jeśli próba otwarcia pliku nie powiedzie się)

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.

Wdrażanie gadżetu Inspektor w klastrze usługi AKS

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 komputerze

  • Uruchamianie wtyczki w celu zainstalowania gadżetu kubectl gadget Inspektora w klastrze

    Ostrzeż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 z kubectl gadgetmechanizmu wdrażania. Aby uzyskać więcej informacji na temat tego i innych przypadków użycia, zobacz dokumentację inspektora gadżetu.

Wymagania wstępne

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.