第272篇:OpenStack Neutron 网络:Provider 与 Self-Service
关键词
OpenStack Neutron、Provider 网络、Self-Service 网络、VLAN 网络、Overlay 网络、ML2、L3 Agent、DHCP Agent
一、Neutron 网络架构
1.1 Neutron 的角色
OpenStack Neutron 是云计算平台的网络服务组件,提供"网络即服务":
Neutron 在 OpenStack 中的位置:
Horizon(Web UI) Nova(计算) Cinder(存储) Neutron(网络)◄── 本文主题 Glance(镜像) Keystone(认证)
Neutron 提供的网络抽象: Network:虚拟二层网络(类似 VLAN) Subnet:IP 子网 Port:虚拟端口(连接 VM 到网络) Router:虚拟路由器(连接不同网络) Security Group:虚拟机级别的防火墙 Floating IP:公网 IP(NAT)
Neutron 的核心组件: neutron-server:API 服务 neutron-l3-agent:三层路由(每个网络节点) neutron-dhcp-agent:DHCP 服务(每个网络节点) neutron-openvswitch-agent:OVS 配置代理(每个计算节点) neutron-linux-bridge-agent:Linux Bridge 代理(备选) neutron-metadata-agent:元数据服务
1.2 网络节点与计算节点
Neutron 的物理部署:
| 计算节点 1 nova-compute neutron-ovs agent VM1 VM2 | 计算节点 2 nova-compute neutron-ovs agent VM3 VM4 | 网络节点 neutron- l3-agent dhcp-agent metadata- agent | ||
|---|---|---|---|---|
| │ │ │ | ||||
| └──────────────────┼───────────────────┘ | ||||
| │ | ||||
| ┌───────┴───────┐ | ||||
| │ 物理网络 │ | ||||
| │ (Overlay) │ | ||||
| └───────────────┘ |
计算节点:运行 VM,通过 OVS 提供虚拟网络 网络节点:提供路由/NAT/DHCP/Floating IP 网络节点可以是独立的,也可以分布到计算节点(DVR)
二、Provider 网络
2.1 什么是 Provider 网络
Provider 网络直接映射到物理网络(VLAN 或扁平),不需要 Overlay 封装:
Provider 网络(扁平)——Flat:
┌─────────────────────────────────────────┐
│ 计算节点 │
│ VM1 ── br-int ── br-ex ── ens3 ── 物理交换机 │
│ VM2 ── br-int ── br-ex ── ens3 ── 物理交换机 │
│ 所有 VM 在同一广播域(无 VLAN) │
└─────────────────────────────────────────┘
# 创建 Flat Provider 网络
openstack network create --provider-network-type flat \
--provider-physical-network physnet1 public-net
Provider 网络(VLAN):
┌─────────────────────────────────────────┐
│ 计算节点 │
│ VM1(VLAN 100) │
│ VM2(VLAN 200) │
│ br-int ── br-ex ── ens3 (Trunk) ── 物理交换机 │
│ 物理交换机上对应 Trunk 口允许 VLAN 100/200 │
└─────────────────────────────────────────┘
# 创建 VLAN Provider 网络
openstack network create --provider-network-type vlan \
--provider-physical-network physnet1 \
--provider-segment 100 vlan-net-100
2.2 Provider 网络的优缺点
优点:
1. 简单直接——无 Overlay 开销
2. 高性能——直通物理网络
3. 延迟低——无封装/解封装
4. 调试方便——tcpdump 直接可见
缺点:
1. VLAN 4094 限制——无法大规模多租户
2. 物理网络依赖——VLAN/Trunk 需在交换机配置
3. 扩展性差——新增网络需换物理配置
4. IP 地址消耗——VM 用物理网络 IP
适用场景:
小型私有云(< 50 台物理机)
性能敏感的裸金属场景
已有物理网络基础设施
三、Self-Service 网络
3.1 什么是 Self-Service 网络
Self-Service 网络使用 Overlay 技术(VXLAN/GRE),租户可以自助创建网络:
Self-Service 网络(VXLAN):
┌─────────────────────────────────────────┐
│ 计算节点 1 │
│ │
│ VM1(VNI 10001) │
│ VM2(VNI 10002) │
│ │
│ OVS br-int ── VXLAN 隧道 ──► 计算节点 2 │
│ │ │
│ └── ens3(物理 NIC,IP 可达) │
│ │
│ VXLAN 封装:外层 IP 到远端计算节点 │
│ VNI = 10001/10002(1600 万隔离空间) │
└─────────────────────────────────────────┘
# 创建 VXLAN Self-Service 网络
openstack network create --provider-network-type vxlan \
--provider-segment 10001 self-net-1
# 创建子网
openstack subnet create --network self-net-1 \
--subnet-range 192.168.1.0/24 \
--dns-nameserver 8.8.8.8 subnet-1
3.2 两种网络的对比
| 对比维度 | Provider 网络 | Self-Service 网络 |
|---|---|---|
| 封装 隔离数 性能 多租户 自助创建 物理网络依赖 调试 IP 地址 跨节点通信 适用场景 | 无(直通) 4094(VLAN) 高(无封装开销) 有限 否(需管理员) 依赖 VLAN Trunk 简单 物理网络 IP VLAN Trunk 性能敏感/小规模 | VXLAN/GRE/Geneve 1600万+(VNI) 中(有封装开销) 原生支持 是(租户自助) 仅需 IP 可达 复杂(抓包需看内层) 租户独立 IP VXLAN 隧道 多租户/大规模 |
四、Neutron 网络架构详解
4.1 OVS 桥接方案
Neutron + OVS 的典型桥接方案:
| 计算节点 ┌─────┐ ┌─────┐ └──┬──┘ └──┬──┘ ┌──┴───────┴──────────────────┐ └──────────┬──────────────────┘ ┌──────────┴──────────────────┐ └──────────┬──────────────────┘ ┌──────────┴──────────────────┐ └──────────┬──────────────────┘ | VM1 tap1 br-int(集成网桥) OpenFlow 流表: - VLAN/VXLAN 处理 - 安全组 - 端口隔离 patch br-tun(隧道网桥) VXLAN/GRE 封装/解封装 phy-br br-ex(外部网桥) 物理 NIC 连接 ens3 | tap2 | VM2 | |
|---|---|---|---|---|
| │ | ||||
| ┌───────┴───────┐ | ||||
| │ 物理交换机 │ | ||||
| └───────────────┘ |
三层网桥的作用: br-int:VM 的第一跳,安全组、端口隔离 br-tun:隧道封装/解封装(VXLAN) br-ex:连接到物理网络
4.2 L3 Agent 与路由
Neutron L3 Agent 提供虚拟路由功能:
| 网络节点(或计算节点,DVR 模式) ┌────────────────────────────────┐ | qrouter-XXX(路由命名空间) ┌────────────────────┐ └────────────────────┘ iptables 规则: SNAT:VM→外网 源地址转换 DNAT:Floating IP→VM IP | Virtual Router ┌── 192.168.1.1 ├── 10.0.0.1 ├── Floating IP └── 172.16.0.1 | ← 租户 A 网关 ← 租户 A 另一子网 ← 公网 IP (SNAT/DNAT) ← 外部网络 | ||
|---|---|---|---|---|---|
# 创建路由 openstack router create tenant-router openstack router add subnet tenant-router subnet-1 openstack router set tenant-router --external-gateway public-net
L3 Agent 模式: 1. 集中式(Legacy)——所有路由在专用网络节点 2. DVR(Distributed Virtual Routing)——路由分布到计算节点 DVR 优点:东西向流量不绕行,减少网络节点压力
4.3 DHCP Agent
Neutron DHCP Agent 为 VM 提供 IP 地址分配:
┌──────────────────────────────────────────┐
│ DHCP 命名空间(qdhcp-XXX) │
│ │
│ dnsmasq ── 为 192.168.1.0/24 提供 DHCP │
│ - IP 范围:192.168.1.2 - 192.168.1.254│
│ - 网关:192.168.1.1 │
│ - DNS:8.8.8.8 │
│ - MTU:1450(VXLAN 场景) │
│ │
│ 每个网络一个 DHCP 命名空间 │
│ 隔离不同网络的 DHCP 服务 │
└──────────────────────────────────────────┘
# 查看 DHCP 代理
openstack network agent list
# DHCP 关键配置
/etc/neutron/dhcp_agent.ini
dnsmasq_config_file = /etc/neutron/dnsmasq.conf
dhcp_domain = openstack.local
enable_isolated_metadata = True
五、Neutron 安全组
5.1 安全组实现
Neutron 安全组通过 iptables + OVS 流表实现:
VM 级别的防火墙规则:
┌──────────────────────────────────────────┐
│ VM 实例 │
│ ┌────────────────────────────────┐ │
│ │ iptables 规则(tap 端口上) │ │
│ │ INPUT 链: │ │
│ │ - 允许关联流量(ESTABLISHED)│ │
│ │ - 允许 ICMP │ │
│ │ - 允许 TCP 22(SSH) │ │
│ │ - 允许 TCP 80(HTTP) │ │
│ │ - 丢弃其他 │ │
│ │ OUTPUT 链: │ │
│ │ - 允许所有出站 │ │
│ └────────────────────────────────┘ │
└──────────────────────────────────────────┘
# 创建安全组规则
openstack security group create web-sg
# 允许 SSH
openstack security group rule create web-sg \
--protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0
# 允许 HTTP
openstack security group rule create web-sg \
--protocol tcp --dst-port 80:80 --remote-ip 0.0.0.0/0
# 应用安全组到 VM
openstack server add security group vm1 web-sg
六、总结
| 知识点 | 核心要点 |
|---|---|
| Provider 网络 | 直接映射物理 VLAN/Flat,无封装,高性能 |
| Self-Service 网络 | VXLAN/GRE Overlay,1600 万隔离,多租户 |
| ML2 | 模块化 Layer 2,支持多种网络类型 |
| OVS 桥接 | br-int(VM)+ br-tun(隧道)+ br-ex(外部) |
| L3 Agent | 虚拟路由、SNAT/DNAT、Floating IP |
| DVR | 分布式虚拟路由,东西向流量不绕行 |
| DHCP Agent | dnsmasq 为每个网络提供 DHCP |
| 安全组 | iptables 规则,VM 级别防火墙 |
七、思考
- Provider 网络和 Self-Service 网络的核心区别是什么?为什么 Provider 网络不适合大规模多租户场景?
- Neutron 的 OVS 桥接方案中,br-int、br-tun、br-ex 各自承担什么角色?
- L3 Agent 集中式和 DVR 模式有什么区别?DVR 如何解决东西向流量绕行问题?
- 一个 VXLAN Self-Service 网络中,VM1 在计算节点 A,VM2 在计算节点 B,它们通信时数据包如何封装和解封装?
- 安全组如何实现跨计算节点的一致策略?如果 VM1 的安全组规则只允许 VM2 的 SSH 访问,在物理网络中如何保证?
下篇预告:第273篇《虚拟网络:VPC、子网、安全组、ACL》——云计算虚拟网络的核心概念,VPC 隔离、子网划分、安全组与 ACL 的对比与最佳实践。