作者
作者李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。
背景
在边缘集群中,边缘端和云端为单向网络,云端无法主动连接边缘端,常见的解决方案是边缘端主动和云端(tunnel server)建立长连接,云端通过长连接将请求转发到边缘端。在云端隧道 server 实例扩容后需要考虑新增的实例对已有的边缘端长连接转发的影响。出于系统稳定性的考虑,能通过云边隧道采集到边缘端的监控信息。
社区方案ANP
隧道云端 Server 自动扩缩容
ANP 主要用于代理转发 apiserver 的请求,架构图如下图所示:
ANP 的 server 仅支持单实例,如果是多实例会存存在以问题,下面根据多实例的架构图进行说明:
- ANP Agent 需要和所有的 ANP Server 实例建立长连接。
- ANP Server 扩容之后,支持接入的 ANP Agent 的规模不会增加
节点监控
ANP 项目主要针对 K8s 1.16版本发布的特性 EgressSelector,在这个特性中 apiserver 会首先使用 HTTP CONNECT 方法建立隧道,然后通过隧道把请求边缘端的请求发送到 ANP Server,ANP Server 通过与 ANP Agent 建立的长连接,把请求发送到边缘端。业界常用的监控采集组件 Prometheus 是不支持 EgressSelector 特性的,因此使用 ANP 项目是无法支持节点监控的。
SuperEdge 云边隧道(tunnel)方案
SuperEdge 云边隧道 tunnel 在方案设计时使用 DNS 做边缘节点的注册中心,注册中心存储的是 tunnel-edge 的ID 和 tunnel-edge 连接到 tunnel-cloud 的 podIp,在做 apiserver 到边缘端请求转发时可以根据注册中心的ID将请求转发到边缘端连接到的 tunnel cloud 的 pod 上,具体架构图如下所示: