OpenYurt v0.7.0 版本解讀:無侵入的跨網路域解決方案 Raven

語言: CN / TW / HK

作者: 陳錦賜、何淋波

北京時間 5 月 27 號,OpenYurt 釋出 v0.7.0 版本。

新版本中重點發布 Raven 解決方案,該方案在對原生的容器網路方案無侵入的狀態下,優雅的解決跨公網的雲邊,邊邊的 Pod 間通訊問題,方便的滿足了雲邊協同場景下對容器網路的訴求。同時在 OpenYurt v0.7.0 中,也完成對 EdgeX Foundry 的 LTS 版本(Jakarta)的支援,以及 K8s 版本 v1.22 的支援。

無侵入的單叢集跨邊緣容器網路打通方案 Raven

Cloud Native

在 OpenYurt 叢集中提供包括跨公網邊-邊、邊-雲之間的單叢集容器網路聯通能力,其主要技術原理是通過 公網加密隧道 讓不同的邊緣節點上的容器網路相互打通,從而實現跨邊的業務流量或者管控流量的通訊。並且相容當前主流的容器網路解決方案(如 flannel,calico 等),即 NodePool 內的通訊仍使用原生容器網路方案。

專案背景

在邊緣計算中,邊-邊和邊-雲通訊是常見的網路通訊場景。對於 OpenYurt 專案,我們已經引入了 YurtTunnel 來應對邊雲協作中的運維和監控的網路問題。它提供了對邊緣節點執行 kubectl exec/logs 並從邊緣節點獲取監控指標的功能。但是 YurtTunnel 解決的問題只是邊雲通訊的一個子集,在 v0.7.0 版本以前還沒有邊-邊、邊-雲容器網路通訊的解決方案。

即在某些情況下,OpenYurt 叢集中不同物理區域的 Pod 可能需要使用 Pod IP、Service IP 或 Service name 與其他 Pod 通訊,雖然這些 Pod 位於單個 K8s 叢集中,但它們處於不同物理區域(網路域)中無法直接通訊。

設計理念及架構

Raven 專案從需求討論,到方案設計,以及最後的落地實現等都是基於開源社群成員的協同下完成的,整體設計理念主要有:

  • 無侵入:對原生的 K8s CNI 網路無侵入,僅劫持跨邊流量進行轉發

  • 與主流的容器網路方案(如 flannel, calico)可無縫協同執行

  • 高安全性:確保跨公網通訊的資料安全

同時 Raven 解決方案的架構如下圖:

  1. Raven Controller Manager:標準的 Kubernetes 控制器,以 Deployment 的方式部署在部分雲上節點中,負責監控邊緣節點狀態,為每一個邊緣節點池選取一個跨邊流量的出口作為 gateway node,並能夠在當前 gateway node 失活的情況下完成 gateway node 的切換。所有的跨邊流量都將由各個邊緣節點池的 gateway node 完成轉發。

  2. Raven Agent:以 DaemonSet 的方式部署,執行在叢集的每一個節點,它根據每個節點的角色(gateway or non-gateway)在節點上配置路由資訊或 VPN 隧道資訊。

上述兩個元件通過一個 Gateway CRD 來交換配置路由和建立 VPN 隧道的必要資訊,如圖 2 所示:

更多細節可以參看專案程式碼倉庫:

  1. Raven Controller Manager

    https://github.com/openyurtio/raven-controller-manager

  2. Raven Agent

    https://github.com/openyurtio/raven

特點與優勢

  1. 無侵入:對原生的 K8s CNI 網路無侵入,即對在同一邊緣節點池的流量不進行劫持,複用叢集本身的 CNI 能力

  2. 安全可靠:使用成熟穩定的 IPsec 技術對跨邊流量進行加密

  3. 完善的相容性:與主流的容器網路方案(如 flannel,calico)可無縫協同執行

  4. 高效能:Raven 在跨邊流量的處理上會盡量利用邊緣本身的網路能力,儘可能地建立邊-邊的 VPN 隧道,不會把所有的跨邊流量都通過雲上中心端轉發

支援 EdgeX Foundry LTS 版本

Cloud Native

EdgeX Foundry Jakarta 是第一個 LTS 版本,被廣泛認為是一個產品版本。在 OpenYurt v0.7.0 中已經完成了 EdgeX Foundry Jakarta 版本的支援工作。由於 EdgeX Jakarta 版本切換到 API v2,因此 OpenYurt 優化了與 EdgeX 的適配邏輯,同時 CRD 也有部分優化。具體可以參照  [#30]

支援 Kubernetes v1.22 版本

Cloud Native

OpenYurt 為適配 Kubernetes v1.22,主要工作包括: v1beta1.CSR 被資源移除以及 CSR.signerName 校驗更新後,OpenYurt 中有申請證書的各元件做了對應適配。同時 Service Topology 特性適配 v1.EndpointSlice 資源的請求,以及雲邊隧道 YurtTunnel 針對 StreamingProxyRedirects featuregate 被移除的適配。具體參照  [#809]

支援 IPv6 網路

Cloud Native

IPv6 網路首先需要 CNI 容器網路支援,在 OpenYurt 中主要 Yurthub 和 YurtTunnel 中涉及到網路配置,證書申請等相關處理完成相關適配。具體參考  [#842]

未來計劃

Cloud Native

OpenYurt v0.7.0 版本重點推出了跨網路域的解決方案 Raven,同時也推出了 EdgeX Foundry LTS 版本支援,K8s v.122 支援,IPv6 網路等多方向的能力。再次感謝來自 VMware,Intel,電信天翼雲,深信服,新華智雲,浙大,京東,美團,位元組,阿里雲等數十位同學的大力貢獻。

目前 OpenYurt v0.8.0 版本開發正在穩步推進,同時為更好的支援社群發展,OpenYurt 社群成立了 ControlPlane, DataPlane,IoT 等 SIG 來協同社群 15+個專案。同時也歡迎有興趣的同學來參與共建,共同探索一個穩定,可靠的無侵入雲原生邊緣計算平臺的事實標準。

OpenYurt v0.8.0 版本的 roadmap 請關注:

https://github.com/openyurtio/openyurt/blob/master/docs/roadmap.md

參考連結:

OpenYurt Release v0.7.0

https://github.com/openyurtio/openyurt/releases/tag/v0.7.0

OpenYurt v0.7.0 CHANGELOG

https://github.com/openyurtio/openyurt/blob/master/CHANGELOG.md#v070

OpenYurt v0.8.0 RoadMap

https://github.com/openyurtio/openyurt/blob/master/docs/roadmap.md#v080-roadmap

Gateway CRD

https://github.com/openyurtio/raven-controller-manager/blob/main/pkg/ravencontroller/apis/raven/v1alpha1/gateway_types.go

https://github.com/openyurtio/raven-controller-manager/blob/main/pkg/ravencontroller/apis/raven/v1alpha1/gateway_types.go

[#30]: https://github.com/openyurtio/yurt-device-controller/pull/30

[#809]: https://github.com/openyurtio/openyurt/pull/809

[#842]: https://github.com/openyurtio/openyurt/pull/842

如果您對於 OpenYurt 有任何疑問,歡迎使用釘釘掃描二維碼或者搜尋群號(31993519)加入釘釘交流群。

戳原文,立即瞭解 OpenYurt 專案!