伴随着不断出现的外部,内部挑战,我们将业务向公有云迁移。随着时间的推移,逐渐形成了混合云架构。
混合云架构需要组建虚拟专用网络,实现资源互通,满足加密传输要求。混合云网络连接类型总结如下:
1、VPC到VPC(同一个云服务商)
2、VPC到VPC(不同云服务商之间)
3、 企业本地网络到VPC
常见的组网方案有:专线,VPN,SD-WAN。但也会带来以下问题:
首先是VPC的互通。例如,将阿里云北京的VPC资源接入AWS新加坡的VPC。通常我们使用VPN软件解决,但繁琐的CLI和不同云服务商不同工作流的部署方法,会造成在基础设施上花费太多的精力。
其次是VPC和企业私网互通。例如,将阿里云杭州的VPC基础设施接入到北京的数据中心。传统的连接方式依赖硬件,需要改动网络,部署花费几天或几周的时间。
最后则是快速提供网络服务能力。业务需求是更快的发布应用程序。拼凑使用多种连接方式组网,会使网络架构臃肿,增加复杂度。快,敏捷将是难以实现的。
基于以上问题。如何减少网络改动,采用一致的工作流程,简化加密隧道的创建,删除和管理?我们结合容器,探究出了一种自动化实现方案。
从图中可以看出,我们参考了SDN软件架构设计,将VPN网关的功能抽象出来逻辑分层,实现集中管理。
VPN组网自动化方案需要以下3个组件:
1、VPN容器
部署在VPC或本地网络
处理IPSec流量
通过WebSocket与控制器连接
2、控制器
通过Restful API完成指定隧道的创建,删除,管理
通过云服务商API完成VPC的路由配置
通过Restful API与Web Client通信
3、Web Client
配置管理界面
连接可视化
各组件连接关系如下图:
云与云创建VPC加密对等连接的过程及其实现如下:
1、用户在管理界面点击需要互通的网络,Web Client向控制器发送创建连接请求,控制器向指定VPN容器下发IPSec配置,同时在VPC路由表添加到达对端网络的路由条目。配置完成后拉起隧道,两端网络完成互通。
2、如果遇到两端网络VPC CIDR冲突的情况,可以通过管理界面修改指定连接的CIDR,Web Client向控制器发送修改CIDR请求,控制器向VPN容器下发新的IPSec配置,同时更新VPC路由条目。完成后重新拉起隧道。
3、如果网络环境发生变化,例如云服务器的公网IP变更,监控服务会通知容器自动更新IPSec配置,同时更新VPC路由条目,重新拉起隧道。
以上就是系统的工作原理。从中我们可以看出,系统已经很好地解决了传统连接方式所遇到的问题:
1、控制器通过VPN容器API接口完成IPSec连接配置,使用云服务商API接口完成VPC路由配置,从而实现了自动化。这种设计的优势在于可以消除复杂度,不需要网络工程师,任何人都可以运行。
2、对于企业和云网络互通需求,由运行在本地数据中心的VPN容器向运行在云网络的VPN容器发起IPSec连接,这样设计是为了避免对企业网络进行改动,减少对硬件设备的依赖,适应主流的互联网接入方式。
3、采用容器化的部署方式,简化部署过程。由于采用了集中管理,分布运行的设计,可以满足随处运行,可持续升级的需求。
为了提高使用体验,我们在设计与实现时考虑到了很多细节,在这里拿出来与大家分享。
1、容器与控制器的通信协议选择
在选择容器与控制器通信协议时,考虑了以下几点:
A、控制器能及时联系到容器:用户在Web界面的操作(例如下发配置信息或查询运行状态数据),得到及时响应;
B、尽可能减少对运行环境的要求,比如开放端口、配置防火墙等;
C、适应运行环境的各种Internet接入方式,包括直接路由、NAT、Proxy。
基于上述约束,初步确定了容器作为通讯的客户端,控制器作为通讯的服务端。
在具体通信协议的选择时,考虑了MQTT和WebSocket。两者比较,前者有成熟的开源组件,用很少的开发就可以实现设备接入、消息路由、数据存储、自动订阅 、状态监控等功能;而后者实现相同的功能,需要额外的工作量。但是考虑到WebSocket基于HTTP/HTTPS,对防火墙更友好,我们选择了WebSocket作为网关与控制器的通信协议。网关作为WebSocket客户端,控制器作为WebSocket服务端,这样实现了用户侧的防火墙零配置,而基于WebSocket的长连接又可以满足通信的实时性。
2、如何简化部署及使用?
在用户部署对等网络时,我们希望能够将用户的操作最简化,不需要去查VpcID、RouterTableID、CidrBlock等等信息,只需要输入容器的公网IP地址。为实现这个目标,我们充分利用云厂商的API来获取配置所需的参数、信息,再通过API完成VPC路由的配置。
各家公有云的实现不一样,API的表现也不一样。例如VPC路由配置API,有的厂商是同步操作,有的是异步操作。异步操作又间接限制并发请求,甚至对API调用间隔也产生了间接限制。我们对各家公有云厂商的API进行适配,最终实现配置简化的目标。
3、控制器的设计
控制器与容器的交互仅限于配置信息下发、运行状态查询等带外管理功能。网络之间的流量直接通过VPN容器建立起来的加密隧道传输,不经过控制器。考虑到控制器存在单点故障的可能性,控制器采用了多活集群设计,可以横向扩展,实现容器带外管理负载。
VPN组网自动化方案解决了几个问题:
快速组网:使用IPSec连接基础设施,在云与云,企业与云之间建立任意互联。在几分钟内,将资源连接到任何位置。
使用简化:用自动化工作流取代复杂的cli手动配置,让DevOps专注于核心业务,而不是基础设施。
网络改动少:适应原有网络,不对原有网络进行改动。
*本文作者:accesshub,转载请注明来自FreeBuf.COM