OpenStack Neutron:Neutron概述;Neutron架构(core plugin、service plugin、agent等);
Neutron概述;Neutron功能;Neutron网络基本概念(network、subnet、port) ============================================================================================= Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。 -------------------------------------------------------------------------------------------- Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等。 二层交换 Switching: Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的 Overlay 网络,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。 三层路由 Routing: Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。 负载均衡 Load Balancing: Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到多个 instance 的能力。 LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,目前默认的 Plugin 是 HAProxy。 防火墙 Firewalling: Neutron 通过下面两种方式来保障 instance 和网络的安全性: Security Group:通过 iptables 限制进出 instance 的网络包。 Firewall-as-a-Service:FWaaS,限制进出虚拟路由器的网络包,也是通过 iptables 实现。 ============================================================================================= Neutron 管理的网络资源包括 Network,subnet 和 port Neutron 的 router 是通过 Linux network namespace 实现的。 ###openstack的vroute是由network namespace实现的? --------------------------------------------------------------------------------------------- network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。 local(单host内部的网络?) local 网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的 instance 通信,local 网络主要用于单机测试。 flat(跨host,但处于物理网络的网络?) flat 网络是无 vlan tagging 的网络。flat 网络中的 instance 能与位于同一网络的 instance 通信,并且可以跨多个节点。 vlan(跨host,使用vlan进行隔离的网络?) vlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。vlan 网络可跨节点,是应用最广泛的网络类型。 vxlan(跨host,使用vxlan进行隔离的网络?) vxlan 是基于隧道技术的 overlay 网络。vxlan 网络通过唯一的 segmentation ID(也叫 VNI)与其他 vxlan 网络区分。vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 vlan 和物理网络基础设施的限制。 gre gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装。 network必须属于某个project;Project 与 network 之间是 1对多关系。 --------------------------------------------------------------------------------------------- subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。 network 与 subnet 是 1对多 关系。一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠。 --------------------------------------------------------------------------------------------- port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。 subnet 与 port 是 1对多 关系。一个 port 必须属于某个 subnet;一个 subnet 可以有多个 port。 --------------------------------------------------------------------------------------------- Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance
Neutron 架构
Neutron 架构:Neutron组件简介 ======================================================================================================= 图1架构图展示了与其他服务相似的设计思路 图2架构图似乎描述的更准确一些,因为教程在详细介绍Neutron 组件时,plugin在Neutorn Server中介绍的,plugin是Neutorn Server的一部分 ---------------------------------------------------------------- 图1架构图 Neutron Server 对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。 Plugin 处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。 Agent 处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。 network provider 提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。 Queue Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。 Database 存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。 ---------------------------------------------------------------- 图2架构图 Neutron 采用的是分布式架构,包括 Neutorn Server、各种 plugin/agent、database 和 message queue。 1.Neutron server 接收 api 请求。 2.plugin/agent 实现请求。 3.database 保存 neutron 网络状态。 4.message queue 实现组件之间通信。
Neutron架构图展开效果
Neutron 架构展开 1.Neutron 通过 plugin 和 agent 提供的网络服务。 2.plugin 位于 Neutron server,包括 core plugin 和 service plugin。 3.agent 位于各个节点,负责实现网络服务。 4.core plugin 提供 L2 功能,ML2 是推荐的 plugin。 5.使用最广泛的 L2 agent 是 linux bridage 和 open vswitch。 6.service plugin 和 agent 提供扩展功能,包括 dhcp, routing, load balance, firewall, vpn 等。
Neutron 架构复杂的好处;Neutron 流程示例:创建一个 VLAN100 的 network ------------------------------------------------------ Neutron 架构非常灵活,层次较多,目的是: 1.为了支持各种现有或者将来会出现的优秀网络技术。 2.支持分布式部署,获得足够的扩展性。 ------------------------------------------------------ 以创建一个 VLAN100 的 network 为例,假设 network provider 是 linux bridge, 流程如下: 1.Neutron Server 接收到创建 network 的请求,通过 Message Queue(RabbitMQ)通知已注册的 Linux Bridge Plugin。 2.Plugin 将要创建的 network 的信息(例如名称、VLAN ID等)保存到数据库中,并通过 Message Queue 通知运行在各节点上的 Agent。 3.Agent 收到消息后会在节点上的物理网卡(比如 eth2)上创建 VLAN 设备(比如 eth2.100),并创建 bridge (比如 brqXXX) 桥接 VLAN 设备。
Neutron Server
Neutron Server = API + Plugins (图1) ;Neutron Server 分层模型(图2) =================================================================================================== Neutron Server = API + Plugins (图1) Neutron Server 包括两部分: 1. 提供 API 服务。 2. 运行 Plugin。 ------------------------------------------------------------------------- Neutron Server 分层模型(图2) Core API 对外提供管理 network, subnet 和 port 的 RESTful API。 Extension API 对外提供管理 router, load balance, firewall 等资源 的 RESTful API。 Commnon Service 认证和校验 API 请求。 Neutron Core Neutron server 的核心处理程序,通过调用相应的 Plugin 处理请求。 Core Plugin API 定义了 Core Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Core Plgin。 Extension Plugin API 定义了 Service Plgin 的抽象功能集合,Neutron Core 通过该 API 调用相应的 Service Plgin。 Core Plugin 实现了 Core Plugin API,在数据库中维护 network, subnet 和 port 的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 network。 Service Plugin 实现了 Extension Plugin API,在数据库中维护 router, load balance, security group 等资源的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 router。
plugin、agent、network provider
plugin与agent的功能分工;plugin、agent 和 network provider协作的3个痛点(引出ML2);plugin分类(core plugin 和 service plugin) ================================================================================================ plugin与agent的功能分工 plugin 解决的是网络要配置成什么样子; agent 则负责配置落地。 一个简单的场景:在 Neutorn 中使用 linux bridge 这一种 network provider。 我们需要实现两个东西:linux bridge core plugin 和 linux bridge agent。 linux bridge core plugin 1.与 neutron server 一起运行。 2.实现了 core plugin API。 3.负责维护数据库信息。 4.通知 linux bridge agent 实现具体的网络功能。 linux bridge agent 1.在计算节点和网络节点(或控制节点)上运行。 2.接收来自 plugin 的请求。 3.通过配置本节点上的 linux bridge 实现 neutron 网络功能。 同样的道理,如果要支持 open vswitch,只需要实现 open vswitch plugin 和 open vswitch agent。 ----------------------------------------------------------------------------------------------- plugin、agent 和 network provider协作的3个痛点: 痛点1:plugin、agent 和 network provider 是配套使用的:(痛点1:由ML2解决) 比如 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent; 如果 network provider 换成了 OVS 或者物理交换机,plugin 和 agent 也得替换。 痛点2:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码(plugin 在数据库中维护 Neutron 网络的状态信息) 解决:Neutron 在 Havana 版本实现了一个 ML2(Modular Layer 2)plugin,对 plugin 的功能进行抽象和封装。 各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了 痛点3:只能在 OpenStack 中使用一种 core plugin,多种 network provider 无法共存。(由ML2解决) Core plugin 负责管理和维护 Neutron 的 network, subnet 和 port 的状态信息,这些信息是全局的,只需要也只能由一个 core plugin 管理。 只使用一个 core plugin 本身没有问题。但问题在于传统的 core plugin 与 core plugin agent 是一一对应的。 ----------------------------------------------------------------------------------------------- plugin 按照功能分为两类: core plugin 和 service plugin。 core plugin 维护 Neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服务,也有相应的 agent。
Core Plugin/Agent 负责管理核心实体:net, subnet 和 port。
Service Plugin/Agent 负责更高级的网络服务,包括路由,load balance,firewall等
ML2 Core Plugin;ML2 type driver、ML2 mechansim driver; ======================================================================================================== Moduler Layer 2(ML2)是 Neutron 在 Havana 版本实现的一个新的 core plugin,用于替代原有的 linux bridge plugin 和 open vswitch plugin。 ML2 作为新一代的 core plugin,提供了一个框架,允许在 OpenStack 网络中同时使用多种 Layer 2 网络技术,不同的节点可以使用不同的网络实现机制。 -------------------------------------------------------------------------------------- ML2 对二层网络进行抽象和建模,引入了 type driver 和 mechansim driver。 这两类 driver 解耦了 Neutron 所支持的网络类型(type)与访问这些网络类型的机制(mechanism),其结果就是使得 ML2 具有非常好的弹性,易于扩展,能够灵活支持多种 type 和 mechanism。 Neutron 支持的每一种网络类型都有一个对应的 ML2 type driver。 type driver 负责维护网络类型的状态,执行验证,创建网络等。 ML2 支持的网络类型包括 local, flat, vlan, vxlan 和 gre。 Neutron 支持的每一种网络机制都有一个对应的 ML2 mechansim driver。 mechanism driver 负责获取由 type driver 维护的网络状态,并确保在相应的网络设备(物理或虚拟)上正确实现这些状态。 type 和 mechanisim 都太抽象,现在我们举一个具体的例子: type driver 为 vlan,mechansim driver 为 linux bridge,我们要完成的操作是创建 network vlan100,那么: 1.vlan type driver 会确保将 vlan100 的信息保存到 Neutron 数据库中,包括 network 的名称,vlan ID 等。 2.linux bridge mechanism driver 会确保各节点上的 linux brige agent 在物理网卡上创建 ID 为 100 的 vlan 设备 和 brige 设备,并将两者进行桥接。 mechanism driver 有三种类型: Agent-based:包括 linux bridge, open vswitch 等。 Controller-based:包括 OpenDaylight, VMWare NSX 等。 基于物理交换机:包括 Cisco Nexus, Arista, Mellanox 等。
Service Plugin / Agent实现的功能:DHCP、Routing、Firewall、Load Balance ================================================================================= DHCP dhcp agent 通过 dnsmasq 为 instance 提供 dhcp 服务。 Routing l3 agent 可以为 project(租户)创建 router,提供 Neutron subnet 之间的路由服务。路由功能默认通过 IPtables 实现。 Firewall l3 agent 可以在 router 上配置防火墙策略,提供网络安全防护。另一个与安全相关的功能是 Security Group,也是通过 IPtables 实现。 Firewall 与 Security Group 的区别在于: 1.Firewall 安全策略位于 router,保护的是某个 project 的所有 network。 2.Security Group 安全策略位于 instance,保护的是单个 instance。 Load Balance Neutron 默认通过 HAProxy 为 project 中的多个 instance 提供 load balance 服务。
Neutron 的2种物理部署方案 方案1:控制节点 + 计算节点 控制节点 部署的服务包括:neutron server, core plugin 的 agent 和 service plugin 的 agent。 计算节点 部署 core plugin 的agent,负责提供二层网络功能。 这里有几点需要说明: 1. ***core plugin 和 service plugin 已经集成到 neutron server,不需要运行独立的 plugin 服务。 2. 控制节点和计算节点都需要部署 core plugin 的 agent,因为通过该 agent 控制节点与计算节点才能建立二层连接。 3. 可以部署多个控制节点和计算节点。 -------------------------------------------------------------------- 方案2:控制节点 + 网络节点 + 计算节点 控制节点 部署 neutron server 服务。 网络节点 部署的服务包括:core plugin 的 agent 和 service plugin 的 agent。 计算节点 部署 core plugin 的agent,负责提供二层网络功能。 这个方案的要点是将所有的 agent 从控制节点分离出来,部署到独立的网络节点上。 该方案特别适合规模较大的 OpenStack 环境。 1.控制节点只负责通过 neutron server 响应 API 请求。 2.由独立的网络节点实现数据的交换,路由以及 load balance等高级网络服务。 3.可以通过增加网络节点承担更大的负载。 4.可以部署多个控制节点、网络节点和计算节点。
065 - Neutron 功能概述
066 - Neutron 网络基本概念
067 - Neutron 架构
068 - Neutron 物理部署方案
069 - 理解 Neutron Server 分层模型
070 - Neutron 如何支持多种 network provider
071 - 详解 ML2 Core Plugin(I)
072 - 详解 ML2 Core Plugin(II)
073 - Service Plugin / Agent
074 - 两张图总结 Neutron 架构