本文討論如何使用 Inspektor 小工具,從Microsoft Azure Kubernetes Service (AKS) 叢集收集實時系統深入解析的程式。 本文包含在 AKS 環境中安裝此工具的逐步指示。 它也會探索實際範例,示範 Inspektor 小工具如何協助您收集寶貴的資訊,以對真實世界問題進行有效的偵錯。
示範:即時 DNS 疑難解答和重大檔案存取警示
若要開始,請考慮下列快速示範。 假設您必須找出來自應用程式之 DNS 要求失敗的原因。 藉由使用 Inspektor 小工具,您可以執行 trace_dns小工具 ,以擷取應用程式執行所在的 Kubernetes 命名空間中的 DNS 流量:
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
從這項資訊中,我們可以看到 DNS 要求會導向 IP 位址1.2.3.4的 DNS 伺服器(如數據行所示NAMESERVER),但我們只會看到查詢(QQR在數據行中),而且沒有回應(R在數據行中QR)。 這表示 DNS 伺服器未回應查詢,這就是為什麼應用程式無法解析功能變數名稱 www.example.com的原因。
現在,假設 1.2.3.4 不是預設的名稱伺服器設定,而且您懷疑有惡意程序正在運行時修改設定。 在這些情況下,Inspektor 小工具超越 DNS 診斷。 它也可讓您監視存取重要檔案的進程(例如 /etc/resolv.conf),並打算修改這些檔案。 若要這樣做,請在相同的命名空間中執行 trace_open小工具 ,並依檔名和指出 要寫入 檔案的旗標來篩選結果(O_WRONLY 只開啟以供寫入,或 O_RDWR 開啟以供讀取和寫入):
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
什麼是 Inspektor 小工具?
Inspektor 小工具 是一種架構,可讓您輕鬆地監視、疑難解答及保護在Linux和 Kubernetes 上執行的工作負載。 它由利用 eBPF 程式的工具(小工具)組成。 其主要目標是收集低階核心數據,以提供特定系統案例的深入解析。 Inspektor 小工具架構會使用高階參考來管理所收集數據的關聯,例如 Kubernetes 資源。 此整合可確保低階深入解析與其對應的高階內容之間有順暢的連線。 整合可簡化疑難解答程序與相關信息的收集。
產品
Inspektor 小工具提供一組內建工具,其設計目的是要對系統上的常見情況進行偵錯和觀察。 例如,藉由使用這類小工具,您可以在叢集中追蹤下列事件:
- 程式建立
- 檔案存取
- 網路活動,例如 TCP 連線或 DNS 解析
小工具會使用不同的機制來呈現他們收集的資訊。 例如,有些小工具可以通知您特定時間的系統狀態。 其他小工具可以在每次發生特定事件時報告,也可以提供定期更新。
這只是一部分的範例。 官方 檔 提供每個小工具的詳細描述和範例,讓您可以判斷最適合您特定使用案例的小工具。 不過,如果您發現現有小工具目前未涵蓋的使用案例,Inspektor 小工具可讓您使用 run 命令來執行自己的 eBPF 程式。 由於 Inspektor 小工具架構會處理自定義程式的建置、封裝和部署,因此可簡化您獨特需求的程式。 此外,它會收集高階元數據,以擴充您在程式中收集的數據。
使用案例
為了補充本文開頭所呈現的示範,我們編譯了一份問題和實際案例清單,示範 Inspektor 小工具如何協助您解決偵錯挑戰。 下列範例展示 Inspektor 小工具的潛力。 但此工具的功能超出這些案例。 這讓 Inspektor 小工具成為流覽 Kubernetes 偵錯和可觀察性複雜性的寶貴資產。
| 問題領域 | 徵兆 | 疑難排解 |
|---|---|---|
| 需要大量磁碟的應用程式 | 高記憶體或CPU使用量,或節點整備不一致 | 應用程式可能會持續參與磁碟讀取/寫入作業,例如廣泛的記錄。 藉由使用 Inspektor 小工具,您可以即時識別哪些容器會產生更多 區塊 I/O。 或者,更具體地說,您可以找到造成更多讀取和寫入檔案的容器。 |
| 「一律是 DNS」 | 高應用程式延遲、逾時或用戶體驗不佳 | 藉由使用 Inspektor 小工具,您可以 追蹤叢集中的所有 DNS 查詢和回應。 特別是 Inspektor 小工具提供下列資訊,可協助您判斷 DNS 是否會影響應用程式的效能:
|
| 檔案系統存取 | 應用程式錯誤或無法正確運作 | 應用程式可能無法存取檔案系統中的特定組態、記錄或其他重要檔案。 在這種情況下,Inspektor 小工具可讓您 追蹤 Pod 內所有開啟的檔案 ,以診斷存取問題。 每當您的應用程式嘗試開啟檔案時,您都可以探索下列資訊:
例如,如果嘗試開啟檔案失敗,因為錯誤 2 (ENOENT),應用程式可能會嘗試開啟不存在的檔案。 這表示您可能在程序代碼中有錯字,或檔案可在不同的路徑中使用。 |
| 遠端程式代碼執行 (RCE) | 未經授權的程式代碼執行,例如在應用程式閑置期間高 CPU 使用量中明顯的密碼編譯執行 | 當攻擊者嘗試對系統發動這種攻擊時,他們通常必須使用 來執行程序代碼 bash。 Inspektor 小工具可讓您 追蹤新進程的建立,特別是涉及重要命令的程式,例如 bash。 |
如何在 AKS 叢集中安裝 Inspektor 小工具
了解如何在叢集中部署 Inspektor Gadget。
執行 「kubectl 小工具」 外掛程式來安裝 Inspektor 小工具
本節概述執行外掛程式,在 AKS 叢集中 kubectl gadget 安裝 Inspektor 小工具的步驟。 安裝包含兩個部分:
在
kubectl gadget工作站上安裝外掛程式執行
kubectl gadget外掛程式以在叢集中部署 Inspektor 小工具
警告
有許多機制可用來部署及使用 Inspektor 小工具。 每個機制都是針對特定使用案例和需求量身打造。 您可以使用 kubectl 小工具外掛程式來套用其中幾個機制,但並非所有機制。 例如,使用 kubectl gadget 外掛程式部署 Inspektor 小工具取決於 Kubernetes API 伺服器的可用性。 如果您無法依賴這類元件,因為其可用性可能偶爾遭到入侵,建議您避免使用 kubectl gadget 部署機制。 如需此和其他使用案例的詳細資訊,請參閱 Inspektor 小工具檔。
必要條件
Kubernetes kubectl 命令行工具。 如果您有 Azure CLI,您可以執行 az aks install-cli 命令來安裝 kubectl。
AKS 叢集。 如果您沒有 AKS 叢集,請使用 Azure CLI 或使用 Azure 入口網站 建立一個叢集。
第 1 部分:在您的工作站上安裝 kubectl 小工具外掛程式
根據您的作業系統使用指示:
- Azure Linux 3.0
- Ubuntu 18.04 / 20.04 / 22.04
注意
若要安裝特定版本或從來源進行編譯,請參閱 在 GitHub 上安裝 kubectl 小工具 。
將Microsoft Cloud-Native 存放庫新增至您的系統:
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.repokubectl gadget安裝外掛程式:tdnf install --refresh -y kubectl-gadget
現在,執行 version 命令來確認安裝:
kubectl gadget version
命令輸出會顯示用戶端版本(kubectl gadget 外掛程式),而且尚未安裝在伺服器上(叢集):
Client version: vX.Y.Z
Server version: not installed
第 2 部分:在叢集中部署 Inspektor 小工具
下列命令會 部署 DaemonSet 控制器。
kubectl gadget deploy
再次執行 命令來 version 確認安裝:
kubectl gadget version
這次,用戶端和伺服器都會顯示正確安裝:
Client version: vX.Y.Z
Server version: vX.Y.Z
使用 Microsoft Cloud-Native 存放庫中可用的外掛程式部署 Inspektor 小工具 kubectl gadget 時,DaemonSet 所使用的容器映射會自動從 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
注意
如果您使用 krew 套件管理員來安裝 kubectl 外掛程式,並偏好直接從其 GitHub 存放庫安裝 Inspektor 小工具,您可以使用下列命令輕鬆地在叢集中安裝 kubectl gadget 外掛程式並部署 Inspektor 小工具:
kubectl krew install gadget
kubectl gadget deploy
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
協力廠商連絡資訊免責聲明
Microsoft 提供協力廠商連絡資訊,以協助您尋找有關此主題的其他資訊。 此連絡資訊可能會變更而不另行通知。 Microsoft 不保證協力廠商連絡資訊的準確性。
與我們連絡,以取得說明
如果您有疑問,可以詢問 Azure 社群支援。 您也可以向 Azure 意見反應社群提交產品意見反應。