第272篇:OpenStack Neutron 网络:Provider 与 Self-Service
关键词:OpenStack、Neutron、Provider网络、Self-Service网络、扁平网络、VLAN网络、网络插件
一、引言
OpenStack Neutron(原Nova Network的独立项目)是OpenStack平台的网络服务组件,为计算实例(VM)提供"网络即服务"(Networking as a Service)能力。Neutron通过抽象网络资源,使得用户能够按需创建和管理虚拟网络。
Neutron支持两种基本网络类型:Provider网络和Self-Service网络。理解这两种网络的区别和适用场景,是设计和部署OpenStack云平台网络的基础。
二、核心概念
2.1 Provider 网络
Provider网络是由云管理员预先创建的网络,直接映射到底层物理网络基础设施:
特点: - 由云管理员创建和管理 - 租户只能使用,不能修改网络配置 - 直接映射到物理网络的VLAN或物理网络 - 租户的VM可以直接获取物理网络的IP地址
网络类型:
| 类型 | 说明 | 隔离方式 |
|---|---|---|
| flat | 扁平网络,无VLAN标签 | 无隔离(所有VM在同一广播域) |
| vlan | VLAN网络,带VLAN标签 | VLAN隔离 |
| gre | GRE隧道网络 | GRE隧道隔离 |
| vxlan | VXLAN隧道网络 | VNI隔离 |
2.2 Self-Service 网络
Self-Service网络是由租户自主创建和管理的虚拟网络:
特点: - 租户通过Neutron API自主创建 - 租户可以配置子网、路由器、安全组等 - 通过Neutron Router实现租户网络与外部网络的连接 - 提供完整的三层网络能力

2.3 Neutron 网络插件
Neutron通过插件架构支持多种网络后端:
| 插件 | 说明 | 网络类型 |
|---|---|---|
| Open vSwitch(OVS) | 基于OVS的虚拟网络 | VLAN/VXLAN/GRE |
| Linux Bridge | 基于Linux Bridge | VLAN/Flat |
| ML2 | 多层插件(通用) | 多种后端 |
| VLAN | VLAN网络 | VLAN |
| SR-IOV | 单根I/O虚拟化 | 直通物理网卡 |
三、技术细节
3.1 Provider 网络创建
VLAN Provider网络创建:
# 创建VLAN物理网络
openstack network create --provider-physical-network physnet1 \
--provider-network-type vlan \
--provider-segment-id 100 \
--external \
provider-vlan-100
# 创建子网
openstack subnet create --network provider-vlan-100 \
--subnet-range 192.168.100.0/24 \
--gateway 192.168.100.1 \
--dns-nameserver 8.8.8.8 \
provider-subnet-100
Flat Provider网络创建:
# 创建扁平网络(无VLAN标签)
openstack network create --provider-physical-network physnet1 \
--provider-network-type flat \
provider-flat-net
# 创建子网
openstack subnet create --network provider-flat-net \
--subnet-range 10.0.0.0/24 \
--gateway 10.0.0.1 \
provider-flat-subnet
3.2 Self-Service 网络创建
# 1. 租户创建私有网络(VXLAN)
openstack network create tenant-private-net
# 2. 创建子网
openstack subnet create --network tenant-private-net \
--subnet-range 192.168.1.0/24 \
--gateway 192.168.1.1 \
--dns-nameserver 8.8.8.8 \
tenant-subnet-1
# 3. 创建路由器
openstack router create tenant-router
# 4. 添加路由器接口(连接私有子网)
openstack router set --subnet tenant-subnet-1 tenant-router
# 5. 添加外部网络接口
openstack router set --external-gateway provider-vlan-100 tenant-router
# 6. 启动DHCP服务
openstack network set --enable-dhcp tenant-private-net
3.3 Neutron Router 工作原理
Neutron Router是实现租户网络与外部网络三层路由的关键组件:

3.4 DVR(分布式虚拟路由器)
传统L3 Agent将路由器集中部署在一台物理主机上,存在单点故障和带宽瓶颈。DVR将路由器功能分布式部署到所有计算节点:

DVR架构组件:
| 组件 | 角色 | 部署位置 |
|---|---|---|
| Internal L3 Agent | 处理东西向流量和SNAT | 所有计算节点 |
| FIP Agent | 处理浮动IP和南北向流量 | 计算节点(轮询) |
| DVR Ha Agent | 路由器高可用(Keepalived) | 计算节点(3副本) |
DVR vs 集中式路由对比:
| 维度 | 集中式路由 | DVR分布式路由 |
|---|---|---|
| 单点故障 | 是(L3 Agent宕机=全网中断) | 否(分布式冗余) |
| 东西向流量路径 | VM→L3 Agent→VM(绕行) | VM→VM(本地直连) |
| 南北向流量路径 | 经L3 Agent所在节点 | 本地节点直连外部 |
| 带宽瓶颈 | L3 Agent所在节点 | 分散到所有节点 |
| 配置复杂度 | 低 | 中(需额外配置DVR) |
| 适用规模 | 小型环境(<50节点) | 中大型环境(>50节点) |
3.5 L3 高可用(HA)
Neutron支持L3路由器的高可用部署,通过Keepalived协议实现主备切换:
| HA特性 | 说明 | 配置参数 |
|---|---|---|
| 主备选举 | 基于Keepalived的VRRP协议 | ha_true=True |
| 心跳检测 | L3 Agent间心跳报文 | heartbeat_interval=10s |
| 故障切换 | 主节点故障后自动切换 | failover_timer=5s |
| 副本数 | 默认3副本(1主2备) | ha_chosen_hosts=3 |
| 状态同步 | 主备间路由表同步 | ip_propagation_method=notify |
L3 HA配置:
# /etc/neutron/l3_agent.ini
[DEFAULT]
ha_true = True
availability_zone = nova
# 指定HA副本数
max_l3_agents_per_router = 3
min_l3_agents_per_router = 1
3.6 Neutron QoS 服务
Neutron QoS提供带宽管理功能,限制租户网络的带宽:
# 1. 创建QoS策略
openstack qos policy create tenant-qos-policy
# 2. 添加带宽限制规则(下行100Mbps,上行50Mbps)
openstack qos rule create --type minimum-bandwidth \
--value 50 --unit mbits\/sec tenant-qos-policy
openstack qos rule create --type maximum-bandwidth \
--value 100 --unit mbits\/sec tenant-qos-policy
# 3. 将QoS策略绑定到网络
openstack network set --qos-policy tenant-qos-policy tenant-net
| QoS规则类型 | 说明 | 参数 |
|---|---|---|
| minimum-bandwidth | 最小带宽保障 | value(unit:mbits/sec) |
| maximum-bandwidth | 最大带宽限制 | value(unit:mbits/sec) |
| dscp-marking | DSCP标记 | dscp value(0-63) |
| minimum-egress-bandwidth | 最小出向带宽 | value(unit:mbits/sec) |
| maximum-egress-bandwidth | 最大出向带宽 | value(unit:mbits/sec) |
四、实战配置/案例分析
4.1 ML2 + OVS 插件配置
# /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch
extension_drivers = port_security
[ml2_type_flat]
flat_networks = physnet1,physnet2
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:200,physnet2:300:400
[ml2_type_vxlan]
vni_ranges = 1000:2000
[securitygroup]
enable_ipset = True
# /etc/neutron/plugins/ml2/openvswitch_agent.ini
[ovs]
local_ip = 10.0.0.11
bridge_mappings = physnet1:br-phys1,physnet2:br-phys2
[l3]
enable_dvr = False
4.2 故障案例:Neutron DHCP Agent 异常导致VM无法获取IP
现象:租户创建的VM无法获取IP地址,日志显示DHCP REQUEST超时。
排查过程:
# 1. 检查DHCP Agent状态
openstack network agent list
# DHCP Agent状态为down
# 2. 检查DHCP Agent日志
tail -f /var/log/neutron/dhcp_agent.log
# 错误: Failed to create dhclient lease for port xxx
# 3. 检查OVS流表
ovs-ofctl dump-flows br-int
# 发现DHCP报文的流表项缺失
# 4. 检查metalloc库(dhclient)
systemctl status neutron-dhcp-agent
# dhcp-agent进程crash, 元因为dnsmasq配置冲突
根因:宿主机上已安装了dnsmasq服务(用于其他用途),端口67(DHCP)被占用,导致Neutron DHCP Agent无法启动内部的dnsmasq进程。
解决: 1. 停止并禁用系统dnsmasq服务 2. 重启Neutron DHCP Agent 3. 验证VM能够正常获取IP地址 4. 建议在部署文档中明确标注端口冲突检查项
4.3 故障案例:Self-Service网络无法访问外部
现象:租户VM可以互相通信,但无法访问外部网络(互联网)。
排查过程:
# 1. 检查VM路由表
ip route show
# 默认网关正确指向Neutron Router
# 2. 检查Router状态
openstack router show tenant-router
# Router状态为UP, 接口正常
# 3. 检查L3 Agent
openstack network agent list
# L3 Agent状态正常
# 4. 检查SNAT规则
# 在L3 Agent所在节点上:
ip netns exec qrouter-xxx iptables -t nat -L POSTROUTING -n
# SNAT规则缺失!
# 5. 检查外部网络配置
openstack network show provider-vlan-100
# 外部网络没有标记为--external
根因:Provider网络创建时忘记添加--external标志,导致Neutron Router无法将其识别为外部网络,SNAT规则未生成。
解决: 1. 将Provider网络标记为外部网络:
openstack network set --external provider-vlan-100
- 重新关联Router的外部网关:
openstack router set --external-gateway provider-vlan-100 tenant-router
五、总结
| 网络类型 | 创建者 | 管理权限 | 适用场景 |
|---|---|---|---|
| Provider Flat | 管理员 | 只读 | 简单环境, 无隔离需求 |
| Provider VLAN | 管理员 | 只读 | 需要VLAN隔离的租户 |
| Self-Service VXLAN | 租户 | 完全控制 | 多租户云环境 |
| Self-Service GRE | 租户 | 完全控制 | 不支持VXLAN的环境 |
| Neutron组件 | 功能 |
|---|---|
| L2 Agent | 管理OVS/Linux Bridge, 处理二层转发 |
| L3 Agent | 管理路由器, NAT, DHCP路由 |
| DHCP Agent | 管理dnsmasq, 提供DHCP服务 |
| Metadata Agent | 提供实例元数据服务 |
| Security Group | 管理安全组规则(Firewall) |
| DVR | 分布式虚拟路由, 消除单点故障 |
| L3 HA | 路由器主备高可用 |
| QoS | 带宽管理与限速 |
思考
- Provider网络与Self-Service网络的核心区别是什么?在什么场景下必须使用Provider网络?
- Neutron Router本质上是一个运行在命名空间中的Linux路由器,它的性能瓶颈在哪里?
- 如果租户的Self-Service网络需要与外部BGP路由器交换路由,Neutron如何支持这一需求?
- DVR模式下,东西向流量和南北向流量分别走什么路径?与集中式路由相比延迟有何变化?
- Neutron QoS的带宽限制在底层是如何实现的?OVS流表和Linux tc是如何配合的?
下篇预告:第273篇:虚拟网络:VPC、子网、安全组、ACL