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.

Pokaz: Rozwiązywanie problemów z systemem DNS w czasie rzeczywistym i alerty o krytycznym dostępie do plików

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 uruchomić gadżet trace_dns w celu przechwycenia ruchu DNS w przestrzeni nazw Kubernetes, w której działa aplikacja:

kubectl gadget run trace_dns \
  --namespace my-ns \
  --fields k8s.node,k8s.podName,id,qr,name,rcode,nameserver
K8S.NODE                          K8S.PODNAME  ID    QR  NAME          RCODE  NAMESERVER
aks-nodepool-41788306-vmss000002  demo-pod     13cc  Q   example.com.         1.2.3.4
aks-nodepool-41788306-vmss000002  demo-pod     13cc  Q   example.com.         1.2.3.4

Z tych informacji widać, że żądania DNS są kierowane do serwera DNS pod adresem 1.2.3.4 IP (jak wskazano w NAMESERVER kolumnie), ale widzimy tylko zapytania (Q w QR kolumnie) i brak odpowiedzi (R w QR kolumnie). Oznacza to, że serwer DNS nie odpowiedział na zapytania, dlatego aplikacja nie może rozpoznać nazwy www.example.comdomeny .

Teraz załóżmy, że 1.2.3.4 nie jest to domyślna konfiguracja serwera nazw i podejrzewasz, że złośliwy 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 to zrobić, uruchom gadżet trace_open w tej samej przestrzeni nazw i przefiltruj wyniki według nazwy pliku oraz flagi wskazujące zamiar zapisania w pliku (O_WRONLY w celu otwarcia tylko do zapisu lub O_RDWR otwarcia na potrzeby odczytu i zapisu):

kubectl gadget run trace_open \
  --namespace my-ns \
  --filter fname==/etc/resolv.conf,flags~'(O_WRONLY|O_RDWR)' \
  --fields k8s.node,k8s.podName,comm,fname,flags,error
K8S.NODE                          K8S.PODNAME  COMM            FNAME             FLAGS     ERROR
aks-nodepool-41788306-vmss000002  demo-pod     malicious-proc  /etc/resolv.conf  O_WRONLY

Co to jest Gadżet Inspektora?

Inspektor Gadget to struktura, która ułatwia monitorowanie, rozwiązywanie problemów i zabezpieczanie obciążeń działających w systemach Linux i Kubernetes. Składa się z narzędzi (gadżetów), które wykorzystują 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, przekroczenia 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:

  1. Instalowanie kubectl gadget wtyczki na stacji roboczej

  2. Uruchamianie wtyczki kubectl gadget w celu wdrożenia Inspektor Gadget 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 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

Część 1: Zainstaluj wtyczkę kubectl gadget na stacji roboczej

Skorzystaj z instrukcji dotyczących systemu operacyjnego:

  • Azure Linux 3.0
  • Ubuntu 18.04 / 20.04 / 22.04

Uwaga 16.

Aby zainstalować określoną wersję lub skompilować ją ze źródła, zobacz Instalowanie gadżetu kubectl w witrynie GitHub.

  1. Dodaj repozytorium microsoft Cloud-Native do systemu:

    echo "[azurelinux-cloud-native]
    name=Azure Linux Cloud Native 3.0
    baseurl=https://packages.microsoft.com/azurelinux/3.0/prod/cloud-native/$(uname -i)
    gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY
    gpgcheck=1
    repo_gpgcheck=1
    enabled=1
    skip_if_unavailable=True
    sslverify=1
    " > /etc/yum.repos.d/azurelinux-cloud-native.repo
    
  2. Zainstaluj wtyczkę kubectl gadget :

    tdnf install --refresh -y kubectl-gadget
    

Teraz zweryfikuj instalację, uruchamiając version polecenie :

kubectl gadget version

Dane wyjściowe polecenia pokazują wersję klienta aplikacji (kubectl gadget wtyczka) i że nie jest jeszcze zainstalowana na serwerze (w klastrze):

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

Część 2. Wdrażanie Inspektor Gadget 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

Podczas wdrażania Inspektor Gadget z wtyczką dostępna w repozytorium Microsoft Cloud-Native, obraz kontenera używany dla DaemonSet jest automatycznie pobierany z rejestru Microsoft Container Registry (MCR).

kubectl get daemonset gadget -n gadget -o jsonpath='{.spec.template.spec.containers[*].image}'
mcr.microsoft.com/oss/v2/inspektor-gadget/inspektor-gadget:vX.Y.Z

Uwaga 16.

Jeśli używasz menedżera pakietów krew do instalowania wtyczek kubectl i preferujesz instalowanie gadżetu Inspektora bezpośrednio z repozytorium GitHub, możesz łatwo zainstalować wtyczkę kubectl gadget i wdrożyć gadżet Inspektora w klastrze przy użyciu następujących poleceń:

kubectl krew install gadget
kubectl gadget deploy

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.