OpenStack Neutron 介绍 — Linux Bridge Provider Networks

本系列文章同步发布於笔者网站


上篇介绍了 Neutron 的架构,再接下来几天会介绍 Neutron 使用 Linux Bridge 跟 OVS plug-in 时的架构以及流量是怎麽流的。首先第一篇笔者会先来介绍 Linux Bridge with Provider Network。

Linux bridge: Provider networks

Provider network 架构示例使用 VLAN (802.1q) tagging 在实例 (instance) 和实体网路基础设施之间提供 L2 连接。 它支援一个 non-tagged(扁平)网路和多达 4095 个 tagging (VLAN) 网路。 VLAN 网路的实际数量取决於物理网络基础设施。

架构

上图为 Linux Bridge - Provider Networks 架构下的整个架构总览,可以看到那些元件是跑在 controller node 上,哪些是在 compute node 上。

这个图画出了在单一 provider network 下 compute node 中的元件是怎麽串接的。在这个范例中 Instance 跟 DHCP agent 是在同一台的,但是在实际状况下 DHCP agent 有可能是在其他 compute node 上。

在有多个 Provider networks 的状况下,每一个 provider networks 会在每一台 compute node 上对应到一个 Linux Bridge,并且用 vlan 隔离。而在运算主机上的 Instance 会将其网路介面接到其网路相对应的 Linux bridge 上。

Traffic Flow

这节会介绍在各个状况下实际封包是如何在架构中流通的。

架构设定

以下是我们预想的架构,有两个透过 vlan 隔离的 provider networks 并且上面各有一台 instance

  • Provider network 1 (VLAN)
    • VLAN ID 101 (tagged)
    • IP 地址范围 203.0.113.0/24
    • Gateway (在实体的网路上)
      • IP 203.0.113.1
  • Provider network 2 (VLAN)
    • VLAN ID 102 (tagged)
    • IP 地址范围 192.0.2.0/24
    • Gateway
      • IP 192.0.2.1
  • Instance 1
    • IP 203.0.113.101
  • Instance 2
    • IP 192.0.2.101

南北向流量

  • Instance 在 compute node 1 上
  • Instance 将封包送往外部网路

  • Instance 的网路介面 (1) 透过 veth pair (2) 将封包送往 provider bridge 的 instance port
  • 在 provider bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Provider bridge 上的 VLAN sub-interface port (4) 会将封包送往实体网路介面 (5)
  • 实体网路介面将封包加上 VLAN tag 101 并且送往实体网路设施中的交换器 (6)

後面的部分就跟大家一般网路了解的一样,封包会被送往 router 後送出去。而封包回程的模式就是整个倒过来。

东西向流量 1:在同一个网路下的 instance

  • Instance 1 在 compute node 1 上
  • Instance 2 在 compute node 2 上
  • Instance 1 将封包送往 Instance 2

前面的状况是完全一样的

  • Instance 的网路介面 (1) 透过 veth pair (2) 将封包送往 provider bridge 的 instance port
  • 在 provider bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Provider bridge 上的 VLAN sub-interface port (4) 会将封包送往实体网路介面 (5)
  • 实体网路介面将封包加上 VLAN tag 101 并且送往实体网路设施中的交换器 (6)

在实际网路基础设施中:

  • 交换器将封包从 compute node 1 送往 compute node 2

封包到达 compute node 2 後:

  • 实体网路介面 (8) 将 VLAN tag 101 拿掉并且送往 provider bridge 上的 VLAN sub-interface port (9)
  • 在 provider bridge 上 iptables (10) 会处理防火墙跟 connection tracking
  • provider bridge 上的 instance port (11) 透过 veth pair 将封包送往 instance 2 的网路介面 (12)

东西向流量 2:在不同一个网路下的 instance

  • Instance 1 在 compute node 1 上并且用 provider network 1
  • Instance 2 在 compute node 1 上并且用 provider network 2
  • Instance 1 将封包送往 Instance 2

一开始封包送出去的流程也是一样的

  • Instance 的网路介面 (1) 透过 veth pair (2) 将封包送往 provider bridge 的 instance port
  • 在 provider bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Provider bridge 上的 VLAN sub-interface port (4) 会将封包送往实体网路介面 (5)
  • 实体网路介面将封包加上 VLAN tag 101 并且送往实体网路设施中的交换器 (6)

在实际网路基础设施中:

  • 交换器将封包 VLAN tag 101 拿掉并且送往路由器 (7)
  • 路由器将封包从 provider network 1 (8) 路由到 provider network 2 (9)
  • 路由器将封包送往交换器 (10)
  • 交换器将封包 VLAN tag 102 拿掉并且送往 compute node 1 (11)

回到 compute node 1 上:

  • 实体网路介面 (12) 将 VLAN tag 102 拿掉并且送往 provider bridge 上的 VLAN sub-interface port (13)
  • 在 provider bridge 上 iptables (14) 会处理防火墙跟 connection tracking
  • provider bridge 上的 instance port (15) 透过 veth pair 将封包送往 instance 2 的网路介面 (16)

以上就是各种状况下 Linux Bridge Provider Network 的封包流量。

小结

本篇介绍了 Linux Bridge - Provider Network 下的架构跟封包流向,了解了网路封包怎麽流会让你在 debug 网路不通时有更好的概念。而下一篇会介绍使用 Linux Bridge - self-service network 的架构跟封包流向。


<<:  [iT铁人赛Day13]JAVA回圈的跳离

>>:  [Day12]C# 鸡础观念- 当我们同在一起~阵列(Array)

[Part 6 ] Vue.js 的精随-元件生命周期 (续)

前言 Hooks 都是一个一个 function,在生命周期中有些时刻发生了,就会去执行对应的 Ho...

[Day 08] 简单的单元测试实作(二)

接下来我们做第二个测试,我们传入一个数字, 譬如说我们传入4, 因为它是4的倍数, 所以应该是闰年,...

人脸辨识的流程--人脸侦测

在上一章讲到人脸辨识系统有三个步骤,人脸侦测、特徵撷取、人脸识别。 在人脸侦测部分常见的有Haar-...

Day20-94. Binary Tree Inorder Traversal

94. Binary Tree Inorder Traversal(Easy) Given the ...

[Day 27] Final Project (3/5) — 让 App 在本机端运行

Prerequisites 为了让接下来的步骤可以顺利进行,我们首先要完成以下的前置作业,但因为每个...