本系列文章同步发布於笔者网站
上篇介绍了 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 的架构跟封包流向。