说明:此方案描述了使用带有开放 vSwitch (OVS) 的 ML2 插件的 OpenStack 网络服务的经典实现。
经典实现通过为常规(非特权)用户提供一种管理项目内虚拟网络的方法,为自助式虚拟数据中心基础结构的网络部分做出贡献,并包括以下组件:
-
项目(租户)网络 项目网络提供与特定项目的实例的连接。常规(非特权)用户可以在管理员或操作员为其定义的分配中管理项目网络。项目网络可以使用 VLAN、GRE 或 VXLAN 传输方法,具体取决于分配。项目网络通常使用专用 IP 地址范围 (RFC1918),并且缺少与外部网络(如 Internet)的连接。网络将项目网络上的 IP 地址称为固定 IP 地址。 -
外部网络 外部网络提供与外部网络(如 Internet)的连接。只有管理(特权)用户才能管理外部网络,因为它们与物理网络基础结构接口。外部网络可以使用平面或 VLAN 传输方法,具体取决于物理网络基础结构,并且通常使用公共 IP 地址范围。 注意:扁平网络实质上使用未标记或本地 VLAN。与物理网络的第 2 层属性类似,每个外部网桥只能存在一个平面网络。在大多数情况下,生产部署应对外部网络使用 VLAN 传输。 -
路由器 路由器通常连接项目和外部网络。默认情况下,它们实现 SNAT 为项目网络上的实例提供出站外部连接。每个路由器在 SNAT 的外部网络分配中使用一个 IP 地址。路由器还使用 DNAT 为项目网络上的实例提供入站外部连接。网络是指路由器上的 IP 地址,这些 IP 地址作为浮动 IP 地址为项目网络上的实例提供入站外部连接。路由器还可以连接属于同一项目的项目网络。 -
其他服务 其他支持服务包括 DHCP 和元数据。DHCP 服务管理项目网络上实例的 IP 地址。元数据服务为项目网络上的实例提供 API,用于获取 SSH 密钥等元数据。
示例配置创建一个平面外部网络和一个 VXLAN 项目(租户)网络。但是,此配置还支持 VLAN 外部网络、VLAN 项目网络和 GRE 项目网络。
基础设施
- 一个控制器节点和一个网络接口:管理。
- 一个网络节点,具有四个网络接口:管理、项目隧道网络、VLAN 项目网络和外部(通常是 Internet)。开放式 vSwitch 网桥 br-vlan 必须在 VLAN 接口上包含一个端口,而开放式 vSwitch 网桥 br-ex 必须在外部接口上包含一个端口。
- 至少一个具有三个网络接口的计算节点:管理、项目隧道网络和 VLAN 项目网络。开放式 vSwitch 网桥 br-vlan 必须在 VLAN 接口上包含一个端口。
为了更好地了解网络流量,网络和计算节点包含用于 VLAN 项目网络的单独网络接口。在生产环境中,VLAN 项目网络可以使用任何可访问网络接口的开放式交换机网桥。例如,br-tun 桥。
在示例配置中,管理网络使用 10.0.0.0/24,隧道网络使用 10.0.1.0/24,外部网络使用 203.0.113.0/24。VLAN 网络不需要 IP 地址范围,因为它仅处理第 2 层连接。
注意:对于 VLAN 外部网络和项目网络,物理网络基础结构必须支持 VLAN 标记。
为了获得 VXLAN 和 GRE 项目网络的最佳性能,网络基础结构应支持巨型帧。
网络节点包含以下网络组件:
- 开放式 vSwitch 代理管理虚拟交换机、虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如命名空间、Linux 网桥和底层接口)的交互。
- DHCP 代理管理 qdhcp 命名空间。qdhcp 命名空间为使用项目网络的实例提供 DHCP 服务。
- L3 代理管理 qrouter 命名空间。qrouter 命名空间提供项目与外部网络之间以及项目网络之间的路由。它们还在实例和元数据代理之间路由元数据流量。
- 处理实例的元数据操作的元数据代理。
计算节点包含以下网络组件:
- 开放式 vSwitch 代理管理虚拟交换机、虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如命名空间、Linux 网桥和底层接口)的交互。
- Linux 桥接处理安全组。由于 Open vSwitch 和 iptables 的限制,网络服务使用 Linux 桥来管理实例的安全组。
数据包流
南北向网络流量在实例和外部网络(通常是 Internet)之间传输。东西向网络流量在实例之间传输。
案例 1:具有固定 IP 地址的实例的南北向
对于具有固定 IP 地址的实例,网络节点在项目和外部网络之间路由南北向网络流量。
- 外部网络
- 网络 203.0.113.0/24
- 从 203.0.113.101 到 203.0.113.200 的 IP 地址分配
- 项目网络路由器接口 203.0.113.101 TR
- 项目网络
- 网络 192.168.1.0/24
- 网关 192.168.1.1 与 MAC 地址 TG
- 计算节点 1
- 具有 MAC 地址 I1 的实例 192.168.1.11
- 实例 1 驻留在计算节点 1 上,并使用项目网络。
- 实例向外部网络上的主机发送数据包。
以下步骤涉及计算节点 1:
- 实例 1 抽头接口 (1) 将数据包转发到 Linux 网桥 qbr。数据包包含目标 MAC 地址 TG,因为目标位于另一个网络上。
- Linux 桥接 qbr 上的安全组规则 (2) 处理数据包的状态跟踪。
- Linux 网桥 qbr 将数据包转发到 Open vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接器 br-int 为项目网络添加内部标记。
- 对于 VLAN 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch VLAN 网桥 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将内部标记替换为项目网络的实际 VLAN 标记。 c. 开放式交换机 VLAN 桥接器 br-vlan 通过 VLAN 接口将数据包转发到网络节点。 - 对于 VXLAN 和 GRE 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 隧道网桥 br-tun。 b. 开放式 vSwitch 隧道桥 br-tun 将数据包包装在 VXLAN 或 GRE 隧道中,并添加一个标记来标识项目网络。 c. 开放式 vSwitch 隧道桥 br-tun 通过隧道接口将数据包转发到网络节点。
以下步骤涉及网络节点:
-
对于 VLAN 项目网络: a. VLAN 接口将数据包转发到开放交换机 VLAN 桥接器 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将数据包转发到开放 vSwitch 集成网桥 br-int。 c.开放式 vSwitch 集成网桥 br-int 将项目网络的实际 VLAN 标记替换为内部标记。 -
对于 VXLAN 和 GRE 项目网络: a. 隧道接口将数据包转发到开放 vSwitch 隧道桥 br-tun。 b. Open vSwitch 隧道桥 br-tun 打开数据包的包装,并为项目网络添加内部标记。 c. 开放式 vSwitch 隧道网桥 br-tun 将数据包转发到开放式 vSwitch 集成网桥 br-int。 -
Open vSwitch 集成桥接器 br-int 将数据包转发到路由器命名空间 qrouter 中的 qr 接口 (3)。qr 接口包含项目网络网关 IP 地址 TG。 -
iptables 服务 (4) 使用 qg 接口 (5) 作为源 IP 地址对数据包执行 SNAT。qg 接口包含项目网络路由器接口 IP 地址 TR。 -
路由器命名空间 qrouter 通过 qg 接口将数据包转发到 Open vSwitch 集成桥接器 br-int。 -
开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 外部网桥 br-ex。 -
开放式 vSwitch 外部网桥 br-ex 通过外部接口将数据包转发到外部网络。 返回流量遵循类似的相反步骤。
案例 2:对于具有浮动 IP 地址的实例,南北向
对于具有浮动 IP 地址的实例,网络节点在项目和外部网络之间路由南北向网络流量。
- 外部网络
- 网络 203.0.113.0/24
- 从 203.0.113.101 到 203.0.113.200 的 IP 地址分配
- 项目网络路由器接口 203.0.113.101 TR
- 项目网络
- 网络 192.168.1.0/24
- 网关 192.168.1.1 与 MAC 地址 TG
- 计算节点 1
- 实例 1 192.168.1.11,MAC 地址 I1 和浮动 IP 地址 203.0.113.102 F1
- 实例 1 驻留在计算节点 1 上,并使用项目网络。
- 实例从外部网络上的主机接收数据包。
以下步骤涉及网络节点:
- 外部接口将数据包转发到开放式 vSwitch 外部网桥 br-ex。
- 开放式 vSwitch 外部网桥 br-ex 将数据包转发到开放式 vSwitch 集成网桥 br-int。
- 开放式 vSwitch 集成网桥将数据包转发到路由器命名空间 qrouter 中的 qg 接口 (1)。qg 接口包含实例 1 浮动 IP 地址 F1。
- iptables 服务 (2) 使用 qr 接口 (3) 作为源 IP 地址对数据包执行 DNAT。qr 接口包含项目网络路由器接口 IP 地址 TR1。
- 路由器命名空间 qrouter 将数据包转发到 Open vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接器 br-int 为项目网络添加内部标记。
- 对于 VLAN 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch VLAN 网桥 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将内部标记替换为项目网络的实际 VLAN 标记。 c. 开放式 vSwitch VLAN 桥接器 br-vlan 通过 VLAN 接口将数据包转发到计算节点。 - 对于 VXLAN 和 GRE 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 隧道网桥 br-tun。 b. 开放式 vSwitch 隧道桥 br-tun 将数据包包装在 VXLAN 或 GRE 隧道中,并添加一个标记来标识项目网络。 c. Open vSwitch 隧道桥 br-tun 通过隧道接口将数据包转发到计算节点。
以下步骤涉及计算节点 1:
-
对于 VLAN 项目网络: a. VLAN 接口将数据包转发到开放交换机 VLAN 桥接器 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将数据包转发到开放 vSwitch 集成网桥 br-int。 c. 开放式 vSwitch 集成网桥 br-int 将项目网络的实际 VLAN 标记替换为内部标记。 -
对于 VXLAN 和 GRE 项目网络: a. 隧道接口将数据包转发到开放 vSwitch 隧道桥 br-tun。 b. Open vSwitch 隧道桥 br-tun 打开数据包的包装,并为项目网络添加内部标记。 c. 开放式 vSwitch 隧道网桥 br-tun 将数据包转发到开放式 vSwitch 集成网桥 br-int。 -
Open vSwitch 集成桥接 br-int 将数据包转发到 Linux 桥接器 qbr。 -
Linux 网桥 qbr 上的安全组规则 (4) 处理数据包的防火墙和状态跟踪。 -
Linux 网桥 qbr 将数据包转发到实例 1 上的分路接口 (5)。 返回流量遵循类似的相反步骤。
案例 3:不同网络上的实例东西向
对于具有固定或浮动 IP 地址的实例,网络节点使用相同的项目路由器在项目网络之间路由东西向网络流量。
- 项目网络1
- 网络: 192.168.1.0/24
- 网关:192.168.1.1,MAC 地址为 TG1
- 项目网络2
- 网络: 192.168.2.0/24
- 网关:192.168.2.1,MAC 地址为 TG2
- 计算节点 1
- 实例 1:MAC 地址为 I1 的 192.168.1.11
- 计算节点 2
- 实例 2:MAC 地址为 I192 的 168.2.11.2
- 实例 1 驻留在计算节点 1 上,并使用项目网络 1。
- 实例 2 驻留在计算节点 2 上,并使用项目网络 2。
- 两个项目网络位于同一路由器上。
- 实例 1 向实例 2 发送数据包。
以下步骤涉及计算节点 1:
- 实例 1 抽头接口 (1) 将数据包转发到 Linux 网桥 qbr。数据包包含目标 MAC 地址 TG1,因为目标位于另一个网络上。
- Linux 桥接 qbr 上的安全组规则 (2) 处理数据包的状态跟踪。
- Linux 网桥 qbr 将数据包转发到 Open vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接器 br-int 为项目网络 1 添加内部标记。
- 对于 VLAN 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch VLAN 网桥 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将内部标记替换为项目网络 1 的实际 VLAN 标记。 c. 开放式交换机 VLAN 桥接器 br-vlan 通过 VLAN 接口将数据包转发到网络节点。 - 对于 VXLAN 和 GRE 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 隧道网桥 br-tun。 b. 开放式 vSwitch 隧道桥 br-tun 将数据包包装在 VXLAN 或 GRE 隧道中,并添加一个标记来标识项目网络 1。 c. 开放式 vSwitch 隧道桥 br-tun 通过隧道接口将数据包转发到网络节点。
以下步骤涉及网络节点:
- 对于 VLAN 项目网络:
a. VLAN 接口将数据包转发到开放交换机 VLAN 桥接器 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将数据包转发到开放 vSwitch 集成网桥 br-int。 c. 开放式 vSwitch 集成网桥 br-int 将项目网络 1 的实际 VLAN 标记替换为内部标记。 - 对于 VXLAN 和 GRE 项目网络:
a. 隧道接口将数据包转发到开放 vSwitch 隧道桥 br-tun。 b. 打开 vSwitch 隧道桥 br-tun 解包并为项目网络 1 添加内部标记。 c. 开放式 vSwitch 隧道网桥 br-tun 将数据包转发到开放式 vSwitch 集成网桥 br-int。 - Open vSwitch 集成桥接器 br-int 将数据包转发到路由器命名空间 qrouter 中的 qr-1 接口 (3)。qr-1 接口包含项目网络 1 网关 IP 地址 TG1。
- 路由器命名空间 qrouter 将数据包路由到 qr-2 接口 (4)。qr-2 接口包含项目网络 2 网关 IP 地址 TG2。
- 路由器命名空间 qrouter 将数据包转发到 Open vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接器 br-int 为项目网络 2 添加了内部标记。
- 对于 VLAN 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch VLAN 网桥 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将内部标记替换为项目网络 2 的实际 VLAN 标记。 c. 开放式交换机 VLAN 桥接器 br-vlan 通过 VLAN 接口将数据包转发到计算节点 2。 - 对于 VXLAN 和 GRE 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 隧道网桥 br-tun。 b. 开放式 vSwitch 隧道桥 br-tun 将数据包包装在 VXLAN 或 GRE 隧道中,并添加一个标记来标识项目网络 2。 c. Open vSwitch 隧道桥 br-tun 通过隧道接口将数据包转发到计算节点 2。
以下步骤涉及计算节点 2:
- 对于 VLAN 项目网络:
a. VLAN 接口将数据包转发到开放交换机 VLAN 桥接器 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将数据包转发到开放 vSwitch 集成网桥 br-int。 c. 开放式交换机集成网桥 br-int 将项目网络 2 的实际 VLAN 标记替换为内部标记。 - 对于 VXLAN 和 GRE 项目网络:
a. 隧道接口将数据包转发到开放 vSwitch 隧道桥 br-tun。 b. 打开 vSwitch 隧道桥 br-tun 打开数据包的包装,并为项目网络 2 添加内部标记。 c. 开放式 vSwitch 隧道网桥 br-tun 将数据包转发到开放式 vSwitch 集成网桥 br-int。 - Open vSwitch 集成桥接 br-int 将数据包转发到 Linux 桥接器 qbr。
- Linux 网桥 qbr 上的安全组规则 (5) 处理数据包的防火墙和状态跟踪。
- Linux 网桥 qbr 将数据包转发到实例 2 上的分路接口 (6)。
案例 4:同一网络上的实例东西向
对于具有固定或浮动 IP 地址的实例,项目网络无需在网络节点上使用项目路由器即可在实例之间切换东西向网络流量。
- 项目网络
- 计算节点 1
- 实例 1:MAC 地址为 I192 的 168.1.11.1
- 计算节点 2
- 实例 2:MAC 地址为 I192 的 168.1.12.2
- 实例 1 驻留在计算节点 1 上。
- 实例 2 驻留在计算节点 2 上。
- 两个实例使用相同的项目网络。
- 实例 1 向实例 2 发送数据包。
- Open vSwitch 代理处理项目网络内的切换。
以下步骤涉及计算节点 1:
- 实例 1 分路接口 (1) 将数据包转发到 VLAN 网桥 qbr。数据包包含目标 MAC 地址 I2,因为目标位于同一网络上。
- 提供程序桥接器上的安全组规则 (2) qbr 句柄数据包的状态跟踪。
- Linux 网桥 qbr 将数据包转发到 Open vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接器 br-int 为提供商网络 1 添加了内部标记。
- 对于 VLAN 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch VLAN 网桥 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将内部标记替换为项目网络 1 的实际 VLAN 标记。 c. 开放式 vSwitch VLAN 桥接 br-vlan 通过 VLAN 接口将数据包转发到计算节点 2。 - 对于 VXLAN 和 GRE 项目网络:
a. 开放式 vSwitch 集成网桥 br-int 将数据包转发到开放式 vSwitch 隧道网桥 br-tun。 b. 开放式 vSwitch 隧道桥 br-tun 将数据包包装在 VXLAN 或 GRE 隧道中,并添加一个标记来标识项目网络 1。 c. 开放式 vSwitch 隧道桥 br-tun 通过隧道接口将数据包转发到计算节点 2。
以下步骤涉及计算节点 2:
- 对于 VLAN 项目网络:
a. VLAN 接口将数据包转发到开放交换机 VLAN 桥接器 br-vlan。 b. 开放式 vSwitch VLAN 网桥 br-vlan 将数据包转发到开放 vSwitch 集成网桥 br-int。 c. 开放式交换机集成网桥 br-int 将项目网络 2 的实际 VLAN 标记替换为内部标记。 - 对于 VXLAN 和 GRE 项目网络:
- 隧道接口将数据包转发到开放 vSwitch 隧道桥 br-tun。
- 打开 vSwitch 隧道桥 br-tun 打开数据包的包装,并为项目网络 2 添加内部标记。
- 开放式 vSwitch 隧道网桥 br-tun 将数据包转发到开放式 vSwitch 集成网桥 br-int。
- Open vSwitch 集成桥接 br-int 将数据包转发到 Linux 桥接器 qbr。
- Linux 网桥 qbr 上的安全组规则 (3) 处理数据包的防火墙和状态跟踪。
- Linux 网桥 qbr 将数据包转发到实例 2 上的分路接口 (4)。
|