一、 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. 网页数据抓取工具,webscraper 最简单的数据抓取教程,人人都用得上

    Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据.例如知乎回答列表.微博热门.微博评论.淘宝.天猫.亚马逊等电商 ...

  2. vscode 输出乱码

    文件-首选项-设置,添加如下配置: "code-runner.runInTerminal": true,

  3. windows下Jmeter压力测试工具的安装

    JMeter是Apache软件基金会的产品,用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java 对象,数据库和查询,FTP服务器等等)的性能进行测试.是一款很方便的测试软件. 系统 ...

  4. php设计模式--简单介绍

    鉴于最近有几个小伙伴总问一些设计模式相关的东西,本人借鉴了一些东西,准备将常见的几种php的设计模式总结整理出来. 平时我们用到的设计模式很多,建议大家多多读一些php开源框架,当深入的阅读了一些ph ...

  5. vue的项目结构记录

    vue的项目结构 不知道大家有没这样的情况,面对刚配置好的脚手架,创建的文件不知道该放哪个文件下,导致后面开发一些文件不好找,不利于维护. 接下来我说说我项目中的一些文件: 首先是components ...

  6. Dynamics 365 Online-Security Updates On TLS 1.2

    不仅仅是Dynamics 365,现在MS许多产品都开始主推使用TLS1.2,所以在日常开发中,需要注意这部分的改动. 如果访问某个服务,出现错误信息类似于“Could not create SSL/ ...

  7. Mapbox浅析(快速入门Mapbox)

    1.是什么? Mapbox是一个可以免费创建并定制个性化地图的网站. 2.了解一些基本东西 常见的 mapbox.js和mapbox-gl.js的异同点? 相同点: 1.都是由Mapbox公司推出的免 ...

  8. JMeter 内置日期(时间)函数总结

    JMeter 内置日期(时间)函数总结   by:授客 QQ:1033553122 1. 测试环境 apache-jmeter-3.3 下载地址: http://jmeter.apache.org/c ...

  9. 关于JPasswordField的getText()方法过时问题解决

    这几天想做一个登陆界面,用Jframe做,连接数据库时发现JPasswordField的getText()过时了,没法使用.查了资料发现改成了: try{ String sql="SELEC ...

  10. ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门

    一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...