oldbeef
Published on 2025-05-14 / 11 Visits
0
0

Neutron基本架构与数据流走向

Neutron 是 OpenStack 的网络服务组件,提供了丰富的网络功能,以支持虚拟机(VM)之间的通信、虚拟机与外部网络的连接,以及各种高级网络服务。

Neutron架构

Neutron架构分为四层

1. API Layer(应用编程接口层)

  • 功能

    • 提供对外的 RESTful API 接口,允许用户和 OpenStack 其他组件(如 Nova、Horizon 等)通过 HTTP 请求与 Neutron 进行交互。

    • 接收和解析用户的网络操作请求(如创建网络、子网、端口等),并将请求转发到下一层。

    • 提供身份验证和授权功能,确保只有合法用户可以访问网络资源。

  • 组件

    • Neutron Server:是 Neutron 的核心服务,运行在控制节点上。它负责处理 API 请求,并与插件层进行交互。

2. Plugin Layer(插件层)

  • 功能

    • 作为 Neutron Server 和 Agent 之间的中间层,负责处理网络资源的逻辑操作。

    • 插件层实现了 Neutron 的核心网络功能,如网络、子网、端口的创建、更新和删除。

    • 插件层分为核心插件扩展插件

      • 核心插件:负责管理基本的网络资源,如网络、子网、端口等。

      • 扩展插件:提供额外的网络服务,如路由器、负载均衡、防火墙等。

  • 组件

    • Core Plugin:如 ML2(Modular Layer 2)插件,支持多种网络后端技术。

    • Service Plugins:如 L3 插件(路由器服务)、LBaaS 插件(负载均衡服务)、FWaaS 插件(防火墙服务)等。

3. Agent Layer(代理层)

  • 功能

    • 负责在底层网络设备上实现具体的网络功能。

    • Agent 通过与插件层通信,接收来自插件层的指令,并在物理或虚拟网络设备上执行操作。

    • 不同类型的 Agent 负责不同的网络任务,如 DHCP 分配、路由转发、虚拟交换机配置等。

  • 组件

    • DHCP Agent:负责为虚拟机分配 IP 地址。

    • L3 Agent:负责实现虚拟路由器功能,如 SNAT、DNAT 和路由转发。

    • Metadata Agent:负责为虚拟机提供元数据服务,如配置信息。

    • Open vSwitch Agent:用于管理 Open vSwitch 虚拟交换机。

    • Linux Bridge Agent:用于管理 Linux Bridge 虚拟交换机。

    • L2 Agent:负责管理二层网络功能,如 VLAN 配置。

4. Driver Layer(驱动层)

  • 功能

    • 驱动层是 Neutron 架构的最底层,直接与物理网络设备或虚拟网络技术交互。

    • 它通过各种驱动程序(Driver)实现对不同网络设备的支持,如物理交换机、虚拟交换机(如 Open vSwitch、Linux Bridge)等。

    • 驱动层提供了对网络设备的抽象,使得 Neutron 能够灵活地支持多种网络后端技术。

  • 组件

    • Mechanism Drivers:用于实现 L2 网络功能,如 VLAN、VXLAN、GRE 等。

    • Service Drivers:用于实现扩展服务功能,如路由器服务、负载均衡服务等。

Neutron 四层架构的工作流程

  1. 用户请求:用户通过 RESTful API 向 Neutron Server 发送网络操作请求(如创建网络)。

  2. API 层处理:Neutron Server 接收请求,进行身份验证和授权,然后将请求转发到插件层。

  3. 插件层处理:插件层根据请求内容,调用相应的核心插件或扩展插件,处理网络资源的逻辑操作,并将结果保存到数据库中。

  4. Agent 层执行:插件层通过消息队列(如 RabbitMQ)通知 Agent 层,Agent 根据收到的指令在底层网络设备上执行具体操作。

  5. 驱动层实现:Agent 通过驱动层与物理或虚拟网络设备交互,完成网络配置。

优势

  • 模块化设计:通过分层架构,Neutron 实现了功能的模块化,便于扩展和维护。

  • 灵活性:支持多种网络后端技术,用户可以根据需求选择合适的网络解决方案。

  • 可扩展性:通过插件和驱动程序,可以轻松添加新的网络功能和服务。

Neutron 的四层架构设计使得 OpenStack 网络服务能够灵活地适应不同的网络环境和需求,是 OpenStack 网络服务的核心基础。

数据流走向

以用户创建虚拟网络并启动虚拟机为例,数据流如下:

用户发起请求

用户通过REST API(如OpenStack CLI/Dashboard)发送创建网络的请求(例如openstack network create)。

请求由Neutron-server接收,经过Keystone鉴权后,将网络配置写入Neutron数据库。

插件与消息队列协调

Neutron-server通过Plugin解析请求,生成具体的网络配置指令。

指令通过RPC(消息队列) 异步发送到相关Agent(如L2 Agent、DHCP Agent)。

Agent执行配置

L2 Agent(计算节点):根据指令创建虚拟交换机(OVS)、配置VLAN/VXLAN隧道,绑定虚拟机端口。

DHCP Agent(网络节点):为子网启动DHCP服务,分配IP地址池。

L3 Agent(网络节点)(若需路由):创建虚拟路由器,配置NAT或浮动IP。

虚拟机启动与网络连接

虚拟机启动时,通过DHCP Agent获取IP地址。

数据包经计算节点的OVS转发,通过L3 Agent实现跨子网通信或外部网络访问。

状态同步与反馈

Agent通过RPC将执行结果返回Neutron-server,更新数据库状态。

用户通过REST API查询网络状态,完成闭环。

架构特点总结

分层解耦

控制平面(Neutron-server、Plugin、数据库)与数据平面(Agent)分离,提升扩展性。

通过消息队列实现异步通信,避免阻塞。

分布式部署

Agent按功能分散部署:计算节点处理本地网络,网络节点集中管理DHCP/L3服务。

插件化设计

支持多种网络技术(如OVS、Linux Bridge、SDN控制器),通过Plugin适配不同后端。

高可用性

消息队列和数据库可集群化,关键服务(如DHCP/L3 Agent)支持多实例部署。

极简数据流

用户 → REST API → Neutron-server → Plugin → Database

RPC(消息队列)

L2 Agent(计算节点) → 配置OVS/VLAN

DHCP Agent(网络节点) → 启动DHCP服务

L3 Agent(网络节点) → 配置路由/NAT


Comment