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