近来在一次混合云架构中API接口暴露由于种种原因,遇到点波折,记录一下。
客户为金融企业对SLA要求及数据安全性很高,有限于考虑到业务的高可用性,采用混合云部署,业务流量入口为阿里金融云,前端可以添加安全设备WAF/CDN/高防IP等,之后Cname到统一入口SLB负载均衡上,后端采用虚拟服务器组,组内ECS部署在同Region的不同Zone,保障跨Zone的靠可用性,考虑到数据的安全性将数据持续化在IDC侧,阿里云与IDC通过云上部署深信服设备与IDC侧Cisco设备通过Ipsec ×××互联(考虑到稳定性目前已经实施专线互通),后端APP-Server与DB-Server部署在IDC,可参考下图:
1.1 客户需求:
客户之前由于同域名同端口下有不少业务,因此采用Nginx反向代理后端APP模式,HTTPS方式,将证书放在前端WEB-Server侧即可,或可以使用SLB的七层模式将证书放置在SLB上。但是此次部署的为一个后端的APP为HTTPS业务,是带有证书,需要将接口暴露到公网。
1.2 问题痛点:
经过测试客户在IDC侧APP-server部署的接口为HTTPS模式,Nginx采用http方式反代502证书不信任,无法反向代理成功,想到利用HTTPS方式反代,或者联系客户修改后端API接口为HTTP方式,但是金融云Web-Server也需要APP-Server的证书,客户反馈其他供应商部署短时间无法获取到,需要先忽略证书解决问题。
1.3 架构剖析:
此时修改IDC侧为HTTP方式无法进行,由于证书拿不到,金融云Web-Server侧利用HTTPS方式反向也无法进行,一度陷入僵局,继续沟通得知改接口正式环境已经在IDC侧部署完毕,但测试新功能需要暴露公网测试接口,那为何不再IDC侧有公网IP的服务器进行代理,或者防火墙DNAT进来,实现需求呢,客户反馈IDC侧IP规划已经没有,还需要协助从金融云暴漏测试接口。
1.4 解决方案:
既然Nginx反代不行,SLB后端也无法直接添加IDC侧的APP服务器,那就利用WEB-server利用iptables进行端口转发,配置DNAT和SNAT直接将流量抛过去,想到这里开始着手测试实施。
二、技术实现
具体的操作部署由于涉及到系统/网络/中间件/及阿里云产品相关操作,在此就不一样截图列举,简单列下实施步骤及注意要点。
2.1 架构图
2.2 网络互通
首选需要在金融云深信服与IDC侧思科防火墙方向对应端口及IP,实现网络互通,需要注意在阿里云需要配置到IDC侧的路由,web-server与app-server可以相关正常内网通讯。
2.3 域名及SLB
由于是测试域名前端暂时未添加WAF/高防IP等防护设备,将域名解析A记录解析至SLB公网地址,SLB配置虚拟服务器组,组内添加Web-Server,此时监听端口为Dnat端口。
2.4 IPTABLES转发
根据SLB配置的端口转发,配置响应规则,例如:
代码语言:javascript复制-A PREROUTING -d 10.69.xx.xx/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.19.xx.xx:8080
-A POSTROUTING -d 172.19.xx.xx/32 -p tcp -m tcp --dport 8080 -j MASQUERADE
配置完成可以从公网利用postman测试接口。
三、反思
由于受限与种种业务原因,这边列举下具体的可实施方案,可供以后参考:
- 如果可能可直接在IDC侧有公网服务器进行反代暴露接口
- 在IDC侧Cisco 设备Dnat映射业务端口进行暴露接口
- 在阿里金融云如果有证书可以采用HTTPS反代暴露接口
- 更改后端APP-server为HTTP方式,可以在阿里云侧采用HTTP方式反代暴露接口
- 在WEB-server采用iptables 转发进行HTTPS方式暴露接口。