OpenStack Neutron网络服务详解
Neutron是OpenStack的网络服务核心组件,采用插件化、驱动化、分布式架构设计,为虚拟机提供L2隔离网络、L3路由转发、NAT网关与安全组等虚拟网络功能。✨
一、网络核心模型
Neutron抽象了五种核心网络资源:
- Network: L2隔离广播域,类似物理交换机+VLAN
- Subnet: IPv4/IPv6地址段,定义IP池与网关
- Port: 虚拟交换机端口,VM网卡的挂载点
- Router: L3路由转发,连接不同子网与外部网络
- Security Group: 有状态防火墙规则集
资源关系
1 2 3 4 5
| NETWORK ──┬── SUBNET (10.0.0.0/24) ── PORT (10.0.0.2) ── VM-1 │ └── SUBNET (172.16.1.0/24) ── PORT (172.16.1.2) ── VM-2 │ ROUTER ── 连接外网PROVIDER NETWORK
|
关键概念对比
- Network与Subnet: 一对多关系,一个Network可包含多个Subnet(如IPv4+IPv6)
- Port与VM: 一对一绑定,创建VM时Neutron自动分配Port
- Router与Network: 连接Provider Network后实现内网↔外网互通
二、Provider Network
特性: 直接映射到物理网络的L2网络段,VM直接获得物理网络IP。
- 创建者: 仅管理员
- 网络类型: Flat(无标签)或 VLAN(802.1Q)
- 外部访问: L2桥接直连物理网络,无需路由
- 性能: 原生硬件转发,无封装开销
- VLAN上限: 4096
CLI操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| openstack network create --provider-network-type FLAT \ --provider-physical-network PROVIDER \ --EXTERNAL provider-net
openstack network create --provider-network-type VLAN \ --provider-physical-network PROVIDER \ --provider-segment 100 \ provider-vlan-100
openstack subnet create --network provider-vlan-100 \ --subnet-range 192.168.100.0/24 \ --gateway 192.168.100.1 \ --allocation-pool START=192.168.100.10,END=192.168.100.200 \ provider-vlan-100-subnet
|
适用场景: 数据中心扁平网络、高性能计算、裸金属与虚拟化混布。
三、Self-Service Network
特性: 基于Overlay隧道技术的多租户隔离虚拟网络(VPC)。
- 创建者: 任意租户/用户
- 网络类型: VXLAN / GRE / Geneve(默认VXLAN)
- 外部访问: 需虚拟Router + NAT(浮动IP)
- 隔离上限: VXLAN支持约1600万VNI(远超VLAN的4096)
- 性能: 有封装解封装开销(VXLAN增加50B头部)
CLI操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| openstack network create selfservice-net
openstack subnet create --network selfservice-net \ --subnet-range 10.0.0.0/24 \ --gateway 10.0.0.1 \ --dns-nameserver 8.8.8.8 \ selfservice-subnet
openstack router create demo-router openstack router set --external-gateway provider-net demo-router openstack router add subnet demo-router selfservice-subnet
openstack floating ip create provider-net openstack server add floating ip <SERVER_NAME> <FLOATING_IP>
|
适用场景: 多租户VPC、弹性虚拟网络环境。
三、路由器 — L3转发与NAT
路由器由 neutron-l3-agent 实现,运行在网络命名空间中,每个租户路由器独立隔离。
核心功能
- SNAT: 内网→外网出站流量自动源地址转换(VM私有IP→浮动IP)
- DNAT: 外网→内网入站流量目的地址转换(浮动IP→VM私有IP)
- 子网路由: 路由器自动转发同一路由器下不同子网间的流量
高级部署模式
| 模式 |
说明 |
优势 |
劣势 |
| Legacy L3 |
集中式路由器在网络节点 |
管理简单 |
单点瓶颈、东西流量绕行 |
| DVR |
分布式虚拟路由 |
东西流量本地转发 |
配置复杂 |
| L3 HA |
多副本Keepalived |
高可用 |
资源消耗翻倍 |
CLI操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| openstack router create demo-router
openstack router set --external-gateway provider-net demo-router
openstack router add subnet demo-router selfservice-subnet
openstack router remove subnet demo-router selfservice-subnet
openstack router delete demo-router
|
四、安全组 — 有状态虚拟机防火墙
安全组提供Port级别的状态化L2-L4防火墙,作用于虚拟机每个虚拟网卡。
默认策略
- 入站: 全部拒绝(必须显式允许)
- 出站: 全部允许(可配置)
- 状态化: 允许入站响应已建立连接的流量
后端实现
| 实现方式 |
机制 |
适用场景 |
| iptables_hybrid |
每个VM Port插入iptables规则链 |
小规模、兼容性优先 |
| openvswitch |
OVS流表实现防火墙规则 |
大规模、高吞吐 |
| OVN ACL |
OVN南向流表,Port Group管理 |
超大规模、分布式 |
CLI操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| openstack security group list
openstack security group create web-sg \ --description "Web服务器安全组"
openstack security group rule create --proto TCP \ --dst-port 80 --src-ip 0.0.0.0/0 web-sg
openstack security group rule create --proto TCP \ --dst-port 22 --remote-group bastion-sg web-sg
openstack server create --security-group web-sg \ --security-group default VM_NAME
|
最佳实践:
- 最小权限原则,仅开放必要端口
- 使用
--remote-group 实现微隔离(Microsegmentation),IP变化不影响规则
- 安全组规则上限(
quota_security_group_rule)按需调整
五、ML2插件架构
ML2(Modular Layer 2)是Neutron的核心插件框架,采用双驱动模型:
- Type Drivers(类型驱动): 定义网络技术的物理实现方式
- Mechanism Drivers(机制驱动): 定义网络访问的具体实现机制
Type Drivers对比
| 驱动 |
隔离方式 |
报文格式 |
VLAN支持 |
最大网络数 |
MTU开销 |
| Flat |
无标签 |
原始以太帧 |
❌ |
1 |
0 |
| VLAN |
802.1Q |
以太帧+4B Tag |
✅ |
4094 |
4B |
| VXLAN |
VXLAN封装 |
MAC-in-UDP |
❌ |
~16M |
50B |
| GRE |
GRE封装 |
MAC-in-GRE |
❌ |
~4G |
42B |
| Geneve |
Geneve可变封装 |
MAC-in-UDP+TLV |
❌ |
理论上无限 |
50B+ |
Mechanism Drivers对比
| 驱动 |
组件 |
隧道支持 |
DPDK |
复杂度 |
| Open vSwitch |
OVS Agent + ovsdb |
VXLAN/GRE/Geneve |
✅ |
中 |
| Linux Bridge |
LB Agent + bridge-utils |
VXLAN |
❌ |
低 |
| SR-IOV |
SR-IOV Agent |
❌(硬件VF直通) |
✅ |
中 |
| MacVTap |
MacVTap Agent |
❌ |
✅ |
低 |
| L2 Population |
辅助驱动 |
优化广播 |
N/A |
辅助 |
配置示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [ml2] type_drivers = FLAT,VLAN,VXLAN mechanism_drivers = openvswitch,l2population tenant_network_types = VXLAN extension_drivers = port_security
[ml2_type_flat] flat_networks = provider
[ml2_type_vlan] network_vlan_ranges = provider:100:200
[ml2_type_vxlan] vni_ranges = 1:1000000
|
六、Open vSwitch 深度解析
OVS是Neutron最广泛使用的虚拟交换机,提供内核态高速转发 + 用户态灵活控制的双层架构。
三种核心OVS桥接
- br-int(集成桥): VM虚拟机的统一接入点,连接所有VM的tap设备
- br-tun(隧道桥): Overlay隧道(VXLAN/GRE)封装与解封装
- br-ex(外部桥): 连接物理网络的进出口
数据流转发路径
1 2 3 4 5
| 同节点VM通信: VM-1 tap → br-int流表匹配 → 直接转发 → VM-2 tap
跨节点VM通信(VXLAN): VM-1 tap → br-int → br-tun封装VXLAN → 物理网卡 → 物理网络 → 目标节点物理网卡 → br-tun解封装 → br-int → VM-2 tap
|
OVS Agent配置
1 2 3 4 5 6 7 8 9
| [ovs] bridge_mappings = provider:br-ex local_ip = 10.0.0.1 tunnel_types = VXLAN l2_population = True
[securitygroup] firewall_driver = openvswitch
|
七、Linux Bridge 架构
Linux Bridge是内核原生网桥方案,架构更简单:
- 实现: 内核桥接模块,无需用户态守护进程
- 隧道: 支持VXLAN,不支持GRE
- 安全组: 仅支持
iptables_hybrid
- 管理工具:
brctl / ip link
- 复杂度: 低
LB Agent配置
1 2 3 4 5 6 7 8 9 10 11 12
| [linux_bridge] physical_interface_mappings = provider:ETH1
[vxlan] enable_vxlan = True local_ip = 10.0.0.1 l2_population = True
[securitygroup] firewall_driver = iptables_hybrid enable_security_group = True
|
OVS vs Linux Bridge 选型
- OVS: 功能丰富(OpenFlow/QoS/DPDK/GRE),适合复杂SDN场景
- Linux Bridge: 简单稳定,适合小规模部署或对复杂度敏感的环境
- 趋势: OVN(基于OVS的SDN控制器)正逐步取代传统OVS Agent方案
八、SDN思想与虚拟网络实现
Neutron架构深刻体现了SDN的转控分离思想:
| SDN原则 |
Neutron实现 |
| 控制与转发分离 |
Neutron Server ↔ Agent RPC通信,Server下发配置不参与数据转发 |
| 逻辑集中控制 |
统一API + ML2插件框架,全局网络视图统一策略 |
| 网络可编程 |
REST API创建/修改网络资源,OpenFlow流表动态下发 |
虚拟网络技术栈
1 2 3 4 5 6 7 8 9 10 11
| 物理层: 交换机 ── 路由器 ── 网卡 │ 隔离层: VLAN (硬件) / VXLAN (软件Overlay) │ 虚拟交换: Open vSwitch (流表) / Linux Bridge (MAC学习) │ 虚拟路由: L3 Agent (命名空间+NAT) / DVR (分布式路由) │ 安全策略: Security Group (iptables / OVS流表 / OVN ACL) │ 附加服务: DHCP (dnsmasq) / Metadata Agent / Octavia (LBaaS)
|
完整工作流:创建VM接入网络
1 2 3 4
| 用户 → NOVA-API →① NEUTRON PORT-CREATE →② 分配MAC+IP →③ NOVA-SCHEDULER选择计算节点 →④ RPC通知OVS AGENT →⑤ OVS-VSCTL ADD-PORT创建tap设备接入br-int →⑥ LIBVIRT启动VM插入网卡 →⑦ VM获取IP → ACTIVE
|
九、版本演进趋势 🚀
| 版本 |
核心变化 |
| 2025.1 Epoxy |
OVN成为默认ML2驱动,传统OVS Agent进入维护模式 |
| 2025.2 Flamingo |
OVN安全组性能增强,Port Group批量管理优化 |
| 2026.1 Gazpacho |
OVN稳定版,DSD-LB功能完善,8+新特性 |
主要趋势:
- OVN取代传统OVS Agent: 原生分布式路由、分布式DHCP、OVN ACL安全组
- OVN ACL取代iptables: OVS流表实现,支持万级规则规模(传统iptables约1000条即瓶颈)
- DVR + OVN原生分布式: 东西流量完全本地转发
- 硬件Offload: SR-IOV + OVS-DPDK加速VM网络性能逼近裸机
💡 技术解析
- 术语: ML2 (Modular Layer 2) — Neutron核心插件框架,Type Driver定义网络技术类型,Mechanism Driver定义实现机制,双驱动支持多种L2网络技术共存。
- 术语: VXLAN (Virtual Extensible LAN) — MAC-in-UDP隧道封装,24bit VNI支持1600万+虚拟网络,解决VLAN 4096上限问题,增加50B头部开销。
- 术语: Network Namespace — Linux内核级隔离机制,独立网络栈。Neutron为每个路由器和DHCP服务创建独立namespace(qrouter-xxx / qdhcp-xxx),实现租户间L3隔离。
- 术语: DVR (Distributed Virtual Router) — 分布式虚拟路由器,将L3路由分散到每个计算节点,东西流量本地转发避免绕行网络节点。
- 术语: L2 Population — ARP/FDB表项预填充机制,替代广播泛滥,减少VXLAN/GRE网络中的BUM流量,提升大规模部署性能。
- 术语: SNAT/DNAT — 源地址转换(SNAT)使内网VM可访问外网;目的地址转换(DNAT)使外网流量通过浮动IP到达内网VM。
- 命令:
openstack network create — 创建虚拟网络,--PROVIDER-NETWORK-TYPE 指定FLAT/VLAN/VXLAN,--PROVIDER-PHYSICAL-NETWORK 指定物理映射,--PROVIDER-SEGMENT 指定VLAN ID。
- 命令:
openstack security group rule create — 创建安全组规则,--PROTO 指定TCP/UDP/ICMP,--DST-PORT 指定端口范围,--REMOTE-GROUP 以安全组而非IP作为规则源,实现应用级微隔离。
- 命令:
openstack router set --external-gateway — 为路由器设置外部网关,结合 openstack router add subnet 将租户子网连接到路由器,实现内网与外网互通。
- 命令:
openstack floating ip create — 从外部网络分配浮动IP,openstack server add floating ip 将浮动IP绑定到VM实例,实现外网访问内网VM。