适用于cvm vpc网络的一种云持续部署方案

公有云devops解决方案中持续发布是一个重要子系统。目前cvm网络类型主要为vpc和基础网络,由于vpc网络隔离的特性,导致无法通过云端持续发布系统进行项目发布部署。本文提供一种基于ansible的解决方案。

0、背景

公有云devops解决方案中持续发布是一个重要子系统,公有云用户通过云端的统一发布管理系统,管理业务主机cvm的工程发布,用户cvm所处网络目前云平台支持vpc和基础网络。

1、存在的问题

用户如果使用vpc网络,由于vpc网络隔离的特性,无法通过统一的云端管理端下发发布命令和数据传输。

2、可选的方案

1)通过cvm母机底层穿透vpc

显然不可行,即使技术上可实现,也不可用操作,这样vpc形同虚设,失去了意义

2)全部通过公网访问

每个cvm配置一个公网IP,CD管理端通过公网下发发布命令和传输数据

浪费公网IP资源,每个cvm都配置一个公网IP也不符合实际应用场景

3)引入V**

vpc中选出一台有公网ip的cvm搭建V**,与发布管理端对接

需要引入V**组件,依赖V**的性能与稳定性,而且方案实施较复杂

4)使用发布代理(cd-proxy)

ansible是一款使用比较广泛,而且比较稳定的发布工具。基于ssh,agentless,方便使用对客户环境改造较小,当客户使用vpc网络时,可使用一台具有公网IP的cvm安装基于ansible的发布代理,接收发布控制端的命令和获取发布数据,并作为vpc内部的发布控制,利用ansible本身发布能力对vpc内cvm执行发布。

3、使用发布代理的方案

  • 版本包存储:cos
  • 性能:支持多主机并发发布
  • 可靠行:部署多cdproxy可提高可靠性,多cdproxy可以随机选择执行发布,检测故障自动切换
  • 安全:使用https通信不验证书,应用层控制互信

1)初始化

用户在管理端上获取app_id和app_secret,填写cdproxy IP,PORT;

使用app_id和app_secret初始化cdproxy

2)互信

使用https通信不验证书,应用层控制互信,cdproxy校验控制端的app_id,控制端校验app_secret。

3)签名命令数据 防篡改、防重放