從裸機到雲端:OpenStack Neutron 介紹 — Linux Bridge Provider Networks

從裸機到雲端:OpenStack Neutron 介紹 — Linux Bridge 1

上篇介紹了 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 Networts 架構下的整個架構總覽,可以看到那些元件是跑在 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 的架構跟封包流向。


Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.