OpenStack-Neutron(5)
一、 Neutron 概述
SDN(software-defined networking)软件定义网络,其所具有的灵活性和自动化优势使其成为云时代网络管理的主流。
Neutron的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于SDN实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
1、Neutron 功能
Neutron 为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和VPN等。Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
(1)二层交换 Switching
Nova的Instance是通过虚拟交换机连接到虚拟二层网络的。Neutron支持多种虚拟交换机,包括Linux原生的Linux Bridge和Open vSwitch(OVS)。
利用Linux Bridge和OVS,Neutron除了可以创建传统的VLAN网络,还可以创建基于隧道技术的Overlay网络,比如VxLAN和GRE(Linux Bridge目前只支持 VxLAN)。
Open vSwitch是一个开源的虚拟交换机,它支持标准的管理接口和协议。
(2)三层路由 Routing
Instance可以配置不同网段的IP,Neutron的router(虚拟路由器)实现 instance 跨网段通信。router通过IP forwarding,iptables等技术来实现路由和NAT。
(3)负载均衡 Load Balancing
提供了将负载分发到多个instance的能力。LBaaS支持多种负载均衡产品和方案,不同的实现以Plugin的形式集成到Neutron,目前默认的Plugin是HAProxy。
(4)防火墙 Firewalling
Security Group通过iptables限制进出instance的网络包。
Firewall-as-a-Service(FWaaS),限制进出虚拟路由器的网络包,也是通过iptables 实现。
2、Neutron 管理的网络资源
(1)network
local网络中的instance只能与位于同一节点上同一网络的instance通信,local 网络主要用于单机测试。
flat网络是无vlan tagging的网络。flat网络中的instance能与位于同一网络的 instance通信,并且可以跨多个节点。
VLAN网络是具有802.1q tagging 的网络。vlan是一个二层的广播域,同一 vlan中的instance可以通信,不同vlan只能通过router通信。vlan网络可以跨节点,是应用最广泛的网络类型。
VxLAN基于隧道技术的overlay网络。vxlan网络通过唯一的segmentation(分节)ID(也叫VNI)与其他vxlan网络区分。vxlan中数据包会通过VNI封装成UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制。
GRE与vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
不同 network 之间在二层上是隔离的。
network必须属于某个Project(Tenant租户),Project中可以创建多个network。
network与Project之间是1对多关系。
(2)subnet
subnet 是一个IPv4或者IPv6 地址段。instance的 IP 从subnet中分配。每个subnet 需要定义IP地址的范围和掩码。
subnet与network是1对多关系。一个subnet只能属于某个network;一个network 可以有多个subnet,这些subnet可以是不同的IP 段,但不能重叠。
(3)port
port可以看做虚拟交换机上的一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(Virtual Interface)绑定到port时,port会将MAC和IP分配给VIF。
port与subnet是1对多关系。一个port必须属于某个subnet;一个subnet 可以有多个port。
二、 Neutron 架构
Neutron Server:对外提供OpenStack网络API,接收请求,并调用Plugin处理请求。
Queue:Neutron Server,Plugin和Agent之间通过Messaging Queue进行通信和调用。
Neutron Plugin(s):处理Neutron Server发来的请求,维护OpenStack逻辑网络的状态,并调用Agent处理请求。
Neutron Agent:处理Plugin的请求,负责在network provider上真正实现各种网络功能。
Network Provider:提供网络服务的虚拟或物理网络设备,例如Linux Bridge,Open vSwitch或者其他支持Neutron的物理交换机。
Neutron Database:存放OpenStack的网络状态信息,包括 Network,Subnet,Port,Router等。

图 Neutron架构
支持分布式部署,获得足够的扩展性,架构非常灵活,层次较多,为了支持各种现有或者将来会出现的优秀网络技术。
|
core plugin |
agent |
service plugin |
|
network subnet port |
linux bridge OVS |
routing firewall load balance |
(1)方案A:控制节点 + 计算节点
|
控制节点 |
计算节点 |
|
neutron server core plugin-agent service plugin-agent |
core plugin-agent |

(2)方案B:控制节点 + 网络节点 + 计算节点
|
控制节点 |
网络节点 |
计算节点 |
|
neutron server |
core plugin-agent service plugin-agent |
core plugin-agent |

三、 Neutron 分层架构
Core API:对外提供管理network,subnet和port的RESTful API。
Extension API:对外提供管理router,load balance,firewall等资源的RESTful API。
Common Service:认证和校验API请求。
Neutron Core:Neutron Server的核心处理程序,通过调用相应的Plugin处理请求。
Core Plugin API:定义了Core Plugin的抽象功能集合,Neutron Core通过该API调用相应的 Core Plugin。
Extension Plugin API:定义了Service Plugin的抽象功能集合,Neutron Core通过该API调用相应的Service Plugin。
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。


四、 Neutron ML2
1、Neutron ML2解决core plugin的问题
Core plugin负责管理和维护Neutron的 network,subnet和port的状态信息,这些信息是全局的,只需要也只能由一个core plugin管理。
所有传统的core plugin都需要编写大量重复和类似的数据库访问的代码,大大增加了plugin开发和维护的工作量。

如上图所示,采用ML2 plugin后,可以在不同节点上分别部署linux bridge agent,open vswitch agent,hyper-v agent以及其他agent。
ML2不但支持异构部署方案,同时能够与现有的agent无缝集成:以前用的agent不需要变,只需要将Neutron server上的传统core plugin替换为ML2。
有了ML2,要支持新的network provider就变得简单多了:无需从头开发core plugin,只需要开发相应的mechanism driver,大大减少了要编写和维护的代码。
2、Neutron ML2架构
(1)Type Driver
Neutron支持的每一种网络类型都有一个对应的ML2 type driver。
type driver负责维护网络类型的状态,执行验证,创建网络等。
ML2支持的网络类型包括local,flat,vlan,vxlan和gre。
(2)Mechansim Driver
Neutron支持的每一种网络机制都有一个对应的ML2 mechansim driver。
mechanism driver负责获取由type driver维护的网络状态,并确保在相应的网络设备(物理或虚拟)上正确实现这些状态。
mechanism driver 有三种类型:
Agent-based:包括 linux bridge,open vswitch 等。
Controller-based:包括OpenDaylight,VMWare NSX 等。
基于物理交换机:包括Cisco Nexus,Arista,Mellanox等。

type和mechanisim都太抽象,现在我们举一个具体的例子:
type driver为vlan,mechansim driver为Linux bridge,我们要完成的操作是创建network vlan100,那么:
vlan type driver会确保将vlan100的信息保存到Neutron数据库中,包括network的名称,vlan ID等。linux bridge mechanism driver会确保各节点上的linux brige agent在物理网卡上创建ID为100的vlan设备和brige设备,并将两者进行桥接。
比如前面那个例子如果换成Cisco的mechanism driver,则会在Cisco物理交换机的指定trunk端口上添加vlan100。
linux bridge和open vswitch的ML2 mechanism driver其作用是配置各节点上的虚拟交换机。
linux bridge driver支持的type包括local,flat,vlan,and vxlan。
open vswitch driver除了这4种type还支持gre。
L2 population driver作用是优化和限制overlay网络中的广播流量。
vxlan和gre都属于overlay网络。
ML2 core plugin已经成为OpenStack Neutron的首选plugin,本教程后面会讨论如何在实验环境中配置ML2的各种type和mechansim。
五、Neutron Service Plugin/Agent
Core Plugin/Agent:负责管理核心实体:network,subnet和port。将instance连接到OpenStack layer 2虚拟网络。
Service Plugin/Agent:负责管理更高级的网络服务扩展功能,route,load balance,firewall等。
DHCP:dhcp agent 通过dnsmasq为instance提供dhcp服务。
Routing:L3 agent可以为project(租户)创建router,提供Neutron subnet之间的路由服务。路由功能默认通过IPtables实现。
Firewall:L3 agent可以在router上配置防火墙策略,提供网络安全防护。
Security Group:通过IPtables实现。
Firewall安全策略位于router,保护的是某个project的所有network。
Security Group安全策略位于instance,保护的是单个instance。
Load Balance:Neutron默认通过HAProxy为project中的多个instance提供load balance服务。

六、 Neutron总结

Neutron采用的是分布式架构,包括 Neutorn Server、各种 plugin/agent、database和message queue。
Neutron server接收api请求。
plugin/agent实现请求。
database保存neutron网络状态。
message queue实现组件之间通信。

Neutron通过plugin和agent提供的网络服务。
plugin位于Neutron server,包括core plugin和service plugin。
agent位于各个节点,负责实现网络服务。
core plugin提供L2功能,ML2是推荐的plugin。
使用最广泛的L2 agent是linux bridage和open vswitch。
service plugin和agent提供扩展功能,包括dhcp,routing,load balance,firewall,vpn 等。
OpenStack-Neutron(5)的更多相关文章
- 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇
前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构.本文通过一些典型流程案例来分析具体网络流程过程. 0. 环境 同 学习OpenStack之(7):Neutron 深入学习之 ...
- 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇
0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...
- 我非要捅穿这 Neutron(三)架构分析与代码实现篇(基于 OpenStack Rocky)
目录 文章目录 目录 Neutron 的软件架构分析与实现 Neutron Server 启动流程 获取 WSGI Application Core API & Extension API C ...
- 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境
0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...
- 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)
继研究了Neutron之后,继续Nova的外围研究之旅.本站是研究块存储服务Cinder. 0.验证环境 环境包括: 1.一个controller节点,运行nova-api, nova-schedul ...
- OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备)
OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备) 一.操作前需了解: 1. OpenStack提供IaaS(基础设施即服务)服务,它是开源的云计 ...
- 我非要捅穿这 Neutron(二)上层资源模型篇
目录 文章目录 目录 Neutron 的资源模型 Network 运营商网络和租户网络 创建运营商网络 创建租户网络 创建外部网络 Network 小结 Subnet IP 核心网络服务 Subnet ...
- 我非要捅穿这 Neutron(四)Open vSwitch in Neutron
目录 文章目录 目录 前文列表 OvS In Neutron 网络拓扑 OvS In Neutron 网络实现模型 双节点混合平面网络 双节点网络拓扑 OvS Bridges 与初始流表项 OvS b ...
- 我非要捅穿这 Neutron(一)网络实现模型篇
目录 文章目录 目录 前言 传统网络到虚拟化网络的演进 单一平面网络到混合平面网络的演进 Neutron 简述 Neutron 的网络实现模型 计算节点网络实现模型 内外 VID 转换 网络节点网络实 ...
- 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]
理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...
随机推荐
- Python批量修改寄存器的值
在写代码过程中,我们修改代码中寄存器的值,但是有时寄存器的数据较多,手动修改容易出现错误而且花费的时间长 这是一段寄存器的配置值: 0x00, 0x34 0x35, 0x25 0x10, 0xd4 ...
- Java基础:Object类中的equals与hashCode方法
前言 这个系列的文章主要用来记录我在学习和复习Java基础知识的过程中遇到的一些有趣好玩的知识点,希望大家也喜欢. 一切皆对象 对于软件工程来说面向对象编程有一套完整的解决方案:OOA.OOD.O ...
- jsp基础语言-jsp代码段
jsp代码段:是放在<% %>标记之间符合java语言规范的代码片段 格式:<% 代码段 %> 代码段中可以包含用于jsp变量和方法的声明.显示表达式.HTML以及调用Jav ...
- 博弈论进阶之Multi-SG
Multi-Nim 从最简单的Nim模型开始 它的定义是这样的 有\(n\)堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿)或把一堆数量不少于\(2\)石子分为两堆不为空的石子,没法拿的人 ...
- AspNetCore.FileLog 一款很不错的日志记录工具
AspNetCore.FileLog 该项目作者为伟哥,GitHub地址:https://github.com/amh1979:该项目维护者为鸟窝,GitHub地址:https://github.co ...
- SQL Server GUID 数据迁移至MongoDB后怎样查看?
关键字:SQL Server NEWID():BSON:MongoDB UUID 1.遇到的问题和困惑 SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此 ...
- Apollo的Oracle适配改动
这几天工作需要使用Apollo配置中心.Apollo唯一的依赖是MySQL数据库,然而公司只有Oracle数据库资源.这里有一个Oracle适配改动的分支,但是它是基于0.8.0版本的Apollo.看 ...
- Docker 启动,进入容器,查看log命令
1.启动一个容器 docker run -d -P training/webapp python app.py -d:让容器在后台运行. -P:将容器内部使用的网络端口映射到我们使用的主机上. 如果需 ...
- 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败。对于已启用更改跟踪的表,不可能切换其分区。请先禁用更改跟踪,再使用 ALTER TABLE SWITCH。
问题描述: 今天处理切换分区数据的时候出现了这个错误: 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败.对于已启用更改跟 ...
- PowerDesigner表设计中的P F M分别代表什么意思?
版本 如下图中的P.F.M代表什么意思呢? P即primary,主键的意思 F即foreign key,外键的意思 M即mandatory,强制不可为空的意思