一、 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)的更多相关文章

  1. 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇

    前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构.本文通过一些典型流程案例来分析具体网络流程过程. 0. 环境 同 学习OpenStack之(7):Neutron 深入学习之 ...

  2. 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇

    0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...

  3. 我非要捅穿这 Neutron(三)架构分析与代码实现篇(基于 OpenStack Rocky)

    目录 文章目录 目录 Neutron 的软件架构分析与实现 Neutron Server 启动流程 获取 WSGI Application Core API & Extension API C ...

  4. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...

  5. 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)

    继研究了Neutron之后,继续Nova的外围研究之旅.本站是研究块存储服务Cinder. 0.验证环境 环境包括: 1.一个controller节点,运行nova-api, nova-schedul ...

  6. OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备)

    OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备) 一.操作前需了解:     1. OpenStack提供IaaS(基础设施即服务)服务,它是开源的云计 ...

  7. 我非要捅穿这 Neutron(二)上层资源模型篇

    目录 文章目录 目录 Neutron 的资源模型 Network 运营商网络和租户网络 创建运营商网络 创建租户网络 创建外部网络 Network 小结 Subnet IP 核心网络服务 Subnet ...

  8. 我非要捅穿这 Neutron(四)Open vSwitch in Neutron

    目录 文章目录 目录 前文列表 OvS In Neutron 网络拓扑 OvS In Neutron 网络实现模型 双节点混合平面网络 双节点网络拓扑 OvS Bridges 与初始流表项 OvS b ...

  9. 我非要捅穿这 Neutron(一)网络实现模型篇

    目录 文章目录 目录 前言 传统网络到虚拟化网络的演进 单一平面网络到混合平面网络的演进 Neutron 简述 Neutron 的网络实现模型 计算节点网络实现模型 内外 VID 转换 网络节点网络实 ...

  10. 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]

    理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...

随机推荐

  1. Promise杂记

    更好的阅度体验 前言 API Promise特点 状态跟随 V8中的async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise一年多了,一直以来 ...

  2. VS2017移动开发(C#、VB.NET)——Numeric控件的使用方式

    Visual Studio 2017移动开发 控件介绍和使用方式:Numeric控件 Smobiler开发平台,.NET移动开发 一.          样式一 我们要实现上图中的效果,需要如下的操作 ...

  3. 为什么我的gridview.DataKeys.count总是为零?并提示索引超出范围

    第一个原因 你没有设置DataKeyNames属性, 第二个原因 你的DataSource是NUll值 第二个原因 DataKeyNames字段区分大小写

  4. Java开发笔记(六十二)如何定义函数式接口

    前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法, ...

  5. 获取 wx.getUserInfo 接口后续将不再出现授权弹窗,请注意升级(微信小程序开发)

    微信小程序开发时,Console 提示:获取 wx.getUserInfo 接口后续将不再出现授权弹窗,请注意升级 错误原因: 直接调用这个方法依旧可以获取用户信息, 但是如果你之前没有点击过那个授权 ...

  6. Web前端 HTML知识总结

    HTML篇 一.HTML的概念 HTML:就是Hyper Text Markup Languaged的缩写,意思就是超文本标志语言 (超文本:功能比普通文本要强:标志语言:使用一组标签对内容进行描述的 ...

  7. css中“~”和“>”

    css中“~” element1~element2 选择器匹配  出现在   element1 后面的    element2  .element1 和 element2 这两种元素必须具有相同的父元 ...

  8. zabbix server3.4 使用mailx配置邮件报警

    软件具体配置如下: 操作系统:Centos7.5 zabbix server版本:zabbix server3.4 zabbix agent版本:zabbix agent3.0 现在开始配置zabbi ...

  9. Easyui 实现点击不同树节点打开不同tab页展示不同datagrid表数据设计

    实现点击不同树节点打开不同tab页展示不同datagrid表数据设计 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 需求描述 如上图, 1.点击左侧树,叶子 ...

  10. [Python][Scrapy 框架] Python3 Scrapy的安装

    1.方法(只介绍 pip 方式安装) PS.不清楚 pip(easy_install) 可以百度或留言. cmd命令: (直接可以 pip,而不用跳转到 pip.exe目录下,是因为把所在目录加入 P ...