OpenStack Neutron 介绍 — OVS Self-service Networks

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


上篇介绍了 Open vSwitch with Provider Networks 的架构及封包流向,今天这篇会来介绍 Open vSwitch with self-serivce networks。

Open vSwitch: Self-service Networks

架构

上图为 Open vSwitch - Self-service networks 架构下的整个架构总览,可以看到那些元件是跑在 controller node 上,哪些是在 compute node 上,哪些是在 network node 上。

这张图画出了在单一 untagged (flat) provider network 和单一 self-service networks 下其中所使用的的元件是怎麽串接的。在这个范例中 Instance 跟 DHCP agent 是在同一台的,但是在实际状况下 DHCP agent 有可能是在其他 compute node 上。

Traffic Flow

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

架构设定

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

  • Provider network 1 (VLAN)
    • VLAN ID 101 (tagged)
  • Self-service network 1 (VXLAN)
    • VXLAN ID (VNI) 101
  • Self-service network 2 (VXLAN)
    • VXLAN ID (VNI) 102
  • 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) 将封包送往 linux bridge 的 instance port
  • 在 linux bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Linux bridge 上的 ovs 介 (4) 面透过 veth pair 将封包送往 OVS integration bridge security group 介面 (5)
  • OVS integration bridge 将封包加上 internal VLAN tag
  • OVS integration bridge int-br-provider patch 介面 (6) 将封包送往 OVS tunnel bridge r patch 介面 (7)
  • OVS tunnel bridge (8) 将封包包入 VNI 101
  • 实体网路介面 (9) 透过 overlay 网路 (10) 将封包送往 network node

封包到达 network node 後:

  • Overlay 网路对应的实体网路介面 (11) 将封包送往 OVS tunnel bridge (12)
  • OVS tunnel bridge 解开 VXLAN 封包并加封包加上 internal tunnel ID
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS tunnel bridge patch port (13) 将封包送往 OVS integration bridge patch port (14)
  • Self-service network 的 OVS integration bridge port (15) 拆掉 internal VLAN tag 并将封包送往路由器 namespace 中的 self-service network interface (16)
    • 在 IPv4 的状况下,路由器会用 SNAT 将 source IP 改成 router 的 IP 之後将封包投过 provider network 上的 gateway 介面 (17) 送往 gateway。
    • 在 IPv6 的状况下,路由器会将封包送往 next-hop IP 地址,通常是 provider network 的 gateway,也是会透过 provider network 上的 gateway 介面 (17)
  • 路由器将封包送往路由器的 provider network 对应的 OVS integration bridge 介面 (18)
  • OVS integration 将封包加上 internal VLAN
  • OVS integration bridge 上的 int-br-provider patch port (19) 会将封包送往 OVS provider bridge phy-br-provider patch port (20).
  • OVS Provider bridge 将 internal VLAN tag 换成实际 provider network 的 VLAN tag 101
  • Provider 实体网路介面 (14) 将封包加上 VLAN tag 101 并且送往实体网路设施中 (15)
  • OVS Provider bridge 上的 provider network 介面 (21) 会将封包送往实体网路介面 (22)
  • 实体网路介面将封包送往实体网路设施中的交换器 (23)

後面的部分就跟大家一般网路了解的一样,封包会在实体网路中被送往 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 拿掉之後送往 OVS provider bridge 上的 provider network port (3)
  • OVS provider bridge 将 VLAN tag 101 换成 internal VLAN tag
  • OVS provider bridge 上的 phy-br-provider port (4) 将封包送往 OVS integration bridge 上的 int-br-provider port (5).
  • OVS integration bridge 上的 provider network port (6) 将 internal VLAN tag 拿掉并且将封包送往 路由器 namespace 中的 provider network interface (7)
    • 在 IPv4 的状况下,路由器会用 DNAT 将 destination IP 改成 instance 的 IP 之後将封包透过 self-service 介面 (8) 送往 self-service network。
    • 在 IPv6 的状况下,路由器会将封包送往 next-hop IP 地址,通常是 self-service network 的 gateway,也是会透过 self-service 介面 (8)
  • 路由器将封包送往 OVS integration bridge 对应 self-service network 的介面 (9)
  • OVS integration 将封包加上 internal VLAN
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS integration bridge 上的 patch-tun patch port (10)) 会将封包送往 OVS tunnel bridge patch-int patch port (11)
  • OVS tunnel bridge (12) 将封包包进 VNI 101
  • 实体网路介面 (13) 将 VXLAN 封包透过 overlay 网路 (14) 送往 compute node

封包到达 compute node 後:

  • Overlay 网路对应的实体网路介面 (15) 将封包送往 OVS tunnel bridge (16)
  • OVS tunnel bridge 解开 VXLAN 封包并加封包加上 internal tunnel ID
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS tunnel bridge patch-int port (17) 将封包送往 OVS integration bridge patch-tun patch port (18).
  • OVS integration bridge 将 internal VLAN tag 拿掉
  • OVS integration bridge security group 介面 (19) 将封包送往 Linux bridge 上的 ovs 介面 (20)
  • 在 linux bridge 上 iptables (21) 会处理防火墙跟 connection tracking
  • linux bridge 的 instance port (22) 透过 veth pair 将封包送往Instance 的网路介面 (23)

以上就是使用 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

在 compute node 1 上:

  • Instance 的网路介面 (1) 透过 veth pair (2) 将封包送往 linux bridge 的 instance port
  • 在 linux bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Linux bridge 上的 ovs 介 (4) 面透过 veth pair 将封包送往 OVS integration bridge security group 介面 (5)
  • OVS integration bridge 将封包加上 internal VLAN tag
  • OVS integration bridge int-br-provider patch 介面 (6) 将封包送往 OVS tunnel bridge r patch 介面 (7)
  • OVS tunnel bridge (8) 将封包包入 VNI 101
  • 实体网路介面 (9) 透过 overlay 网路 (10) 将封包送往 compute node 2

到达 compute node 2 上後:

  • Overlay 网路对应的实体网路介面 (11) 将封包送往 OVS tunnel bridge (12)
  • OVS tunnel bridge 解开 VXLAN 封包并加封包加上 internal tunnel ID
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS tunnel bridge patch-int port (13) 将封包送往 OVS integration bridge patch-tun patch port (14).
  • OVS integration bridge 将 internal VLAN tag 拿掉
  • OVS integration bridge security group 介面 (15) 封包送往 Linux bridge 上的 ovs 介面 (16)
  • 在 linux bridge 上 iptables (17) 会处理防火墙跟 connection tracking
  • linux bridge 的 instance port (18) 透过 veth pair 将封包送往 Instance 的网路介面 (19)

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

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

在 compute node 上:

  • Instance 的网路介面 (1) 透过 veth pair (2) 将封包送往 linux bridge 的 instance port
  • 在 linux bridge 上 iptables (3) 会处理防火墙跟 connection tracking
  • Linux bridge 上的 ovs 介 (4) 面透过 veth pair 将封包送往 OVS integration bridge security group 介面 (5)
  • OVS integration bridge 将封包加上 internal VLAN tag
  • OVS integration bridge int-br-provider patch 介面 (6) 将封包送往 OVS tunnel bridge r patch 介面 (7)
  • OVS tunnel bridge (8) 将封包包入 VNI 101
  • 实体网路介面 (9) 透过 overlay 网路 (10) 将封包送往 network node

封包到达 network node 後:

  • Overlay 网路对应的实体网路介面 (11) 将封包送往 OVS tunnel bridge (12)
  • OVS tunnel bridge 解开 VXLAN 封包并加封包加上 internal tunnel ID
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS tunnel bridge patch port (13) 将封包送往 OVS integration bridge patch-tun patch port (14)
  • Self-service network 1 的 OVS integration bridge port (15) 拆掉 internal VLAN tag 并将封包送往路由器 namespace 中的 self-service network 1 interface (16)
  • 路由器会将封包送往 next-hop IP 地址,通常透过 self-service network 2 interface (17) 送往 self-service network 2 的 gateway
  • 路由器将封包送往路由器的 self-service network 2 对应的 OVS integration bridge 介面 (18)
  • OVS integration 将封包加上 internal VLAN
  • OVS integration bridge 将 internal VLAN tag 换成 internal tunnel ID
  • OVS integration bridge 上的 patch-tun patch port (19) 会将封包送往 OVS tunnel bridge patch-int patch port (20).
  • OVS tunnel bridge (21) 将封包包进 VNI 102
  • 实体网路介面 (22) 将 VXLAN 封包透过 overlay 网路 (23) 送往 compute node

封包回到 compute node 後:

  • Overlay 网路对应的实体网路介面 (24) 将封包送往 OVS tunnel bridge (25)
  • OVS tunnel bridge 解开 VXLAN 封包并加封包加上 internal tunnel ID
  • OVS tunnel bridge 将 internal tunnel ID 换成 internal VLAN tag
  • OVS tunnel bridge patch-int patch port (26) 将封包送往 OVS integration bridge patch-tun patch port (27).
  • OVS integration bridge 将 internal VLAN tag 拿掉
  • OVS integration bridge security group 介面 (28) 封包送往 Linux bridge 上的 ovs 介面 (29)
  • 在 linux bridge 上 iptables (30) 会处理防火墙跟 connection tracking
  • linux bridge 的 instance port (31) 透过 veth pair 将封包送往Instance 的网路介面 (32)

以上就是各种状况下 Open vSwitch self service networks 的封包流量。

小结

本篇介绍了 Open vSwitch self service networks 下的架构跟封包流向,同样的在了解网路封包怎麽流之後会让你在 debug 网路不通时有更好的概念。而下一篇仍然会是 Neutron,但是这次会介绍一个比较新的 plug-in,OVN plug-in 的架构。


<<:  Day01 - 缘起:怎麽了?为什麽?如何掌握过於自由的程序码?

>>:  DAY1 学习动机与选择原因

【OkHttp拦截器 Intercept + Android Kotlin】拦截送出去的request

前言: 有时候我们会需要看我们给Server的request跟回传的response时, 如果需要一...

Day19-多重指标

继续讲*指标,指标不是只能有一个还能继续层层指下去 #include <stdio.h>...

Powershell 入门之管道和文件重定向

今天我们就来一起看看 powershell 中的管道符,使用 “|” 表示. 我们先来看两个命令: ...

Day 06:萤幕切八段!多开神器 tmux

我把从第一天到现在每天的 Home 目录都放上 GitHub 了,README.md 里面有说明 ...

Day2 帐号申请与管理

访问控制(RAM)是什麽? 访问控制(Resource Access Management,RAM)...