Wireshark可以幫助我們抓取并分析網(wǎng)絡(luò)數(shù)據(jù)包捺弦,理解網(wǎng)絡(luò)中發(fā)生的事情烧董,那是否有工具可以幫助我們理解在K8S集群中發(fā)生的事情彤委,幫助排查集群故障裳食,Kubeshark就是這樣的工具玫恳。原文: KubeShark: Wireshark for Kubernetes
簡介
Wireshark是著名的數(shù)據(jù)包抓取辨赐、分析和故障排除工具,可以實(shí)時(shí)捕獲網(wǎng)絡(luò)流量并在微觀級(jí)別上實(shí)時(shí)分析京办,或者讀取和處理保存的數(shù)據(jù)包文件掀序。Wireshark可以解析和顯示許多協(xié)議,并有強(qiáng)大的過濾系統(tǒng)過濾感興趣的流量惭婿。https://www.wireshark.org/
TCPDump/Wireshark使我們能夠在微觀層面可視化和理解網(wǎng)絡(luò)中發(fā)生的事情不恭。想象一下,如果可以在k8s中做類似的事情财饥,如果可以看到當(dāng)前部署的工作負(fù)載换吧、獲取pod、創(chuàng)建服務(wù)帳戶以及不同的工作負(fù)載如何相互交互時(shí)究竟發(fā)生了什么钥星,那會(huì)怎么樣沾瓦。
現(xiàn)在缺少什么?
要查看啟動(dòng)kubectl命令時(shí)究竟發(fā)生了什么,可以簡單的在kubectl命令中使用verbose標(biāo)志打颤,并設(shè)置一些詳細(xì)級(jí)別暴拄,如kubectl get pods -v=6
。verbose級(jí)別從0開始到9結(jié)束编饺,0顯示的信息最少乖篷,9顯示最多的信息。這是當(dāng)前已經(jīng)存在的數(shù)據(jù)透且,但流程的清晰可視化并不存在撕蔼。
帶-v標(biāo)志的kubectl可以查看L7 API調(diào)用,但不會(huì)讓我們監(jiān)視任何網(wǎng)絡(luò)流量秽誊。而kubesshark抓取L3和L7鲸沮,實(shí)際上它可以訪問整個(gè)L2框架,可以將創(chuàng)建儀表板/視圖來可視化锅论,就像Wireshark一樣讼溺。
kubeshark解決了什么問題?
-
監(jiān)控一切 —— 監(jiān)控Pod到Pod的網(wǎng)絡(luò)流量、API調(diào)用最易、監(jiān)控單個(gè)節(jié)點(diǎn)怒坯、服務(wù)或特定路徑,如
/latest/meta-data
或/health
等藻懒。 - 可視化 —— Kubeshark Viewer非常簡單剔猿,但支持強(qiáng)大的實(shí)時(shí)流量查看、過濾嬉荆、分析和問題排查功能归敬,右側(cè)窗口里的請(qǐng)求響應(yīng)詳細(xì)信息非常清晰。
- PCAP存儲(chǔ) —— 存儲(chǔ)PCAP以供將來分析,可以輕松將其轉(zhuǎn)儲(chǔ)到S3或其他存儲(chǔ)中汪茧,供稍后加載并可視化椅亚。
- 更容易調(diào)試 —— 無論是調(diào)試,還是加深對(duì)集群中各個(gè)組件之間通信的理解陆爽,都能獲得極大支持什往。
- 實(shí)時(shí)告警 —— 可以使用kubesshark允許基于獲取的數(shù)據(jù)為k8s構(gòu)建真正強(qiáng)大的告警系統(tǒng),例如獲取密鑰調(diào)用失敗慌闭、實(shí)例元數(shù)據(jù)調(diào)用失敗以及其他類似異常。
自己動(dòng)手
安裝Kubeshark躯舔,看看它是如何工作的驴剔,通過以下命令安裝KubeShark:
sh <(curl -Ls https://kubeshark.co/install)
要支持特定版本和架構(gòu)的,請(qǐng)從 https://github.com/kubeshark/kubeshark/releases/ 下載二進(jìn)制文件粥庄。
啟動(dòng)Kubeshark:
kubeshark tap -A
tap -A表示監(jiān)控所有命名空間丧失,指定-n表示監(jiān)控指定命名空間。
kubeshark tap -n kube-system
Kubeshark將開始監(jiān)控/獲取流量惜互,并在本地主機(jī)的端口8899上啟動(dòng)查看器布讹。
我用KOPS部署了測試集群训堆,注意Kubeshark二進(jìn)制文件從~/.kube/config
查看當(dāng)前上下文描验,并用相同的憑據(jù)和集群來創(chuàng)建其資源并開始監(jiān)控。
你可以創(chuàng)建一個(gè)本地kind集群來快速了解Kubeshark是如何工作的坑鱼。
玩一會(huì)兒
讓我們看看要監(jiān)控什么膘流,kubeshark的儀表板上有哪些功能,這些是用來測試kubesshark的過濾器樣本鲁沥。
單節(jié)點(diǎn)監(jiān)控 ——
可視化服務(wù)地圖 ——
監(jiān)控AWS實(shí)例元數(shù)據(jù)安全憑證路徑 ——
一些思考
- 有助于加深對(duì)集群中各個(gè)組件如何在盡可能低的級(jí)別上進(jìn)行通信和協(xié)同工作的理解呼股。
- 通過向流量添加適當(dāng)?shù)倪^濾器,調(diào)試/故障排除變得非常簡單画恰。
- 服務(wù)地圖從可視化的角度提供了一個(gè)關(guān)于集群的高層次概述彭谁。
- 可以擴(kuò)展數(shù)據(jù)做實(shí)時(shí)告警,包括操作和安全警報(bào)允扇。
- 在適當(dāng)規(guī)模上做性能基準(zhǔn)測試缠局,看看這個(gè)工具是如何擴(kuò)展,如何影響計(jì)算和存儲(chǔ)蔼两,因?yàn)榱髁炕诩阂?guī)模呈指數(shù)級(jí)增長。
- 老實(shí)說妙啃,將它與Sysdig falco或Cilium Tetragon進(jìn)行比較是不公平的揖赴,它捕獲和調(diào)整數(shù)據(jù)的方式更關(guān)注實(shí)時(shí)檢測方面,并考慮在與K8S API異常更相關(guān)的安全方面使用渐北。
- 也許這是一個(gè)應(yīng)該廣泛使用的工具赃蛛,以便更好理解底層調(diào)用呕臂,從而編寫與控制平面更相關(guān)的更好的運(yùn)行時(shí)安全策略肪跋,但對(duì)檢測任何容器異持菁龋或與容器運(yùn)行時(shí)AFAIK相關(guān)的異常沒有多大幫助。
結(jié)論
Kubeshark是個(gè)功能強(qiáng)大的工具阐虚,早期被稱為Mizu晤郑,由UP9開發(fā)造寝,作為API流量查看器诫龙,后來開源并改名為Kubeshark,以表明這是基于K8S重制的Wireshark谷异。
雖然有一些復(fù)雜的k8s運(yùn)行時(shí)安全工具歹嘹,如Sysdig Falco尺上、Cilium Tetragon,都是利用eBPF功能構(gòu)建的卑吭,文檔中提到Kubeshark也使用eBPF豆赏,但其更側(cè)重于在微觀層面提供可視化層掷邦,以更好的理解通信耙饰。Kubeshark提供的數(shù)據(jù)絕對(duì)可以用于運(yùn)行時(shí)檢測纹份。
Github鏈接: https://github.com/kubeshark/kubeshark
官網(wǎng): https://kubeshark.co
你好蔓涧,我是俞凡元暴,在Motorola做過研發(fā)兄猩,現(xiàn)在在Mavenir做技術(shù)工作枢冤,對(duì)通信淹真、網(wǎng)絡(luò)、后端架構(gòu)巍糯、云原生祟峦、DevOps宅楞、CICD、區(qū)塊鏈搓幌、AI等技術(shù)始終保持著濃厚的興趣溉愁,平時(shí)喜歡閱讀拐揭、思考堂污,相信持續(xù)學(xué)習(xí)盟猖、終身成長换棚,歡迎一起交流學(xué)習(xí)固蚤。
微信公眾號(hào):DeepNoMind