公有云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)签名命令数据 防篡改、防重放