企业与云VPN组网自动化实践 – 作者:accesshub

伴随着不断出现的外部,内部挑战,我们将业务向公有云迁移。随着时间的推移,逐渐形成了混合云架构。

广告 (2).png


混合云架构需要组建虚拟专用网络,实现资源互通,满足加密传输要求。混合云网络连接类型总结如下:

1、VPCVPC(同一个云服务商)

2、VPCVPC(不同云服务商之间)

3、 企业本地网络到VPC 

常见的组网方案有:专线,VPNSD-WAN。但也会带来以下问题:

首先是VPC的互通。例如,将阿里云北京的VPC资源接入AWS新加坡的VPC。通常我们使用VPN软件解决,但繁琐的CLI和不同云服务商不同工作流的部署方法,会造成在基础设施上花费太多的精力。

云到云部署流程.png

其次是VPC和企业私网互通。例如,将阿里云杭州的VPC基础设施接入到北京的数据中心。传统的连接方式依赖硬件,需要改动网络,部署花费几天或几周的时间。

数据中心到云部署流程.png

最后则是快速提供网络服务能力。业务需求是更快的发布应用程序。拼凑使用多种连接方式组网,会使网络架构臃肿,增加复杂度。快,敏捷将是难以实现的。

基于以上问题。如何减少网络改动,采用一致的工作流程,简化加密隧道的创建,删除和管理?我们结合容器,探究出了一种自动化实现方案。 

SDN.png

从图中可以看出,我们参考了SDN软件架构设计,将VPN网关的功能抽象出来逻辑分层,实现集中管理。

VPN组网自动化方案需要以下3个组件:

1、VPN容器

部署在VPC或本地网络

处理IPSec流量

通过WebSocket与控制器连接

2、控制器

通过Restful API完成指定隧道的创建,删除,管理

通过云服务商API完成VPC的路由配置

通过Restful APIWeb Client通信

3、Web Client

配置管理界面

连接可视化

各组件连接关系如下图:

SDN架构 (1).png

云与云创建VPC加密对等连接的过程及其实现如下:

1、用户在管理界面点击需要互通的网络,Web Client向控制器发送创建连接请求,控制器向指定VPN容器下发IPSec配置,同时在VPC路由表添加到达对端网络的路由条目。配置完成后拉起隧道,两端网络完成互通。

2、如果遇到两端网络VPC CIDR冲突的情况,可以通过管理界面修改指定连接的CIDRWeb Client向控制器发送修改CIDR请求,控制器向VPN容器下发新的IPSec配置,同时更新VPC路由条目。完成后重新拉起隧道。

3、如果网络环境发生变化,例如云服务器的公网IP变更,监控服务会通知容器自动更新IPSec配置,同时更新VPC路由条目,重新拉起隧道。

云到云部署流程 (1).png

以上就是系统的工作原理。从中我们可以看出,系统已经很好地解决了传统连接方式所遇到的问题:

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容器建立起来的加密隧道传输,不经过控制器。考虑到控制器存在单点故障的可能性,控制器采用了多活集群设计,可以横向扩展,实现容器带外管理负载。

交互 (1).png

VPN组网自动化方案解决了几个问题:

快速组网:使用IPSec连接基础设施,在云与云,企业与云之间建立任意互联。在几分钟内,将资源连接到任何位置。

使用简化:用自动化工作流取代复杂的cli手动配置,让DevOps专注于核心业务,而不是基础设施。

网络改动少:适应原有网络,不对原有网络进行改动。

tu.png

*本文作者:accesshub,转载请注明来自FreeBuf.COM

来源:freebuf.com 2018-07-07 13:40:08 by: accesshub

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论