第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 级别防火墙

七、思考

  1. Provider 网络和 Self-Service 网络的核心区别是什么?为什么 Provider 网络不适合大规模多租户场景?
  2. Neutron 的 OVS 桥接方案中,br-int、br-tun、br-ex 各自承担什么角色?
  3. L3 Agent 集中式和 DVR 模式有什么区别?DVR 如何解决东西向流量绕行问题?
  4. 一个 VXLAN Self-Service 网络中,VM1 在计算节点 A,VM2 在计算节点 B,它们通信时数据包如何封装和解封装?
  5. 安全组如何实现跨计算节点的一致策略?如果 VM1 的安全组规则只允许 VM2 的 SSH 访问,在物理网络中如何保证?

下篇预告:第273篇《虚拟网络:VPC、子网、安全组、ACL》——云计算虚拟网络的核心概念,VPC 隔离、子网划分、安全组与 ACL 的对比与最佳实践。