本系列文章同步發布於筆者網站
上篇介紹了 Linux Bridge with Provider Network 的架構及封包流向,今天這篇會來介紹 Linux Bridge with self-serivce networks。
Linux bridge: Self-service Networks
Self-service networks 提供使用者幾乎無限數量的虛擬網路。 Neutron 雖然有支援 VLAN self-service networks,但本例以 VXLAN self-service networks 為例。
架構
上圖為 Linux Bridge - Self-service networks 架構下的整個架構總覽,可以看到那些元件是跑在 controller node 上,哪些是在 compute node 上,哪些是在 network node 上。
這張圖畫出了在單一 provider network 下 self-service networks 中所使用的的元件是怎麼串接的。在這個範例中 Instance 跟 DHCP agent 是在同一台的,但是在實際狀況下 DHCP agent 有可能是在其他 compute node 上。
Traffic Flow
這節會介紹在各個狀況下實際封包是如何在架構中流通的。
架構設定
以下是我們預想的架構,有兩個透過 vxlan 隔離的 self-service networks 並且上面各有一台 instance
- Provider network 1 (VLAN)
- Self-service network 1 (VXLAN)
- Self-service network 2 (VXLAN)
- Self-service router
- Gateway on the provider network
- Interface on self-service network 1
- Interface on self-service network 2
- Instance 1
- Instance 2
南北向流量 1:固定 IP 的 Instance
對於具有固定 IPv4 地址的 Instance,網路節點 (network node) 對從 self-service networks 傳到 Internet 等外部網路的南北流量執行 SNAT。 對於具有固定 IPv6 地址的 Instance,網路節點會透過常規的路由將封包送往外部網路。
- Instance 在 compute node 1 上並使用 self-service network 1
- Instance 將封包送往外部網路
- Instance 的網路介面 (1) 透過 veth pair (2) 將封包送往 self-service bridge 的 instance port
- 在 self-service bridge 上 iptables (3) 會處理防火牆跟 connection tracking
- Self-service bridge 上的 VXLAN interface (4) 並且將其包入 VNI 101
- VXLAN interface 對應的實體網路介面 (5) 將透過 overlay 網路送往 network node (6)
封包到達 network node 後:
- VXLAN interface 對應的實體網路介面 (7) 將封包送往 VXLAN interface (8) 並且解開 VXLAN 封包
- 路由器的 self-service bridge 介面 (9) 將封包送往 self-service 路由器 namespace 內的 self-service network 介面 (10)
- 在 IPv4 的狀況下,路由器會用 SNAT 將 source IP 改成 router 的 IP 之後將封包投過 provider network 上的 gateway 介面 (11) 送往 gateway。
- 在 IPv6 的狀況下,路由器會將封包送往 next-hop IP 地址,通常是 provider network 的 gateway,也是會透過 provider network 上的 gateway 介面 (11)
- 路由器將封包送往路由器的 provider bridge 介面 (12)
- Provider bridge 上的 VLAN sub-interface port (13) 會將封包送往 Provider 實體網路介面 (14)
- Provider 實體網路介面 (14) 將封包加上 VLAN tag 101 並且送往實體網路設施中 (15)
後面的部分就跟大家一般網路了解的一樣,封包會在實體網路中被送往 router 後送出去。而封包回程的模式就是整個倒過來。
南北向流量 2:Floating IP 的 Instance
對於具有固定 IPv4 地址的 Instance,網路節點 (network node) 對從 self-service networks 傳到 Internet 等外部網路的南北流量執行 SNAT 並將從外部網路回來的流量進行 DNAT。Floating IP 並不適用於 IPv6。
由於 Instance 出去到外網的封包流向與範例 1 是一樣的,這裡不多做介紹,唯一的區別是 SNAT 的 IP 換成了 floating IP 而不是路由器的 IP。這邊將會介紹從外網回來的流量。
- Instance 在 compute node 1 上並使用 self-service network 1
- 外部網路將封包送往 Instance
外網封包到達 network node 後:
- 實體網路設施 (1) 將封包送往 Provider 實體網路介面 (2)
- Provider 實體網路介面 (2) 將 VLAN tag 101 拿掉之後送往 Provider bridge 上的 VLAN sub-interface port (3)
- Provider bridge (4) 將封包送往 self-service 路由器的 provider gateway 介面 (5)
- 在 IPv4 的狀況下,路由器會用 DNAT 將 destination IP 改成 instance 的 IP 之後將封包透過 self-service 介面 (6) 送往 self-service network。
- 在 IPv6 的狀況下,路由器會將封包送往 next-hop IP 地址,通常是 self-service network 的 gateway,也是會透過 self-service 介面 (6)
- 路由器將封包送往 self-service bridge router 介面 (7)
- Self-service bridge 將封包送往 VXLAN interface (8) 並且將封包包進 VNI 101
- 實體網路介面 (9) 將 VXLAN 封包透過 overlay 網路 (10) 送往 compute node
封包到達 compute node 後:
- 實體網路介面 (11) 將封包送往 VXLAN 介面 (12) 並且解開 VNI 101
- 在 self-service bridge 上 iptables (13) 會處理防火牆跟 connection tracking
- self-service bridge 的 instance port (14) 透過 veth pair 將封包送往 Instance 的網路介面 (15)
以上就是使用 Floating IP 時回程封包的流向。
東西向流量 1:在同一個網路下的 instance
- Instance 1 在 compute node 1 上並使用 self-service network 1
- Instance 2 在 compute node 2 上並使用 self-service network 1
- Instance 1 將封包送往 Instance 2
前面的狀況是完全一樣的
- Instance 的網路介面 (1) 透過 veth pair (2) 將封包送往 self-service bridge 的 instance port
- 在 self-service bridge 上 iptables (3) 會處理防火牆跟 connection tracking
- Self-service bridge 上的 VXLAN interface (4) 並且將其包入 VNI 101
- VXLAN interface 對應的實體網路介面 (5) 將透過 overlay 網路送往 compute node 2 (6)
封包到達 compute node 2 後:
- 實體網路介面 (7) 將封包送往 VXLAN 介面 (8) 並且解開 VNI 101
- 在 self-service bridge 上 iptables (9) 會處理防火牆跟 connection tracking
- self-service bridge 的 instance port (10) 透過 veth pair 將封包送往 Instance 的網路介面 (11)
東西向流量 2:在不同一個網路下的 instance
- Instance 1 在 compute node 1 上並且用 self-service network 1
- Instance 2 在 compute node 1 上並且用 self-service network 2
- Instance 1 將封包送往 Instance 2
一開始封包送出去的流程也是一樣的
- Instance 的網路介面 (1) 透過 veth pair (2) 將封包送往 self-service bridge 的 instance port
- 在 self-service bridge 上 iptables (3) 會處理防火牆跟 connection tracking
- Self-service bridge 上的 VXLAN interface (4) 並且將其包入 VNI 101
- VXLAN interface 對應的實體網路介面 (5) 將透過 overlay 網路送往 compute node 2 (6)
封包到達 network node 後:
- VXLAN interface 對應的實體網路介面 (7) 將封包送往 VXLAN interface (8) 並且解開 VXLAN 封包
- 路由器的 self-service bridge 介面 (9) 將封包送往 self-service 路由器 namespace 內的 self-service network 1 介面 (10)
- 路由器將封包封包透過 self-service network 2 介面 (11) 送往 self-service network 的 gateway。
- 路由器將封包送往路由器的 self-service network 2 bridge 介面 (12)
- Self-service network 2 bridge 將封包包在 VNI 102 並且送往 VXLAN 介面
- VXLAN 介面對應的實體網路介面 (14) 將封包透過 overlay network 送往 compute node 1
回到 compute node 1 上:
- 實體網路介面 (16) 將封包送往 VXLAN 介面 (17) 並且解開 VNI 102
- 在 self-service bridge 上 iptables (18) 會處理防火牆跟 connection tracking
- self-service bridge 的 instance port (19) 透過 veth pair 將封包送往 Instance 的網路介面 (20)
以上就是各種狀況下 Linux Bridge self service networks 的封包流量。
小結
本篇介紹了 Linux Bridge Self-Service Networks 下的架構跟封包流向,同樣的在了解網路封包怎麼流之後會讓你在 debug 網路不通時有更好的概念。而下一篇會介紹使用 Open vSwitch: Provider networks 的架構跟封包流向。