一文解決Kubernetes 的 API 流量查看器 - Kubeshark
一、Kubeshark 是什么?
Kubeshark 由 2021 年 UP9 公司開源的 K8s API 流量查看器 Mizu 發(fā)展而來,試圖成為一款 K8s 全過程流量監(jiān)控工具。
Kubeshark 被叫做 kubernetes 的 API 流量查看器,它提供對進(jìn)出 Kubernetes 集群內(nèi)容器和 pod 的所有 API 流量和負(fù)載的深度可見性和監(jiān)控。類似于針對 Kubernetes 而重新發(fā)明的 TCPDump 和 Wireshark。地址:https://github.com/kubeshark/kubeshark

Kubeshark 也被叫做 Kubernetes 的可觀測性工具,可以對微服務(wù)進(jìn)行動(dòng)態(tài)分析,檢測異常并在運(yùn)行時(shí)出現(xiàn)某些模式時(shí)觸發(fā)功能。
可以將 Kubeshark 視為 Wireshark、BPF 編譯器集合 (BCC) 工具等的 Kubernetes 感知組合。
Kubeshark 可以嗅探集群中的部分或所有 TCP 流量,將其記錄到 PCAP 文件中并剖析。
Kubeshark 使用 eBPF 來跟蹤內(nèi)核空間和用戶空間中的函數(shù)調(diào)用。

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


二、Kubeshark 架構(gòu)
Kubeshark 由三個(gè)不同的軟件組成,它們可以協(xié)同工作:CLI、Hub 和 Worker。
CLI,它是客戶端的 二進(jìn)制文件,通過 K8s API 與集群通信。
Hub,它協(xié)調(diào) worker 部署,接收來自每個(gè) worker 的嗅探和剖析,并收集到一個(gè)中心位置。它還提供一個(gè)Web界面,用于在瀏覽器上顯示收集到的流量。
Work,作為 DaemonSet 部署到集群中,以確保集群中的每個(gè)節(jié)點(diǎn)都被 Kubeshark 覆蓋。

三、Kubeshark 功能
1)Kubeshark 功能 - 網(wǎng)絡(luò)嗅探
Kubeshark 可以使用 Linux 內(nèi)核中內(nèi)置的各種方法和 API 嗅探集群中的加密和未加密流量。
直接抓包,直接使用 libpcap、AF_PACKET 和 PF_RING 嗅探集群中的 TCP 流量,并將其記錄到 PCAP 文件中。例如在使用服務(wù)網(wǎng)格的場景中,Kubeshark 會(huì)自動(dòng)檢測任何 Envoy Proxy并將其包含到其 TCP 數(shù)據(jù)包捕獲源列表中。
基于 eBPF 抓包,基于 eBPF 的數(shù)據(jù)包捕獲使用 eBPF 嗅探集群中的加密流量 (TLS),而無需實(shí)際進(jìn)行解密。事實(shí)上,它掛鉤到 OpenSSL 庫和 Go 的 crypto/tls 包中某些函數(shù)的入口點(diǎn)和出口點(diǎn)。
2)Kubeshark 功能 – 查詢

3)Kubeshark 功能 – 內(nèi)核跟蹤
Kubeshark 使用 ?? eBPF(擴(kuò)展伯克利數(shù)據(jù)包過濾器)提供跟蹤內(nèi)核空間和用戶空間功能。
4)Kubeshark 功能 – 服務(wù)地圖
部署完成后,Kubeshark CLI 將在 http://localhost:8899 打開 UI 單擊右上角名為 Service Map 的按鈕打開服務(wù)依賴關(guān)系圖。該圖根據(jù)網(wǎng)絡(luò)流量顯示 Pod 以及它們之間的關(guān)系。

5)Kubeshark 功能 – 數(shù)據(jù)脫敏
Kubeshark 捕獲的流量包含敏感信息。用戶可以配置 Kubeshark 以隱藏某些關(guān)鍵字或數(shù)據(jù)片段將在 UI 中顯示為 [REDACTED]。
默認(rèn)的脫敏字段 “token”, “authorization”, “authentication”, “cookie”, “userid”, “password”, “username”,
“user”, “key”, “passcode”, “pass”, “auth”, “authtoken”, “jwt”, “bearer”, “clientid”,
“clientsecret”, “redirecturi”, “phonenumber”, “zip”, “zipcode”, “address”, “country”,
“firstname”, “l(fā)astname”, “middlename”, “fname”, “l(fā)name”, “birthdate”
四、一些使用場景和用法
可以直接在其 github 站點(diǎn)上看到這些基本使用場景。
1)監(jiān)控指定的 Pod
2)使用正則表達(dá)式監(jiān)控一組 Pod
3)指定監(jiān)控的 Namespace
默認(rèn)情況下,Kubeshark 部署在?default
?namespace 中,也是監(jiān)聽這個(gè) namespace,可以使用下面的命令指定到一個(gè)不同的 namespace 中
kubeshark tap -n sock-shop
4)指定所有 Namespaces
五、總結(jié)
該工具底層基于 ePBF、Linux 內(nèi)核網(wǎng)絡(luò) API,并且解決了流量數(shù)據(jù)加解密問題,整體上看是一款能夠滿足對 K8s 全過程流量監(jiān)控與管理的工具。
但目前的實(shí)現(xiàn)還只是一個(gè)功能原型,在數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)訪問、單機(jī)瓶頸等方面仍然存在問題,也不具備模擬流量仿真能力。優(yōu)勢在于提供了流量查詢語言 KFL 和微服務(wù)流量關(guān)聯(lián)的知識圖譜展示。
原文作者:黑光信息
