Raven

1. 背景介绍

在边缘计算中,边-边和边-云通信是常见的网络通信场景,在OpenYurt中,我们已经引入了YurtTunnel来应对边云协作中的运维和监控的网络问题,提供对边缘节点执行 kubectl exec/logs 并从边缘节点获取监控指标的功能,但是YurtTunnel 解决的问题只是边云通信的一个子集,我们还需要提供边-边、边-云容器网络通信的解决方案。

即在OpenYurt集群中,位于不同物理区域的Pod可能需要使用Pod IP、Service IP 或Service name与其他Pod通信,虽然这些Pod位于单个K8s集群中,但它们处于不同物理区域(网络域)中,无法直接通信。因此,我们提出了Raven项目来解决这一问题。

2. 整体架构

如下图所示,目前Raven的架构主要包含以下两个组件:

img

  • Raven Controller Manager:标准的Kubernetes控制器,以Deployment的方式部署在部分云上节点中,负责监控边缘节点状态,为每一个边缘节点池选取一个跨边流量的出口作为gateway node,并能够在当前gateway node失活的情况下完成gateway node的切换,所有的跨边流量都将由各个边缘节点池的gateway node完成转发;
  • Raven Agent:以DaemonSet的方式部署,运行在集群的每一个节点,它根据每个节点的角色(gateway or non-gateway)在节点上配置路由信息或VPN隧道信息;

上述两个组件通过一个Gateway CRD 来交换配置路由和建立VPN隧道的必要信息,如下图所示:

img

更多实现细节可以参考Raven项目的代码仓库:

3. 特性及优势

特性:

  • 无侵入:对原生的K8s CNI网络无侵入,仅劫持跨边流量进行转发
  • 安全:使用成熟稳定的IPsec技术对跨边流量进行加密

优势:

  • Raven在跨边流量的处理上会尽量利用边缘本身的网络能力,尽可能地创建边-边的VPN隧道,不会把所有的跨边流量都通过云上中心端转发
  • Raven对在同一边缘节点池的流量不进行劫持,复用集群本身的CNI能力

4. 版本记录

Raven Controller Manager版本:

版本号镜像地址发布时间发布内容备注
v0.1.0openyurt/raven-controller-manager:v0.1.02022.05首次发布支持 Gateway Node 选举

Raven Agent版本:

版本号镜像地址发布时间发布内容备注
v0.1.0openyurt/raven-agent:v0.1.02022.05首次发布支持 IPSec 作为VPN 后端

5. 未来计划

  • 除IPsec之外,支持更多的VPN技术,例如:WireGuard 【issue #13
  • 支持IPVS后端的流量转发 【issue #16
  • 云端支持LB的公网暴露方式 【issue #22
  • 支持NAT穿越 【issue #13
  • 支持分布式路由决策 【issue #14
    • 路由路径的cost计算
    • 根据cost计算最短路径
    • 在路径更改期间保持网络连接处于active状态

欢迎感兴趣的同学加入我们,贡献代码!!!