天天看點

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

作者:架構師漫談

KubeShark: Kubernetes的Wireshark

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

Kubeshark

KubeShark 是一個開源的 Kubernetes 叢集監控工具,它可以收集和分析 Kubernetes API Server、etcd、kubelet、kube-proxy 等元件的性能名額和狀态資訊,幫助使用者了解叢集的運作狀況和性能瓶頸。
KubeShark 可以提供以下功能:
  • 實時監控 Kubernetes 叢集的狀态資訊,包括節點、Pod、Service、Deployment、Ingress 等資源的狀态和屬性。
  • 收集和展示叢集的 CPU、記憶體、網絡流量等性能名額,以及磁盤 I/O、GC 等系統級别的名額。
  • 支援自定義監控名額和告警規則,可以根據使用者的需求進行定制化配置。
  • 支援導出資料到多種格式,如 JSON、CSV、HTML 等,友善使用者進行資料分析和可視化。
Kubeshark:K8S的API流量瑞士軍刀,短小精悍

簡介

Wireshark是著名的資料包抓取、分析和故障排除工具,可以實時捕獲網絡流量并在微觀級别上實時分析,或者讀取和處理儲存的資料封包件。Wireshark可以解析和顯示許多協定,并有強大的過濾系統過濾感興趣的流量。https://www.wireshark.org/

TCPDump/Wireshark使我們能夠在微觀層面可視化和了解網絡中發生的事情。想象一下,如果可以在k8s中做類似的事情,如果可以看到目前部署的工作負載、擷取pod、建立服務帳戶以及不同的工作負載如何互相互動時究竟發生了什麼,那會怎麼樣。

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

k8s

叢集的示例源代碼可視化

現在缺少什麼?

要檢視啟動kubectl指令時究竟發生了什麼,可以簡單的在kubectl指令中使用verbose标志,并設定一些詳細級别,如kubectl get pods -v=6。verbose級别從0開始到9結束,0顯示的資訊最少,9顯示最多的資訊。這是目前已經存在的資料,但流程的清晰可視化并不存在。

帶-v标志的kubectl可以檢視L7 API調用,但不會讓我們監視任何網絡流量。而kubesshark抓取L3和L7,實際上它可以通路整個L2架構,可以将建立儀表闆/視圖來可視化,就像Wireshark一樣。

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

Kubeshark儀表闆

kubeshark解決了什麼問題?

  1. 監控一切 —— 監控Pod到Pod的網絡流量、API調用、監控單個節點、服務或特定路徑,如/latest/meta-data或/health等。
  2. 可視化 —— Kubeshark Viewer非常簡單,但支援強大的實時流量檢視、過濾、分析和問題排查功能,右側視窗裡的請求響應詳細資訊非常清晰。
  3. PCAP存儲 —— 存儲PCAP以供将來分析,可以輕松将其轉儲到S3或其他存儲中,供稍後加載并可視化。
  4. 更容易調試 —— 無論是調試,還是加深對叢集中各個元件之間通信的了解,都能獲得極大支援。
  5. 實時告警 —— 可以使用kubesshark允許基于擷取的資料為k8s建構真正強大的告警系統,例如擷取密鑰調用失敗、執行個體中繼資料調用失敗以及其他類似異常。

自己動手

安裝Kubeshark,看看它是如何工作的,通過以下指令安裝KubeShark:

sh <(curl -Ls https://kubeshark.co/install)
           

要支援特定版本和架構的,請從 https://github.com/kubeshark/kubeshark/releases/ 下載下傳二進制檔案。

啟動Kubeshark:

kubeshark tap -A
           

tap -A表示監控所有命名空間,指定-n表示監控指定命名空間。

kubeshark tap -n kube-system
           

Kubeshark将開始監控/擷取流量,并在本地主機的端口8899上啟動檢視器。

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

啟動kubesshark,儀表盤暴露在8899端口上

我用KOPS部署了測試叢集,注意Kubeshark二進制檔案從~/.kube/config檢視目前上下文,并用相同的憑據和叢集來建立其資源并開始監控。

你可以建立一個本地kind叢集來快速了解Kubeshark是如何工作的。

玩一會兒

讓我們看看要監控什麼,kubeshark的儀表闆上有哪些功能,這些是用來測試kubesshark的過濾器樣本。

單節點監控 ——

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

可視化服務地圖 ——

Kubeshark:K8S的API流量瑞士軍刀,短小精悍

監控AWS執行個體中繼資料安全憑證路徑 ——

一些思考

  1. 有助于加深對叢集中各個元件如何在盡可能低的級别上進行通信和協同工作的了解。
  2. 通過向流量添加适當的過濾器,調試/故障排除變得非常簡單。
  3. 服務地圖從可視化的角度提供了一個關于叢集的高層次概述。
  4. 可以擴充資料做實時告警,包括操作和安全警報。
  5. 在适當規模上做性能基準測試,看看這個工具是如何擴充,如何影響計算和存儲,因為流量基于叢集規模呈指數級增長。
  6. 老實說,将它與Sysdig falco或Cilium Tetragon進行比較是不公平的,它捕獲和調整資料的方式更關注實時檢測方面,并考慮在與K8S API異常更相關的安全方面使用。
  7. 也許這是一個應該廣泛使用的工具,以便更好了解底層調用,進而編寫與控制平面更相關的更好的運作時安全政策,但對檢測任何容器異常或與容器運作時AFAIK相關的異常沒有多大幫助。
Kubeshark:K8S的API流量瑞士軍刀,短小精悍

監控工具

結論

Kubeshark是個功能強大的工具,早期被稱為Mizu,由UP9開發,作為API流量檢視器,後來開源并改名為Kubeshark,以表明這是基于K8S重制的Wireshark。

雖然有一些複雜的k8s運作時安全工具,如Sysdig Falco、Cilium Tetragon,都是利用eBPF功能建構的,文檔中提到Kubeshark也使用eBPF,但其更側重于在微觀層面提供可視化層,以更好的了解通信。Kubeshark提供的資料絕對可以用于運作時檢測。

Github連結: https://github.com/kubeshark/kubeshark

官網: https://kubeshark.com

你好,我是冰點,在阿裡做過研發,現在在菜鳥做技術相關工作,對通信、網絡、後端架構、雲原生、DevOps、CICD、微服務、AI等技術始終保持着濃厚的興趣,平時喜歡閱讀、思考,相信持續學習、終身成長,歡迎一起交流學習。微信公衆号:java2fun。【架構師漫談】

繼續閱讀