Neutron 的路由服务是由 l3 agent 提供的。 除此之外,l3 agent 通过 iptables 提供 firewall 和 floating ip 服务。
 
 
l3 agent 需要正确配置才能工作,配置文件为 /etc/neutron/l3_agent.ini,位于控制节点或网络节点。
 
 
interface_driver 是最重要的选项
如果 mechanism driver 是 linux bridge,则:
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
如果选用 open vswitch,则:
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
 
l3 agent 运行在控制或网络节点上。
 

 
Neutron 虚拟路由器配置好了 L3 agent,今天将创建虚拟路由器router_100_101,打通 vlan100 和 vlan101。
 
打开操作菜单 Project -> Network -> Routers。
 
点击 Create Router 按钮
 
router 命名为 router_100_101,点击Create Router 按钮确认。
 
router_100_101 创建成功。
 
接下来需要将 vlan100 和 vlan101 连接到 router_100_101。 点击router_100_101 链接进入 router 的配置页面,在 Interfaces标签中点击 Add Interface 按钮。
 
选择 vlan101 的 subnet_172_16_101_0,点击Add Interface确认。
 
用同样的方法添加 vlan100 的 subnet_172_16_100_0。
 
完成后,可以看到 router_100_101 有了两个 interface,其 IP 正好是 subnet 的 Gateway IP 172.16.100.1 和 172.16.101.1。
 
到这里,我们可以预见:
1. router_100_101 已经连接了 subnet_172_16_100_0 和 subnet_172_16_101_0。 
2. router_100_101 上已经设置好了两个 subnet 的 Gateway IP。 
3. cirros-vm1 和 cirros-vm3 应该可以通信了。
 
通过 PING 测试一下。
 
判断正确,cirros-vm1 和 cirros-vm3 能通信了。
 
查看 cirros-vm1 的路由表,默认网关为 172.16.100.1。 同时 traceroute 告诉我们,cirros-vm1 确实是通过 router_100_101 访问到 cirros-vm3 的。
 

 
 
首先我们查看控制节点的 linux bridge 结构发生了什么变化。
 
 
vlan101 的 bridge 上多了一个 tape17162c5-00,从命名上可以推断该 TAP 设备对应 router_100_101 的 interface (e17162c5-00fa)。
vlan100 的 bridge 上多了一个 tapd568ba1a-74,从命名上可以推断该 TAP 设备对应 router_100_101 的 interface (d568ba1a-740e)。
 
当前网络结构如图所示:
 
 
但发现一个问题:两个 TAP 设备上并没有配置相应的 Gateway IP。
 
如果没有 Gateway IP,router_100_101 是如何完成路由的呢?
答案是: l3 agent 会为每个 router 创建了一个 namespace,通过 veth pair 与 TAP 相连,然后将 Gateway IP 配置在位于 namespace 里面的 veth interface 上,这样就能提供路由了。
 
通过 ip netns 查看 namespace:
router 对应的 namespace 命名为 qrouter-<router id>。
 
通过 ip netns exec <namespace name> ip a 命令查看 router_100_101 namespace 中的 veth interface 配置。
namespace 中有两个 interface:
  1. qr-e17162c5-00 上设置了 Gateway IP 172.16.101.1,与 root namespace 中的 tape17162c5-00 组成 veth pair。
  2. qr-d568ba1a-74 上设置了 Gateway IP 172.16.100.1,与 root namespace 中的 tapd568ba1a-74 组成 veth pair。
 
网络结构如图所示:
 
namespace 中的路由表也保证了 subnet_172_16_100_0 和 subnet_172_16_101_0 之间是可以路由的。
分析到这里,我们已经搞清楚 router_100_101 是如何打通 vlan100 和 vlan 101 了。
 
但这里有一个关键问题需要进一步分析:
为什么要把 router_100_101 放到 namespace 中?
 

Neutron路由篇:L3 agent+Namespace的更多相关文章

  1. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  2. Neutron 理解 (6): Neutron 是怎么实现虚拟三层网络的 [How Neutron implements virtual L3 network]

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

  3. 配置 L3 agent - 每天5分钟玩转 OpenStack(99)

    上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...

  4. 配置 L3 agent

    上一节我们介绍了路由服务(Routing)的基本功能,今天教大家如何配置. Neutron 的路由服务是由 l3 agent 提供的. 除此之外,l3 agent 通过 iptables 提供 fir ...

  5. Node.js Web 开发框架大全《路由篇》

    这篇文章与大家分享优秀的 Node.js 路由(Routers)模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  6. 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇

    0. 测试环境 硬件环境:还是使用四节点OpenStack部署环境,参见 http://www.cnblogs.com/sammyliu/p/4190843.html OpenStack配置: ten ...

  7. ASP.NET MVC学习之路由篇(3)

    根据路由输出链接 既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径. 首先我们的路由注册部分如下所示: 1 ...

  8. ASP.NET MVC学习之路由篇(2)

    7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会检查网站中存不存在这个请求的物理路径文件,如果存在的话,就会直接将这个物理文件返回.但是有时候我们需要它执行控制器的某个方法, ...

  9. ASP.NET MVC学习之路由篇

    约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...

随机推荐

  1. 【反编译系列】四、反编译so文件(IDA_Pro)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程 ...

  2. Asp.Net Core 轻松学-项目目录和文件作用介绍

    前言     上一章介绍了 Asp.Net Core 的前世今生,并创建了一个控制台项目编译并运行成功,本章的内容介绍 .NETCore 的各种常用命令.Asp.Net Core MVC 项目文件目录 ...

  3. jquery快速入门(一)

    一.jquery加载文档 jquery加载文档(也叫入口函数) $(document).ready(function(){ // 这里写 jQuery 代码... }); 简写方式: $(functi ...

  4. Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  5. 陪你解读Spring Batch(一)Spring Batch介绍

    前言 整个章节由浅入深了解Spring Batch,让你掌握批处理利器.面对大批量数据毫无惧色.本章只做介绍,后面章节有代码示例.好了,接下来是我们的主角Spring Batch. 1.1 背景介绍 ...

  6. c# 抽象类,抽象方法使用(abstract)

    入行一年多,在这个IT行业,开发技术主要使用的是.NET,而对应使用的高级语言自然就是c#了.从2017年7月入职后,在平时的工作过程中,只记得使用一些方法去完成逻辑功能,而很少去深究一些语法特性,特 ...

  7. MySQL 笔记整理(14) --count(*)这么慢,我该怎么办?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 14) --count(*)这么慢,我该怎么办? 有时你会发现,随着系统 ...

  8. 忘记Linux登录密码怎么办?

    1.启动虚拟机,出现下面倒计时界面时,按e键.进入启动前编辑. 2.进入如下界面,再按e键. 3.进入如下页面后,选中第二项kernel开头的项,选中后再按e键. 4.进入如下界面后,在最后面输入空格 ...

  9. Yii2设计模式——Yii2中用到哪些设计模式?

    "Yii2设计模式"包含了两个方面的内容:1.设计模式,2.Yii2框架. <设计模式>一书虽然以JAVA语言来表达设计模式的思想,但是设计模式远不限制于某一种特定的语 ...

  10. MySQL索引初探

    一.什么是索引? 帮助数据库系统实现高效获取数据的数据结构 索引可以帮助我们快速地定位到数据而不需要每次搜索的时候都遍历数据库中的每一行. 二.常见实现方式有哪些? 常见索引模型有三种:哈希表.有序数 ...