我们来分析从外网访问内网的服务的具体过程:
首先我们看DNS和Load Balancer是怎么工作的。
-
客户端要访问我们的系统,发送了一个https请求,https://hello.mycompany.com
-
客户端的local resolver查看本地的缓存,是否能找到域名hello.mycompany.com
-
如果不能找到,则发送一个递归查询到本地的DNS服务器
-
本地的DNS服务器查看它的缓存,看是否能够找到域名
-
如果还是不能找到域名,则DNS服务器发送查询到root DNS服务器
-
root DNS服务器找不到域名,返回.com域的DNS服务器地址给本地的DNS服务器
-
本地的DNS服务器发送查询到.com域的DNS服务器
-
.com域的DNS服务器找不到域名,返回.mycompany.com域的DNS服务器给本地的DNS服务器
-
本地的DNS服务器发送查询到.mycompany.com域的DNS服务器
-
.mycompany.com域的DNS服务器找到了域名hello.mycompany.com,返回一个别名hello.vip.mycomany.com,以及另外两个DNS Server的IP,这两个DNS Server我们分别称为dnsloadbalancer1 and dnsloadbalancer2
-
本地的DNS服务器选择其中一个,比如选择dnsloadbalancer1,来查找hello.vip.mycompany.com
-
dnsloadbalancer1返回6个IP,这六个IP分别指向六个LoadBalancer,从LoadBalancer1到LoadBalancer6
-
本地的DNS服务器将这6个IP返回给客户端的Local resolver
-
客户端的Local Resolver在六个IP中,选择一个,比如选择LoadBalancer1
-
客户端连接LoadBalancer1,由于它是一个负载均衡,会将请求发给后端的多个hello服务的一个
-
hello服务返回LoadBalancer1调用结果