虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)

上一节我们创建了虚拟路由器“router_100_101”,并通过 ping 验证了 vlan100 和 vlan101 已经连通。

本节将重点分析其中的原理。

首先我们查看控制节点的 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 中?

下一节我们将详细分析这个问题。

 

时间: 2024-09-20 16:58:46

虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)的相关文章

用虚拟 router 连通 subnet - 每天5分钟玩转 OpenStack(141)

Neutron Routing 服务提供跨 subnet 互联互通的能力.例如前面我们搭建了实验环境: cirros-vm1      172.16.100.3        vlan100 cirros-vm3      172.16.101.3        vlan101 这两个 instance 要通信必须借助 router.可以是物理 router 或者虚拟 router. 下面详细讨论 Neutron 的虚拟 router 实现. 配置 l3 agent Neutron 的路由服务是

外网访问原理分析 - 每天5分钟玩转 OpenStack(105)

本节我们会将上节创建的 ext_net 连接到 router,并验证内外网的连通性. 更重要的,我们会分析隐藏在表象之下的原理. 将外网连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网. 点击菜单 Project -> Network -> Routers 进入 router 列表. 点击 router_100_101 的 "Set Gateway" 按钮. 在 "External Network" 下拉列表中选择 ext_ne

floating IP 原理分析 - 每天5分钟玩转 OpenStack(107)

上一节我们通过 Web UI 创建为 cirros-vm3 分配了浮动 IP,今天将分析其工作原理. 首先查看 router 的 interface 配置: 可以看到,floating IP 已经配置到 router 的外网 interface qg-b8b32a88-03 上. 查看 router 的 NAT 规则: iptables 增加了两条处理 floating IP 的规则: 1. 当 router 接收到从外网发来的包,如果目的地址是 floating IP 10.10.10.3,将

OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)

前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_local_net cirros-vm3 分配到的 IP 为 172.16.1.102 cirros-vm3 被 schedule 到控制节点,其虚拟网卡也连接到 br-int. 当前的控制节点上的网络结构如下:     下面我们讨论一个有趣的问题:cirros-vm3 能否 Ping 到 cirros-vm1

OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

    OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则. 提个醒:这可能是本教程最烧脑的一节,let's rock it ! 下面分析控制节点上的 flow rule,计算节点类似. br-int 的 flow rule br-int 的 rule 看上去虽然多,其实逻辑很简单,br-int 被当作一个二层交换机,其重要的 rule 是下面这条: cookie=0xaaa0e760a7848ec3, duration=52798.625s, ta

写在最前面 - 每天5分钟玩转 OpenStack(1)

<每天5分钟玩转 OpenStack>是一个 OpenStack 教程,这是第 1 篇. 这个教程有下面两个特点: 系统讲解 OpenStack 从架构到各个组件:从整体到细节逐一讨论 重实践并兼顾理论 主要从实际操作的角度带着大家学习 OpenStack.   为啥要写这个? 简单回答是:因为OpenStack 学习难度大,但如果掌握了价值会很大 先做一个自我介绍吧. 本人网名CloudMan,在 IT 这个行当已经摸爬滚打了十多年,05年之前是搞上层应用开发的,那时候 Java 比较火,所

学习 OpenStack 的方法论 - 每天5分钟玩转 OpenStack(150)

作为 OpenStack 的核心教程,我们已经到了最后总结的部分. OpenStack 目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder 和 Neutron.请大家看下图: 此图截自 https://www.openstack.org/software/project-navigator/,这是 OpenStack 官方定义的 6 个 Core Service.每个模块都会从三个维度来衡量: ADOPTION - 采用度 MATUR

理解 Neutron FWaaS - 每天5分钟玩转 OpenStack(117)

前面我们学习了安全组,今天学习另一个与安全相关的服务 -- FWaaS. 理解概念 Firewall as a Service(FWaaS)是 Neutron 的一个高级服务.用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 的流量进行过滤. 传统网络中的防火墙一般放在网关上,用来控制子网之间的访问. FWaaS 的原理也一样,是在 Neutron 虚拟 router 上应用防火墙规则,控制进出租户网络的数据. FWaaS 有三个重要概念: Fir

cloud-init 典型应用 - 每天5分钟玩转 OpenStack(174)

本节介绍几个 cloud-init 的典型应用:设置 hostanme,设置用户初始密码,安装软件.  设置 hostname cloud-init 默认会将 instance 的名字设置为 hostname.但这样不太方便,有时希望能够将二者分开,可利用 cloud-init 的set_hostname 模块实现.set_hostname 它会查询 metadata 中 hostname 信息,默认值就是 instance 的名字.我们可以指定自己的 hostname,方法是将下面的内容传给