OpenStack Neutron 架构详解
OpenStack Neutron采用分层架构实现网络虚拟化。核心分为控制平面(Neutron Server)和数据平面(Agent),通过消息队列通信。控制平面包含API层、Plugin层(业务逻辑)和Driver层(技术实现),数据平面由各类Agent执行网络配置。典型工作流程中,用户请求经API→Plugin→Driver→Agent→底层网络设备逐层处理。架构特点包括插件化设计、松耦合(控
·
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 vSwitchlinuxbridge-agent
:管理Linux Bridgel3-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
详细步骤:
-
用户请求
openstack network create --provider-network-type vxlan my_network
-
API处理
- 验证用户身份和权限
- 检查参数合法性
- 调用ML2 Plugin的create_network方法
-
ML2 Plugin处理
- 在数据库中创建网络记录
- 调用
vxlan
Type Driver分配VNI(如VNI=1000) - 调用所有注册的Mechanism Driver
-
Mechanism Driver执行
- OVS Mechanism Driver准备网络配置数据
- 通过RPC经消息队列向所有ovs-agent发送创建网络指令
-
Agent执行
- 各计算节点的ovs-agent收到指令
- 执行本地命令:
ovs-vsctl add-br br-vxlan-1000
- 配置VXLAN隧道端点
-
Provider生效
- Open vSwitch创建相应网桥和端口
- 网络实际可用
-
响应返回
- 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解决方案的各种网络场景,同时保持良好的可维护性和扩展性。
更多推荐
所有评论(0)