Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.com
domeny .
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:
|
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 stacji roboczejUruchamianie 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
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.
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.
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
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.