核心級流量治理引擎Kmesh八大新特性解讀

华为云开发者联盟發表於2024-10-11

本文分享自華為雲社群《核心級流量治理引擎 Kmesh v0.5 釋出!進擊的Sidecarless服務網格》,作者:雲容器大未來。

我們非常高興地宣佈 Kmesh v0.5.0 的釋出。首先,感謝我們的貢獻者在過去兩個月中的辛勤工作。在 v0.5.0 版本中,我們進行了許多重要的增強,包括命令列工具 kmeshctl、更全面的端到端測試覆蓋、底層 eBPF 資訊的視覺化改進、可觀測性增強、完整的重啟支援、CNI 安裝程式的改進以及 XDP 程式中的 RBAC 支援。此外,在本次釋出週期中,我們修復了許多關鍵的 Bugs,重構了部分關鍵程式碼,並增加了更多測試覆蓋,使 Kmesh 更加穩定和健壯。

Kmesh背景回顧

儘管以 Istio 為代表的服務網格在過去幾年得到了廣泛的關注並取得了顯著的知名度,但 Istio 社群曾經重點推廣的 Sidecar 模式在資源開銷和資料鏈路延遲等方面會對工作負載產生顯著影響,因此使用者在選擇落地方案時仍然相對謹慎。此外,Sidecar 模式的一個主要缺點是其與業務容器的生命週期強繫結,無法獨立進行升級。為了解決這些問題,Kmesh 創新性地提出了基於核心的無 Sidecar 流量治理方案,將流量治理下沉至核心層面。當前Kmesh支援“Kernel-Native”和“Dual-Engine”兩種模式。

對於“Kernel-Native”模式,由於 eBPF 技術非常適合四層流量治理,並且結合可程式設計核心模組,可以實現七層流量編排。Kmesh 最初完全依賴 eBPF 和核心模組來實現 L4-L7 的治理。Kmesh 採用隨流治理策略,不會在服務通訊過程中增加額外的連線跳數,與 Sidecar 模式相比,服務之間的通訊連線數從三條減少至一條。“Kernel-Native”模式的架構圖如下:

同時,為了增強七層協議的治理能力,今年 Kmesh 引入了一種新的治理模式——“Dual-Engine”模式,利用 eBPF 將流量轉發到 kmesh-waypoint 進行高階的七層協議治理。這是一種更靈活的分層治理模型,能夠按需滿足不同使用者的多樣化需求。

Kmesh 0.5版本關鍵特性解析

Kmesh重啟時的零停機時間

現在,Kmesh 可以在重啟後優雅地重新載入 eBPF Map 和程式,且不需要在重啟後重新註冊名稱空間或特定 Pod。這意味著在重啟期間,流量不會中斷,這對使用者來說是一個巨大的好處。在 kmesh-daemon 重啟後,eBPF Map 配置將自動更新為最新狀態。

如上圖所示透過將 eBPF程式 pin 在核心目錄上,kmesh 關閉後 eBPF 依然可以正常對流量進行治理,保證 kmesh 重啟過程中服務不中斷。

在 kmesh 重啟後,將 bpf_map 中存放的 config 與最新獲取的 config 作對比,將 bpf_map 中的 config 更新至最新。

在 v0.4.0 版本中,Kmesh 重啟後需要重新啟動所有由 Kmesh 管理的 Pod,以便重新管理,因為該管理是由 CNI 外掛觸發的。現在這一過程已在 kmesh-daemon 中完成,因此 Pod 不需要重新啟動即可重新管理。

可觀測性增強

現在,Kmesh 支援 L4 訪問日誌,使使用者能夠清晰地視覺化 Kmesh 管理的流量。請注意,訪問日誌預設未啟用。您可以透過修改 Kmesh 中 spec.containers.args 的 --enable-accesslog 引數來啟用訪問日誌功能。我們還將支援使用 kmeshctl 動態啟用訪問日誌。

訪問日誌的示例如下:

accesslog: 2024-09-14 08:19:26.552709932 +0000 UTC
src.addr=10.244.0.17:51842, src.workload=prometheus-5fb7f6f8d8-h9cts, src.namespace=istio-system,
dst.addr=10.244.0.13:9080, dst.service=productpage.echo-1-27855.svc.cluster.local, dst.workload=productpage-v1-8499c849b9-bz9t9, dst.namespace=echo-1-27855, direction=INBOUND, sent_bytes=5, received_bytes=292, duration=2.733902ms

其中各個欄位的含義為:

同時,為 Kmesh 適配的 Grafana 外掛也已新增,以便更好地視覺化各維度的監控指標。此外,可觀測性方面的一些關鍵問題已得到修復,有效提高了其準確性和穩定性。

將授權執行下沉到XDP程式中

在 v0.3.0 版本中,Kmesh 已支援 L4 RBAC,但之前的解決方案是在使用者空間中進行 RBAC,這在效能和功能上存在一些問題。現在我們已將其下沉到 XDP eBPF 中,這項功能將真正可用。目前,鑑權規則已轉移到 eBPF Map中,這使得能夠完全在 eBPF 程式中執行授權。當授權結果為拒絕時,XDP 程式會直接丟棄請求資料包,從而使客戶端能夠檢測到連線失敗。

下沉到 XDP 程式的關鍵是使用了 eBPF 的 tail-call 機制,將不同的匹配規則透過 tail-call 串聯起來,遵循了原先在使用者空間進行鑑權的邏輯。

如上圖所示,叢集內配置的鑑權規則透過訊息訂閱機制,被寫入 eBPF Map。Pod 上入方向的流量在建鏈時,會在 XDP 程式中進行鑑權規則匹配,如果鑑權結果為拒絕,則包被丟棄;如果鑑權結果為允許,則流量將透過協議棧傳送到對應的 App 程序。

更好的除錯能力

我們新增了命令列工具 kmeshctl!現在,您無需進入相應的 Kmesh 守護程序 Pod 來調整 Kmesh 守護程序的日誌級別或轉儲配置。您可以直接使用 kmeshctl:

# 調整 kmesh-daemon 日誌級別(例如,debug | error | info)
kmeshctl log kmesh-6ct4h --set default:debug
# 轉儲配置
kmeshctl dump kmesh-6ct4h workload

未來將為 kmeshctl 新增更多功能,以便使用者更好地管理和除錯 Kmesh。

更好的底層BPF Map視覺化

之前我們有介面 /debug/config_dump/ads/debug/config_dump/workload 來輸出 Kmesh 守護程序中快取的配置內容。由於各種原因,Kmesh 守護程序快取中的配置與實際的 eBPF 可能並不完全一致。如果我們能獲取閱讀友好的 eBPF 資訊,將更有助於我們進行故障排查。現在,我們可以透過介面 /debug/bpf/* 獲取這些資訊。這些資訊也將被整合到 kmeshctl 中,方便檢視,並且可以進一步擴充套件,以判斷底層 eBPF 是否與 Kmesh 守護程序中的配置同步。

# Get eBPF info in dual-engine mode
kubectl exec -ti -n kmesh-system kmesh-6ct4h -- curl 127.0.0.1:15200/debug/config_dump/bpf/workload
# Get eBPF info in kernel-native mode
kubectl exec -ti -n kmesh-system kmesh-6ct4h -- curl 127.0.0.1:15200/debug/config_dump/bpf/ads

改進CNI安裝程式

由於 CNI 安裝程式是 Kmesh 守護程序,如果 kmesh-daemon 意外崩潰或機器突然斷電,CNI 將無法解除安裝 CNI 配置。如果 kubeconfig 的 token 過期,則 kmesh-daemon 異常退出後,任何 Pod 都無法成功啟動。因此,我們採取了以下兩種方法來解決此問題:

  • start_kmesh.sh 的末尾清理 CNI 配置。

  • 在CNI安裝程式中新增一個單獨的Go協程,一旦token檔案被修改,更新 kubeconfig 檔案。這可以確保 kubeconfig 檔案不容易過期。

支援HostNetwork工作負載

現在,對於 Kmesh 雙引擎模式,我們支援透過 HostNetwork Pods 訪問服務。

效能提升

在雙引擎模式中,我們透過使用本地快取來最佳化工作負載和服務響應處理期間的 BPF Map更新,避免了對 BPF Map的迴圈遍歷。

關鍵Bug修復

我們還修復了一些重大 Bug:

  • 透過不刪除前端Map,防止在工作負載資源更新期間失去流量控制。

  • 來自名稱空間 waypoint 的流量將再次重定向到 waypoint,避免了死迴圈。現在我們跳過了來自 waypoint 的流量管理。

  • 修復了當 waypoint 處理非 HTTP TCP流量時,會意外返回HTTP/1.1 400 Bad Request 的問題。#681

致謝貢獻者

Kmesh v0.5.0 版本包含了來自14 位貢獻者的 567 次程式碼提交,在此對各位貢獻者表示由衷的感謝:

我們始終以開放中立的態度發展 Kmesh,持續打造 Sidecarless 服務網格業界標杆方案,服務千行百業,促進服務網格健康有序的發展。Kmesh 當前正處於高速發展階段,我們誠邀廣大有志之士加入!

參考連結

Kmesh Release v0.5.0: https://github.com/kmesh-net/kmesh/releases/tag/v0.5.0

Kmesh GitHub: https://github.com/kmesh-net/kmesh

Kmesh Website: https://kmesh.net/

【更多華為云云原生乾貨推薦】華為云云原生王者之路集訓營


華為云云原生王者之路集訓營

為幫助廣大技術愛好者快速掌握雲原生相關技能,華為云云原生團隊與華為雲學院聯合CNCF開源軟體大學啟動人才培養計劃,推出《華為云云原生王者之路集訓營》,從雲原生基礎知識介紹到最佳實踐講解、底層原理和方案架構深度剖析,層層深入,滿足不同雲原生技術基礎和學習目標人群的需求。本課程還精選數十個企業典型應用場景,作為學員上機實踐案例,幫助學員將所學技術快速與企業業務相結合,服務於企業生產。

點選免費參加華為云云原生王者之路集訓營https://edu.huaweicloud.com/roadmap/cloudnative1.html

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章