OpenStack 的网络功能主要由 Neutron 项目提供,Neutron 的核心理念是“网络即服务”(Network as a Service),它允许管理员和用户定义复杂的网络拓扑,而不仅仅是简单的桥接。

下面我们将从核心概念、常见网络模型和高级特性三个方面来阐述。
核心概念
在深入具体模式之前,必须先了解 Neutron 的几个核心组件,它们是构建所有网络模式的基础。
-
Plugin (插件): Neutron 的核心是插件架构,Plugin 负责实现具体的网络后端技术,
- OVS (Open vSwitch): 最常用、功能最强大的软件交换机插件。
- Linux Bridge: 另一个流行的软件交换机插件。
- ML2 (Modular Layer 2): 这是目前的主流框架,它允许同时使用多种二层技术(如 VLAN, VXLAN, GRE 等),并通过一个核心插件(如 OVS)来驱动,ML2 是现代 OpenStack 环境的标准。
-
Agent (代理): Agent 是运行在计算节点和网络节点上的进程,负责执行 Plugin 下发的具体网络任务。
(图片来源网络,侵删)- L2 Agent: 如
openvswitch或linuxbridgeagent,负责创建虚拟交换机、处理 VLAN 标签、处理端口等二层任务。 - L3 Agent: 运行在网络节点上,负责实现虚拟路由器的功能,如 NAT 和路由。
- DHCP Agent: 运行在网络节点上,为虚拟机提供 DHCP 服务。
- Metadata Agent: 运行在网络节点上,允许虚拟机通过特殊的元数据地址获取实例信息(如用户数据、密钥对等)。
- L2 Agent: 如
-
Network (网络): 一个隔离的二层广播域,类似于传统网络中的 VLAN。
-
Subnet (子网): 一个 IP 地址块,定义了网络中的 IP 地址范围、网关、DNS 等信息。
-
Port (端口): 虚拟机网卡、路由器接口等都抽象为 Port,每个 Port 都有一个 MAC 地址和一个 IP 地址。
-
Router (路由器): 连接不同网络的设备,可以实现三层路由和 NAT。
-
Security Group (安全组): 实现实例级别的防火墙功能,控制进出端口的流量,默认是“允许所有”的策略。
常见网络模型/部署模式
根据需求和规模,OpenStack 有几种典型的网络部署模型,最核心的区别在于虚拟机如何访问外部网络(浮动 IP)以及网络节点的角色。
Provider Networks (供应商网络 / Flat 网络)
这是最简单、最直接的模式。
- 工作原理:
- Neutron 直接使用底层的物理网络(比如物理交换机上已经划分好的 VLAN)。
- 创建的 Neutron Network 直接映射到一个物理网络接口(如
br-ex)。 - 虚拟机的流量直接通过物理交换机路由到外部网络。
- 特点:
- 优点: 配置简单,性能高,因为流量几乎不经过虚拟化处理。
- 缺点: 不灵活,无法实现多租户网络隔离,所有租户的实例都处于同一个物理网络中。
- 适用场景: 小型测试环境、或者对网络隔离要求不高的简单私有云。
- NAT: 通常不使用 Neutron 的 L3 Agent 和 Floating IP,实例直接使用物理网络的 IP 地址。
Self-Service Networks (自服务网络 / 私有网络)
这是最常用、功能最强大的模式,也是 OpenStack 云的核心价值所在,它允许租户创建自己完全隔离的私有网络。
在这种模式下,通常会结合使用 VLAN 或 Overlay (如 VXLAN) 技术来实现多租户网络隔离。
- 工作原理:
- 创建私有网络: 租户创建一个或多个隔离的 Neutron Network(通过 VLAN 或 VXLAN 实现)。
- 连接实例: 实例连接到这个私有网络,获得私有 IP 地址。
- 创建路由器: 租户创建一个 Neutron Router,将其私有网络接口连接到一个外部网络(通常是 Provider Network)。
- 获取浮动 IP: 租户为 Router 的外部接口申请一个浮动 IP(来自外部网络的 IP 地址池)。
- 访问外部网络: 实例通过 Router 的 SNAT (源地址转换) 访问外部网络,所有出站流量的源 IP 都会被替换成浮动 IP。
- 外部访问实例: 当外部流量发往浮动 IP 时,Router 会通过 DNAT (目标地址转换) 将流量转发到目标实例的私有 IP。
- 特点:
- 优点: 完全的网络隔离,多租户支持,灵活的 IP 地址管理,是构建公有云和私有云的标准。
- 缺点: 配置相对复杂,因为涉及多个组件(Router, Agent, NAT 等),性能有一定损耗。
- 适用场景: 几乎所有生产环境,特别是需要多租户隔离的场景。
根据网络节点的部署方式,Self-Service Networks 又可以细分为两种经典架构:
a. Legacy Networking (传统网络)
这是 Neutron 早期广泛使用的架构,网络节点承担了所有关键的网络功能。
- 网络节点角色:
- L3 Agent: 负责路由和 NAT。
- DHCP Agent: 负责提供 DHCP 服务。
- L2 Agent: 负责处理 VLAN 标签。
- 流量路径:
- 东西向流量 (East-West): 实例之间的通信通常只发生在计算节点之间,通过 L2 Agent 处理。
- 南北向流量 (North-South): 实例访问外部网络的流量必须经过网络节点,数据包从计算节点 -> 网络节点(进行 SNAT/DNAT)-> 外部网络。
- 缺点: 网络节点成为单点故障和性能瓶颈,所有南北向流量都汇集于此。
b. DVR (Distributed Virtual Router) 分布式虚拟路由器
为了解决传统网络架构中网络节点的瓶颈问题,Neutron 引入了 DVR。
- 工作原理:
- L3 Agent 的功能被分发到每个计算节点上。
- 每个计算节点上都有一个虚拟路由器实例,处理本地上出站流量的 SNAT。
- DNAT 流量仍然需要集中处理,但只发生在第一次进入网络节点时,之后会通过隧道直接分发到目标计算节点。
- 特点:
- 优点:
- 消除单点故障: 没有中心化的路由瓶颈。
- 提升性能: 大部分南北向流量(尤其是出站)不再经过网络节点,直接从计算节点发出,大大降低了网络节点的负载和延迟。
- 可扩展性更好: 随着计算节点增加,路由处理能力也随之线性增长。
- 缺点: 配置更复杂,需要确保所有计算节点都启用了 DVR 功能。
- 适用场景: 所有推荐的生产环境,特别是对网络性能和可用性要求高的场景。
- 优点:
高级网络特性
除了上述基本模型,Neutron 还提供了一些高级网络功能:
- LBaaS (Load-Balancer as a Service): 提供负载均衡服务,可以将流量分发到多个后端实例,实现高可用和扩展性。
- FWaaS (Firewall as a Service): 提供网络级别的防火墙,可以设置防火墙策略来保护整个子网或路由器。
- VPNaaS (VPN as a Service): 提供站点到站点(Site-to-Site)或远程访问(Remote Access)的 VPN 功能,用于安全地连接 OpenStack 云和外部网络。
- SR-IOV (Single Root I/O Virtualization): 一种硬件辅助的虚拟化技术,它允许虚拟机直接通过物理网卡的硬件功能进行网络通信,绕过软件交换机,从而获得接近物理网络的性能,适用于对网络延迟和吞吐量要求极高的场景(如 HPC、金融交易)。
总结与选择建议
| 网络模式 | 核心特点 | 适用场景 | 推荐度 |
|---|---|---|---|
| Provider Networks | 简单直接,性能高,无隔离 | 小型测试、无隔离需求的环境 | ⭐⭐ |
| Self-Service (Legacy) | 多租户隔离,功能全,但网络节点是瓶颈 | 早期生产环境,或 DVR 无法使用的场景 | ⭐⭐⭐ |
| Self-Service (DVR) | 多租户隔离,高性能,高可用,无单点故障 | 所有现代生产环境的首选 | ⭐⭐⭐⭐⭐ |
| SR-IOV | 接近物理网络的性能,硬件辅助 | HPC、高性能数据库、低延迟交易等特殊场景 | ⭐⭐⭐⭐ (在特定场景下) |
如何选择?
- 如果你只是想快速搭建一个 OpenStack 环境,测试一下基本功能:从 Provider Networks 开始,最简单。
- 如果你要构建一个正式的生产环境,需要支持多租户:必须选择 Self-Service Networks。
- 在选择 Self-Service Networks 时:强烈推荐使用 DVR 架构,它能为你带来更好的性能、可用性和可扩展性。
- 如果你的应用对网络性能有极致要求:考虑在特定实例上启用 SR-IOV,但这通常会增加硬件成本和配置复杂性。
