OpenStack Neutron网络服务详解
OpenStack Neutron网络服务详解
Neutron 是 OpenStack 的网络服务核心组件,采用插件化、驱动化、分布式架构设计,为虚拟机提供 L2 隔离网络、L3 路由转发、NAT 网关与安全组等虚拟网络功能。✨
一、网络核心模型
Neutron 抽象了五种核心网络资源:
- Network: L2隔离广播域,类似物理交换机+VLAN
- Subnet: IPv4/IPv6地址段,定义IP池与网关
- Port: 虚拟交换机端口,VM网卡的挂载点
- Router: L3路由转发,连接不同子网与外部网络
- Security Group: 有状态防火墙规则集
资源关系
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操作
# 创建FLAT类型提供者网络
openstack network create --provider-network-type FLAT \
--provider-physical-network PROVIDER \
--EXTERNAL provider-net
# 创建VLAN类型提供者网络
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操作
# 创建自服务网络(默认为VXLAN)
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
# 分配浮动IP实现外网访问
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操作
# 创建路由器
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操作
# 列出安全组
openstack security group list
# 创建安全组
openstack security group create web-sg \
--description "Web服务器安全组"
# 添加规则:允许HTTP
openstack security group rule create --proto TCP \
--dst-port 80 --src-ip 0.0.0.0/0 web-sg
# 添加规则:允许SSH(指定远程安全组—微隔离)
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 | 辅助 |
配置示例
# /etc/neutron/plugins/ml2/ml2_conf.ini
[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(外部桥): 连接物理网络的进出口
数据流转发路径
同节点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配置
# /etc/neutron/plugins/ml2/openvswitch_agent.ini
[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配置
# /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[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流表动态下发 |
虚拟网络技术栈
物理层: 交换机 ── 路由器 ── 网卡
│
隔离层: 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接入网络
用户 → 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。
0