我们来分析从外网访问内网的服务的具体过程:

首先我们看DNS和Load Balancer是怎么工作的。

  1. 客户端要访问我们的系统,发送了一个https请求,https://nova.mycompany.com
  2. 客户端的local resolver查看本地的缓存,是否能找到域名nova.mycompany.com
  3. 如果不能找到,则发送一个递归查询到本地的DNS服务器
  4. 本地的DNS服务器查看它的缓存,看是否能够找到域名
  5. 如果还是不能找到域名,则DNS服务器发送查询到root DNS服务器
  6. root DNS服务器找不到域名,返回.com域的DNS服务器地址给本地的DNS服务器
  7. 本地的DNS服务器发送查询到.com域的DNS服务器
  8. .com域的DNS服务器找不到域名,返回.mycompany.com域的DNS服务器给本地的DNS服务器
  9. 本地的DNS服务器发送查询到.mycompany.com域的DNS服务器
  10. .mycompany.com域的DNS服务器找到了域名nova.mycompany.com,返回一个别名nova.vip.mycomany.com,以及另外两个DNS Server的IP,这两个DNS Server我们分别称为dnsloadbalancer1 and dnsloadbalancer2
  11. 本地的DNS服务器选择其中一个,比如选择dnsloadbalancer1,来查找nova.vip.mycompany.com
  12. dnsloadbalancer1返回6个IP,这六个IP分别指向六个LoadBalancer,从LoadBalancer1到LoadBalancer6
  13. 本地的DNS服务器将这6个IP返回给客户端的Local resolver
  14. 客户端的Local Resolver在六个IP中,选择一个,比如选择LoadBalancer1
  15. 客户端连接LoadBalancer1,由于它是一个负载均衡,会将请求发给后端的多个nova服务的一个
  16. nova服务返回LoadBalancer1调用结果
  17. LoadBalancer1将结果返回给客户端

其次我们看网络流是如何工作的:

  1. 假设客户端想要访问https://nova.mycompany.com,当然需要经过上面的DNS过程,得到6个LoadBalacer的IP,并选择其中的一个,并试图去连接这个LoadBalancer。这整个过程如上面从第一步到第十四步,接下来第十五步要连接LoadBalacer1,连接的过程没这么简单,要经过复杂的过程。
  2. 连接LoadBalancer1的请求会到达其中的一个Border Router
  3. Border Router的通过iBGP知道,其中一个Available Zone 的aggregation router知道到LoadBalancer1的路由怎么走,于是Border Router通过Core Switch,将请求发送给aggregation router (AR1)
  4. aggregation router知道LoadBalancer1如何到达,于是将请求发给LoadBalancer1
  5. LoadBalancer1将包的源地址由客户端的IP变为自己的IP,然后将包发给其中一个nova服务
  6. 如果nova服务和LoadBalancer1在同一个VLAN中,则能够直接到达,否则还需要经过aggregation router
  7. 如果nova服务和LoadBalancer1不在同一个VLAN中,但是在同一个aggregation router连接的多个VLAN中,则通过aggregation router上的Virtual Interface就能够转发过去
  8. 如果nova服务在另一个aggregation router (AR2) 的管理之下,则还需要先发给自己的aggregation router,然后经过core switch发送给另一个aggregation router
  9. 另一个aggregation router利用arp找到nova服务的MAC地址,将包发给TOR switch
  10. TOR switch将包发给nova服务,nova服务处理请求,将结果通过TOR Switch –> aggregation router (AR2) –> core switches –> aggregation router (AR1) –> LoadBalancer1
  11. LoadBalancer1将目标地址改成客户端的地址,将结果发给aggregation router (AR1)
  12. AR1将结果发送给Border Router,Border Router通过Internet,将结果发送给客户端。

Data Center(5): 实例的更多相关文章

  1. Codeforces Gym 100513D D. Data Center 前缀和 排序

    D. Data Center Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/560/proble ...

  2. Data Center手册(4):设计

    基础架构 拓扑图 Switching Path L3 routing at aggregation layer L2 switching at access layer L3 switch融合了三种功 ...

  3. Data Center手册(2): 安全性

    有个安全性有下面几种概念: Threat:威胁 Vulnerability: 安全隐患 Attack: 攻击 有关Threat 常见的威胁有下面几种 DoS(Denial of Service拒绝服务 ...

  4. Data Center手册(1):架构

    如图是数据中心的一个基本架构 最上层是Internet Edge,也叫Edge Router,也叫Border Router,它提供数据中心与Internet的连接. 连接多个网络供应商来提供冗余可靠 ...

  5. Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

    本系列文章演示如何快速搭建一个简单的云原生架构的实践环境. 基于这个基础架构,可以持续部署微服务架构的应用栈,演练敏捷开发过程,提升DevOps实践能力. 1 整体规划 1.1 拓扑架构 1.2 基础 ...

  6. Docker Data Center系列(二)- UCP安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...

  7. Docker Data Center系列(四)- 离线安装UCP和DTR

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 离线安装UCP 1.1 可用版本 Version ...

  8. Docker Data Center系列(三)- DTR安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 成为UCP管理的 ...

  9. Docker Data Center系列(五)- 使用自定义的TLS安全认证

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 名词说明 CSR: Certificate Sig ...

随机推荐

  1. 如何实现python连续输入

    题型:输入矩阵,求对角线之和 思路(模型): i=0 while i<3: x=input() i+=1 print(x) 可以实现输入三行,最后输出最后一个x x=int(input()) m ...

  2. Google 以 Flutter 作为原生突破口,移动端即将统一了

    Android 的前生今世 Android 系统 Android系统作为全球第一大系统,基于 Java 开发的移动端有着诸多的性能优势. 2018年前 H5 的性能瓶颈和 RN 的停更 导致业界对跨平 ...

  3. 总结fiddle

    fiddler重新发送请求   模拟限速 http://caibaojian.com/fiddler.html fiddler模拟限速的原理 我们可以通过fiddler来模拟限速,因为fiddler本 ...

  4. struts2-第一章-基础用法3

    一,结果类型配置 在之前servlet学习中,知道网页页面路径跳转有两种方式,内部跳转(请求转发)和外部跳转(重定向),两者的区别,内部跳转浏览器地址不会变化 可以保存上一次请求的数据 外部跳转浏览器 ...

  5. JsRender实用入门教程

    这篇文章主要介绍了JsRender实用入门实例,包含了tag else使用.循环嵌套访问父级数据等知识点,并提供了完整的实例下载,非常具有实用价值,需要的朋友可以参考下     本文是一篇JsRend ...

  6. maven中运行java程序

    从命令行运行1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译.mvn compile2.编译完成后,执行exec运行main方法. 不需要传递参 ...

  7. Nuxt.js国际化vue-i18n的搭配使用

    Nuxt.js国际化的前提是,已经使用脚手架工具搭建好了Nuxt.js的开发环境. 我使用的环境是nuxt@2.3 + vuetify@1.4 + vue-i18n@7.3 1. 先安装vue-i18 ...

  8. 为什么MySQL数据库要用B+树存储索引?

    小史:树的话,无非就是前中后序遍历.二叉树.二叉搜索树.平衡二叉树,更高级一点的有红黑树.B 树.B+ 树,还有之前你教我的字典树. 红黑树 一听到红黑树,小史头都大了,开始抱怨了起来. 小史:红黑树 ...

  9. 4、Nginx安装与配置

    一.简介 Nginx官网:http://nginx.org/ Nginx(发音同engine x)是一个异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存.该软件由 Igor ...

  10. selenium使用遇到的问题(selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.)

    1.安装pip3 install selenium 2.使用browser=webdriver.Chrome()时报错 :selenium.common.exceptions.WebDriverExc ...