Neutron网络核心机制详解

张开发
2026/5/4 3:21:06 15 分钟阅读
Neutron网络核心机制详解
Neutron 深入浅出解析Neutron 是 OpenStack 云平台中负责网络即服务NaaS的核心组件。它取代了早期 Nova-Network 的简单网络模型为租户提供了丰富的、可编程的虚拟网络功能实现了对网络拓扑的灵活定义和管理 。一、 核心概念理解 Neutron 前需掌握其定义的几个核心资源对象概念描述类比Network一个隔离的、虚拟的二层广播域。它是子网和端口的容器。一个独立的虚拟交换机或 VLAN。Subnet一个 IPv4 或 IPv6 地址块。它定义了网络地址空间、网关和 DNS 等配置必须关联到一个 Network。一个 IP 网段如 192.168.1.0/24。Port虚拟网络交换机上的一个虚拟端口。它代表一个虚拟网络接口卡vNIC可以被连接到虚拟机或其它网络设备如路由器并拥有一个或多个 IP 地址。交换机上的一个网口插着虚拟机的网线。Router一个虚拟的三层路由器用于在不同子网或网络之间转发流量并提供外部网络如公网的接入能力。一台虚拟路由器。二、 架构与组件Neutron 采用插件化、松耦合的架构分为控制平面和数据平面具有良好的可扩展性 。1. 控制平面负责接收、验证 API 请求并将网络配置信息持久化到数据库中。核心是neutron-server进程。API 层 提供 RESTful API接收用户对网络、子网、端口、路由器等资源的创建、查询、更新、删除CRUD请求。插件层 (Plugin) 是 Neutron 的核心扩展点。它处理 API 请求的业务逻辑并将抽象的网络配置转换为具体后端技术能理解的模型。最常用的是ML2 (Modular Layer 2) 插件它通过驱动Driver机制支持多种网络技术如 VLAN, VXLAN, GRE和多种虚拟交换机如 Linux Bridge, Open vSwitch。数据库 存储所有 Neutron 管理的网络资源状态和配置信息。2. 数据平面负责在计算节点和网络节点上执行具体的网络配置实现数据包的转发、隔离、路由等功能。由运行在各节点上的Agent代理实现。L2 Agent (二层代理) 在每个计算节点和网络节点上运行负责根据控制平面的指令配置本地的虚拟交换机如openvswitch-agent或linuxbridge-agent创建网桥、端口、VLAN/VXLAN 隧道等 。L3 Agent (三层代理) 通常运行在专用的网络节点上。它负责创建和管理虚拟路由器Router在 Linux Network Namespace 中运行实现子网间路由、浮动 IPFloating IP和 SNAT/DNAT 功能 。DHCP Agent (DHCP 代理) 为虚拟网络提供 DHCP 服务。它会为每个需要 DHCP 服务的网络创建一个独立的 Network Namespace并在其中运行dnsmasq进程为虚拟机自动分配 IP 地址 。元数据代理 (Metadata Agent) 为虚拟机提供访问 OpenStack 元数据服务如获取 SSH 公钥、用户数据等的通道。控制平面与数据平面之间通过消息队列 (如 RabbitMQ)进行异步通信。neutron-server将需要执行的任务如创建端口放入队列相应的 Agent 从队列中取出任务并执行然后将执行结果反馈回去 。三、 工作流程示例创建一个 VXLAN 网络并启动虚拟机以下流程结合了架构中各组件的协作 用户发起请求 租户通过 Horizon 面板或 CLI 命令请求创建一个 VXLAN 类型的网络net1和一个子网subnet1。控制平面处理neutron-server的 API 层接收请求。ML2 插件校验请求并将网络配置类型为 VXLAN分配一个 VNI写入数据库。ML2 插件通过消息队列向所有相关的计算节点和网络节点的openvswitch-agent发送“创建网络net1”的 RPC 消息。数据平面执行各节点的openvswitch-agent收到消息后在本地的 OVS 中创建一个新的网桥如br-int上关联一个新的 VXLAN 端口并建立到其他节点的 VXLAN 隧道。如果子网开启了 DHCPNeutron 会调度一个dhcp-agent。该 Agent 会创建一个名为dhcp-network-id的 Network Namespace在其中启动dnsmasq服务并配置好 IP 地址和路由 。启动虚拟机用户通过 Nova 启动一个虚拟机并指定其连接到net1。Nova 向 Neutron 请求为虚拟机分配一个端口。Neutron 在数据库中创建端口记录分配 MAC 和 IP 地址并通过消息队列通知计算节点上的openvswitch-agent。该 Agent 在 OVS 网桥上创建虚拟端口tap设备并将其与虚拟机的虚拟网卡连接。虚拟机启动后通过 DHCP由dhcp-agent提供或静态配置获得 IP 地址即可在net1内通信。四、 网络类型与模型Neutron 支持多种网络类型以满足不同场景 网络类型描述适用场景Local仅限于单个计算节点内部的网络无法跨节点通信。测试或特殊隔离需求。Flat无标签的物理网络直接映射到物理网卡。虚拟机获得的是物理网络的真实 IP。需要虚拟机获得与物理机同网段 IP 的场景。VLAN基于 IEEE 802.1Q 标准的网络通过 VLAN ID 进行隔离。传统数据中心需要与现有物理 VLAN 网络集成。VXLAN/GRE基于隧道技术的 overlay 网络。通过封装二层帧在三层 IP 网络上传输可突破 VLAN 4096 的数量限制。大型云数据中心需要大规模、多租户网络隔离。Neutron 的网络实现模型主要分为两种提供商网络 (Provider Network) 由管理员创建直接映射到底层物理网络基础设施如特定的物理网卡或 VLAN。租户通常只能使用不能创建。租户网络 (Tenant Network) 由租户自己创建和管理的虚拟网络。Neutron 负责其全生命周期管理租户无需关心底层物理拓扑。上述的 VXLAN 网络就是典型的租户网络。五、 基本操作示例以下通过 OpenStack CLI 演示 Neutron现多使用openstack network命令的基本使用# 1. 创建一个租户网络 (VXLAN类型) openstack network create --share --provider-network-type vxlan tenant_net # 2. 在网络上创建一个子网 openstack subnet create --network tenant_net \ --subnet-range 10.1.0.0/24 \ --gateway 10.1.0.1 \ --dns-nameserver 8.8.8.8 \ tenant_subnet # 3. 创建一个路由器 openstack router create my_router # 4. 将路由器的内部接口连接到子网 openstack router add subnet my_router tenant_subnet # 5. 设置路由器的外部网关连接到名为public的提供商网络 openstack router set --external-gateway public my_router # 6. 启动一个虚拟机并连接到该网络 openstack server create --flavor m1.small \ --image cirros \ --nic net-id$(openstack network show tenant_net -f value -c id) \ vm1总结Neutron 通过其清晰的分层架构控制平面与数据平面分离、插件化设计ML2和代理模型将复杂的网络功能抽象为简单的 API使得云管理员和租户能够像管理计算和存储资源一样灵活、动态地定义和管理云中的虚拟网络是构建复杂、多租户云环境网络的基石 。参考来源openstack——Neutron基本架构详解OpenStack Neutron 架构详解Neutron 项目使用教程OpenStack核心组件-neutronNeutron原理详解Neutron dhcp实现

更多文章