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 项目!