
SuperEdge 研发团队 FabEdge 研发团队 腾讯云容器中心边缘计算团队
在边缘计算的场景下,边缘节点和云端为单向网络,从云端节点无法直接访问边缘节点,导致了以下的问题:
2021 年 8 月 2 日,博云正式开源 FabEdge 边缘网络方案。FabEdge 主要解决边缘计算场景下,容器网络配置管理复杂、网络割裂互不通信、缺少服务发现、缺少拓扑感知能力、无法提供就近访问等难题。为了使用户无感知单向网络带来的的差异,我们与 FabEdge 社区合作,实现在云边 podIp 直通。

FabEdge 在 SuperEdge 的基础上,建立了一个基于 IPSec 隧道的,三层的数据转发面,使能云端和边缘端 POD 通过 IP 地址直接进行通讯,包括普通的 POD 和使用了 hostnework 的 POD,以及通过 ClusterIP 访问 Service,不论 Service 的 Endpoint 在云端或边缘端。
FabEdge 包括三个主要组件:

以上图环境为例,一共4个节点,两个云端的节点:node1, node2, 两个边缘节点:edge1, edge2。node1和 node2 运行 Flannel,它们之间会有一个 flannel 管理的 VXLAN 的隧道。edge1 和 edge2 由 FabEdge 管理,会建立到运行 Connector 的节点 node1 的 IPSec 的隧道。
同时,edge1 和 edge2 加入了同一个 FabEdge 的 Community, 因此它们之间会有一条直连的 IPSec 隧道。在边缘节点上,POD 接入一个 Linux 的网桥,获取一个全局唯一的 IP 地址。
几种典型的访问场景如下:

在 SuperEdge 边缘独立集群中添加4个节点,2个节点(cloud-1和cloud-2)在云端和 master 节点在同一内网,2个节点(edge-1和edge-2)在边缘端。将 cloud-1 节点作为 connector 节点,将 edge-1 和 edge-2 加入 community。具体的搭建过程,请参照 FabEdge文档[1]。

FabEdge 在 edge-1 节点的 node 资源写入 cloud-1 的节点的内网 IP 和 flannnel.1 网卡的 mac 地址,将 edge-1 伪装成 cloud-1 节点。
metadata:
annotations:
flannel.alpha.coreos.com/backend-data: '{"VtepMAC":"cloud-1 flannel.1 mac"}'
flannel.alpha.coreos.com/backend-type: vxlan
flannel.alpha.coreos.com/kube-subnet-manager: "true"
flannel.alpha.coreos.com/public-ip: cloud-1 内网ipcloud-1 上的 pod,由于不需要通过 flannel 的网络将请求转发到 cloud-1,因此pod的请求不会经过 cloud-1 的 flannel.1。
由于 edge-1 和 edge-2 在同一个 community,FabEdge 会在节点之间建立 ipsec vpn 隧道,边缘节点 pod 之间的请求,会通过 ipsec vpn 隧道进行转发。
边缘端 pod 的部署方式 | 云端 pod 的部署方式 | 测试项 | 测试结果 |
|---|---|---|---|
hostnetwork | podIp | cloud-1 访问edge-1 | 通过 |
cloud-1 访问edge-2 | 通过 | ||
cloud-1 访问clusterIp | 通过 | ||
podIp | hostnetwork | apiserver 访问service | 通过 |
apiserver 访问edge-1 | 通过 | ||
apiserver 访问edge-2 | 通过 | ||
podIp | cloud-1访问edge-1 | 通过 | |
cloud-1访问edge-2 | 通过 | ||
cloud-1访问clusterIp | 通过 | ||
cloud-2 访问edge-1 | 通过 | ||
cloud-2访问edge-2 | 通过 | ||
cloud-2访问clusterIp | 通过 | ||
hostnetwork | cloud-1 访问edge-1 | 通过 | |
cloud-1 访问edge-2 | 通过 | ||
cloud-1 访问clusterIp | 通过 | ||
cloud-2 访问edge-1 | 通过 | ||
cloud-2 访问edge-2 | 通过 | ||
cloud-2 访问clusterIp | 通过 |
云端 pod 的部署方式 | 边缘端 pod 的部署方式 | 测试项 | 测试结果 |
|---|---|---|---|
podIp | hostnetwork | edge-1 访问cloud-1 | 通过 |
edge-1 访问cloud-2 | 通过 | ||
edge-1 访问clusterIp | 通过 | ||
edge-2 访问cloud-1 | 通过 | ||
edge-2 访问cloud-2 | 通过 | ||
edge-2 访问clusterIp | 通过 | ||
podIp | edge-1 访问cloud-1 | 通过 | |
edge-1 访问cloud-2 | 通过 | ||
edge-1 访问clusterIp | 通过 | ||
edge-2 访问cloud-1 | 通过 | ||
edge-2 访问cloud-2 | 通过 | ||
edge-2 访问clusterIp | 通过 | ||
hostNetwork | podIp | edge-1 访问cloud-1 | 通过 |
edge-1 访问cloud-2 | 通过 | ||
edge-1 访问clusterIp | 通过 | ||
edge-2 访问cloud-1 | 通过 | ||
edge-2 访问cloud-2 | 通过 | ||
edge-2 访问clusterIp | 通过 |
被访问的边缘端 pod 部署方式 | 发起请求的 pod 的部署方式 | 测试项 | 测试结果 |
|---|---|---|---|
hostNetwok | podIp | edge-2 访问edge-1 | 通过 |
edge-2 访问clusterIp | 通过 | ||
edge-1 访问edge-2 | 通过 | ||
edge-1 访问clusterIp | 通过 | ||
podIp | podIp | edge-2 访问edge-1 | 通过 |
edge-2 访问clusterIp | 通过 | ||
edge-1 访问edge-2 | 通过 | ||
edge-1 访问clusterIp | 通过 | ||
hostnetwork | edge-1 访问edge-2 | 通过 | |
edge-1 访问clusterIp | 通过 | ||
edge-2 访问edge-1 | 通过 | ||
edge-2 访问clusterIp | 通过 |
根据以上的测试结果可以得出以下的结论:
SuperEdge 和 FabEdge 已完成了一期的集成工作,社区有不少小伙伴对这个联合方案感兴趣。两个开源社区主要研发团队也一直在推进合作,近期腾讯云和博云建立了开源技术合作关系,并且博云加入到腾讯云原生加速器项目中,双方将会进一步加强合作,为开源社区贡献优秀的开源项目。

后续 FabEdge 和 SuperEdge 还会找更多的边缘网络场景进行互相合作,确定会进行的一些 TODO 如下:
欢迎持续关注 SuperEdge 和 FabEdge 对边缘网络方面的支持。
[1]
FabEdge文档: 【https://github.com/FabEdge/fabedge/blob/Release-v0.3-beta/docs/integrate-with-superedge.md】


往期精选推荐

