1. 架构概述

Neutron是OpenStack的网络即服务组件,提供云环境的网络虚拟化功能。其架构采用分层设计,实现了控制平面与数据平面的分离,具有高度的灵活性和可扩展性。

2. 核心组件层次结构

2.1 控制平面(Neutron Server端)

API → Plugin → Driver → (消息队列) → Agent
API 层
  • 角色:系统入口网关
  • 职责
    • 接收所有REST API请求(创建网络、子网、端口等)
    • 身份认证和权限验证
    • 参数校验和请求格式化
    • 将合法请求路由到相应Plugin
Plugin 层
  • 角色:网络业务逻辑大脑
  • 类型
    • 核心Plugin:管理L2网络(默认使用ML2)
    • 服务Plugin:提供高级网络服务(L3路由、防火墙、负载均衡等)
  • 职责
    • 处理业务逻辑
    • 维护网络状态到数据库
    • 协调多个Driver协同工作
    • 决定"做什么"和"由谁做"
Driver 层
  • 角色:专业技术实现团队

  • 在ML2 Plugin中的两种Driver

    Type Driver - 网络类型专家

    • 管理网络隔离机制
    • 分配网络标识符
    • 支持的类型:flat, vlan, vxlan, gre

    Mechanism Driver - 实现机制专家

    • 负责具体技术实现
    • 通过RPC调用对应Agent
    • 支持的机制:openvswitch, linuxbridge, sriov

2.2 数据平面(计算/网络节点端)

Agent 层
  • 角色:本地网络执行引擎
  • 部署位置:每个计算节点和网络节点
  • 常见Agent类型
    • ovs-agent:管理Open vSwitch
    • linuxbridge-agent:管理Linux Bridge
    • l3-agent:提供路由功能
    • dhcp-agent:提供DHCP服务
  • 职责
    • 监听消息队列中的指令
    • 执行本地网络配置命令
    • 向Plugin报告执行状态
Provider 层
  • 角色:底层网络基础设施
  • 类型
    • 虚拟网络设备:Open vSwitch, Linux Bridge
    • 物理网络设备:交换机、路由器
    • SDN控制器:OpenDaylight, ONOS
  • 职责:实际承载网络流量

2.3 支撑组件

消息队列
  • 作用:控制平面与数据平面的通信总线
  • 实现:RabbitMQ, Qpid等
  • 功能:提供RPC和通知机制
数据库
  • 作用:存储网络状态信息
  • 存储内容:网络、子网、端口、路由器等配置

3. 完整工作流程示例

场景:创建VXLAN网络

用户 → API → ML2 Plugin → Type Driver → Mechanism Driver → 消息队列 → OVS Agent → Open vSwitch

详细步骤

  1. 用户请求

    openstack network create --provider-network-type vxlan my_network
    
  2. API处理

    • 验证用户身份和权限
    • 检查参数合法性
    • 调用ML2 Plugin的create_network方法
  3. ML2 Plugin处理

    • 在数据库中创建网络记录
    • 调用vxlan Type Driver分配VNI(如VNI=1000)
    • 调用所有注册的Mechanism Driver
  4. Mechanism Driver执行

    • OVS Mechanism Driver准备网络配置数据
    • 通过RPC经消息队列向所有ovs-agent发送创建网络指令
  5. Agent执行

    • 各计算节点的ovs-agent收到指令
    • 执行本地命令:ovs-vsctl add-br br-vxlan-1000
    • 配置VXLAN隧道端点
  6. Provider生效

    • Open vSwitch创建相应网桥和端口
    • 网络实际可用
  7. 响应返回

    • Agent向Plugin报告成功
    • Plugin更新数据库状态
    • API向用户返回网络信息

4. 架构设计特点

4.1 插件化架构

  • 核心插件:ML2通过Driver机制支持多种网络技术
  • 服务插件:可按需加载L3、FWaaS、LBaaS等服务
  • 厂商插件:支持第三方SDN控制器和硬件设备

4.2 松耦合设计

  • 控制与数据分离:Plugin/Driver在控制节点,Agent在计算节点
  • 技术无关性:上层API不依赖具体网络实现技术
  • 标准化接口:通过消息队列进行标准化通信

4.3 可扩展性

  • 水平扩展:可部署多个Neutron Server实例
  • 技术扩展:通过新Driver支持新网络技术
  • 功能扩展:通过服务插件添加新功能

5. 关键关系总结

Plugin与Driver关系

  • 包含关系:Plugin包含并管理多个Driver
  • 决策与执行:Plugin决定流程,Driver负责具体技术实现
  • 框架与插件:Plugin提供框架,Driver提供具体实现

Driver与Agent关系

  • 调用关系:Mechanism Driver通过消息队列调用Agent
  • 控制与执行:Driver发出指令,Agent本地执行
  • 异步通信:通过消息队列实现异步RPC调用

6. 实际部署考虑

高可用部署

  • Neutron Server:多实例+负载均衡
  • 数据库:主从复制或集群
  • 消息队列:集群部署
  • Agent:天然分布式,但关键Agent(如L3)需高可用方案

性能优化

  • L2 Population:优化ARP广播和L2流量
  • DPDK:提升数据平面性能
  • 分布式虚拟路由:避免L3 Agent单点瓶颈

这种架构使Neutron能够灵活支持从简单Linux Bridge到复杂SDN解决方案的各种网络场景,同时保持良好的可维护性和扩展性。

Logo

更多推荐