我们需要讨论一个深层次的问题: 为什么不直接在 tape17162c5-00 和 tapd568ba1a-74 上配置 Gateway IP,而是引入一个 namespace,在 namespace 里面配置 Gateway IP 呢?
 
首先考虑另外一个问题: 如果不用 namespace,直接 Gareway IP 配置到 tape17162c5-00 和 tapd568ba1a-74 上,能不能连通 subnet_172_16_100_0 和 subnet_172_16_101_0 呢?
答案是可以的,只要控制节点上配置了类似下面的路由。
Destination     Gateway         Genmask                 Flags     Metric     Ref        Use Iface 
172.16.100.0    *               255.255.255.0       U         0          0            0         tapd568ba1a-74 
172.16.101.0    *               255.255.255.0       U         0          0            0         tape17162c5-00
 
既然不需要 namespace 也可以路由,为什么还要加一层 namespace 增加复杂性呢? 其根本原因是:为了支持网络重叠。
 
云环境下,租户可以按照自己的规划创建网络,不同租户的网络是可能重叠的。 将路由功能放到 namespace 中,就能隔离不同租户的网络,从而支持网络重叠。
 
下面通过例子进一步解释。
Tenant A  vlan100 subnet A-1: 10.10.1.0/24    {"start": "10.10.1.1", "end": "10.10.1.254"} 
Tenant A  vlan101 subnet A-2: 10.10.2.0/24    {"start": "10.10.2.1", "end": "10.10.2.254"}
 
Tenant B  vlan102 subnet B-1: 10.10.1.0/24    {"start": "10.10.1.1", "end": "10.10.1.254"} 
Tenant B  vlan103 subnet B-2: 10.10.2.0/24    {"start": "10.10.2.1", "end": "10.10.2.254"}
 
A,B 两个租户定义了完全相同的两个 subnet,网络完全重叠。
 

不使用 namespace 的场景

如果不使用 namespace,网络结构如下:
 
其特征是网关 IP 配置在 TAP interface 上。 因为没有 namespace 隔离,router_100_101 和 router_102_103 的路由条目都只能记录到控制节点操作系统(root namespace)的路由表中,内容如下:
Destination     Gateway         Genmask              Flags     Metric     Ref        Use Iface  
10.10.1.0                 *               255.255.255.0       U             0          0            0     tap1  
10.10.2.0                 *               255.255.255.0       U             0          0            0     tap2  
10.10.1.0                 *               255.255.255.0       U             0          0            0     tap3 
10.10.2.0                 *               255.255.255.0       U             0          0            0     tap4
这样的路由表是无法工作的。 按照路由表优先匹配原则,Tenant B 的数据包总是错误地被 Tenant A 的 router 路由。 例如 vlan102 上有数据包要发到 vlan103。 选择路由时,会匹配路由表的第二个条目,结果数据被错误地发到了 vlan101。

使用 namespace 的场景

如果使用 namespace,网络结构如下:
其特征是网关 IP 配置在 namespace 中的 veth interface 上。 每个 namespace 拥有自己的路由表。
 
router_100_101 的路由表内容如下:
Destination     Gateway         Genmask             Flags Metric Ref    Use I  face 
10.10.1.0                 *               255.255.255.0       U     0          0        0     qr-1 
10.10.2.0                 *               255.255.255.0       U     0          0        0     qr-2
 
router_102_103 的路由表内容如下:
Destination     Gateway         Genmask             Flags Metric Ref    Use I face 
10.10.1.0                 *               255.255.255.0       U         0      0        0     qr-3
10.10.2.0                 *               255.255.255.0       U         0      0        0     qr-4
这样的路由表是可以工作的。
例如 vlan102 上有数据包要发到 vlan103。 选择路由时,会查看 router_102_103 的路由表, 匹配第二个条目,数据通过 qr-4 被正确地发送到 vlan103。
同样当 vlan100 上有数据包要发到 vlan101时,会匹配 router_100_101 路由表的第二个条目,数据通过 qr-2 被正确地发送到 vlan101。
可见,namespace 使得每个 router 有自己的路由表,而且不会与其他 router 冲突,所以能很好地支持网络重叠。
 
 

Namespace讨论的更多相关文章

  1. Why Namespace? - 每天5分钟玩转 OpenStack(102)

    上一节我们讨论了 Neutron 将虚拟 router 放置到 namespace 中实现了不同 subnet 之间的路由.今天探讨为什么要用 namespace 封装 router? 回顾一下前面的 ...

  2. Netruon 理解(12):使用 Linux bridge 将 Linux network namespace 连接外网

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  4. 【转】linux network namespace 学习

    原文地址:https://segmentfault.com/a/1190000004059167 介绍 在专业的网络世界中,经常使用到Virtual Routing and Forwarding(VR ...

  5. BZOJ-1067 降雨量 线段树+分类讨论

    这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...

  6. HNU 12833 Omar’s Bug(分情况讨论)

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12833&courseid=268 解题报告:有个11个 ...

  7. namespace的用法

    C++中采用的是单一的全局变量命名空间.在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突.当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字:有时为了程序 ...

  8. Codeforces Round #338 (Div. 2) E. Hexagons 讨论讨论

    E. Hexagons 题目连接: http://codeforces.com/contest/615/problem/E Description Ayrat is looking for the p ...

  9. UVaLive 6862 Triples (数学+分类讨论)

    题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...

随机推荐

  1. 剑指Spring源码(二)

    这是春节后的第一篇博客,我在构思这篇博客的时候,一度想放弃,想想要不要换个东西写,因为毕竟个人水平有限,Spring源码实在博大精深,不是我这个菜的抠脚的菜鸡可以驾驭的,怕误人子弟,还有就是源码分析类 ...

  2. Vue.js-06:第六章 - 按键修饰符的使用

    一.前言  上周末的时候,准备试试将 ASP.NET Core 的项目部署到 CentOS 服务器上,结果在一个接一个坑里面跳,最后 Supervisor 守护程序还是有问题,于是,采用重装系统大招, ...

  3. 利用SQL Profiler 追踪数据库操作

    SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...

  4. 一个适合.NET Core的代码安全分析工具 - Security Code Scan

    本文主要翻译自Security Code Scan的官方Github文档,结合自己的初步使用简单介绍一下这款工具,大家可以结合自己团队的情况参考使用.此外,对.NET Core开发团队来说,可以参考张 ...

  5. 表单数据验证方法(一)—— 使用validate.js实现表单数据验证

    摘要:使用validate.js在前端实现表单数据提交前的验证 好久没写博客了,真的是罪过,以后不能这样了,只学习不思考,学的都是白搭,希望在博客园能记录下自己学习的点滴,虽然记录的都是些浅显的技术, ...

  6. [TCP/IP] 传输层-TCP和UDP的使用场景

    传输层-TCP和UDP应用场景 TCP(传输控制协议) 需要将要传输的文件分段传输,建立会话,可靠传输,流量控制 UDP(用户报文协议) 一个数据包就能完成数据通信,不需要建立会话,不分段,不用流量控 ...

  7. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  8. Yii2设计模式——单例模式

    应用举例 在Yii.php中: require __DIR__ . '/BaseYii.php'; // Yii框架的帮助类,提供框架基本的功能 class Yii extends \yii\Base ...

  9. ASP.NET Core 部署IIS及 OFFSET 附近有语法错误解决

    今天自己开发了一个订机票的微信公众号,功能基本已经完成,然后想部署到服务器实际测试下.结果部署上去出现各种问题.先安装asp.net core模块,然后发现数据库并不像在开发时一样,执行ef的命令行语 ...

  10. git使用总结(持续更新,个人总结记录使用)

    1.拉取代码报错(Couldn't merge origin/master: You have not concluded your merge (MERGE_HEAD exists).) 造成原因: ...