目录
1、场景
如果做过很多政府单位的项目,你会发现很多项目所在的政务云服务器,都会分为两个局域网:称为VPN1和VPN2。
VPN1
这里的服务器是被访问的,能做NAT映射用公网地址访问,能在VPN2的服务器做路由访问。但是在防火墙做了策略,是不可以主动发起连接请求的,不能访问互联网,也不能访问VPN2的服务器。
VPN2
这里的服务器是能主动发起访问的,能直接访问互联网,也可以配置路由访问VPN1的服务器
如果要使用这些服务器一起搭建微服务环境,常常会遇到很多网络问题。比如:
- c端的服务端服务应该会部署在VPN1被用户访问,但同时需要调用某个第三方提供的服务(又碰巧提供的只有公网地址),那么这个被部署在VPN1的服务需要同时被用户访问,有需要主动发起请求访问互联网。
- VPN1服务器上的程序日志采集,ELK链路不通(ES在公司自己的服务器,公网地址)
2、微服务调用
研发代理服务,代理服务通过rpc进行软件层面的单向网络打洞,在VPN2部署代理服务的客户端主动向VPN1的代理服务发起rpc连接。将VPN1的所有服务和VPN2的所有服务划域,两块区域的服务互相调用都通过代理服务,走跨域访问。
例如:A | B 2个微服务,A在VPN1,B在VPN2。此时A如果想访问B就将请求发往VPN1的代理服务,告诉代理服务当前请求需要跨域访问B服务,代理服务会通过已经建立的RPC连接访问VPN2的代理服务,由此代理服务将请求发往B服务器。
夸机房访问应该是RouteService路由服务的职责,如果两个机房无法通过内网打通网络,那么还需要路由服务调用无感知的调用另一个机房暴露在公网的微服务入口?包括自动权限校验,调用链路规划,机房跳转等。
3、日志采集链路
一般聊开源的日志采集方案一定是ELK,那么在VPN1的日志采集要上报到在公网的ES服务器,同样需要代理服务。在VPN1安装filebeat采集日志,上报至logstash;logstash将过滤和清洗日志后上报至代理服务(output是webhook),由代理服务转发数据包到VPN2,进行ES服务器请求数据上报。
input {
beats {
port => 5044
ssl => false
}
}
filter {
...
}
output {
http {
url => "{{ proxy_service_webhook_url }}"
http_method => "post"
content_type => "application/json; charset=utf-8"
format => "message"
message => '{.....}'
}
}