OpenStack Neutron网络服务详解

发表于
更新于
3 6.0~7.7 分钟 2699

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
上一篇 OpenStack Ceilometer(监控计量)详解
下一篇 OpenStack Glance 镜像服务概念