一、 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. [angularjs] AngularJs 知识回顾

    AngularJs 知识回顾 简介 1.通过指令扩展了 HTML,通过表达式绑定数据到 HTML: 2.一个 Js 框架: 3.指令: 通过被称为 指令 的新属性来扩展 HTML, 即为应用添加新功能 ...

  2. TCP/IP,Web世界的基本规则

    TCP/IP协议     TCP/IP 是因特网的通信协议.通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信.浏览器与服务器就是通过这个协议连接在互联网上的,还有电子邮 ...

  3. 6.JAVA-链表实例

    1.实现链表的步骤 1).实现Node节点类(用来保存链表中每个节点的数据,以及下一个节点成员) 2).实现LinkList链表类(用来封装Node节点类,和用户实现交互) 3).在LinkList类 ...

  4. 如何使用Dubbo 2.7.0和Spring boot实现FAT测试(Feature Acceptance Test)

    在一个调用链非常长的功能中,如果想修改其中的一个特性,并进行测试,而又不影响该环境的其他用户使用现有功能.特性,例如: 1. A.B.C.D之间通过Dubbo实现远程调用 2. 这些模块可能有一个或者 ...

  5. Java学习笔记之——LinkedList

    LinkedList 底层结构:链表 1. API: 除了ArrayList中有的方法以外,LinkedList还有几个扩展方法 void addFirst(E e) 在该列表开头插入指定的元素. v ...

  6. https处理的一个过程,对称加密和非对称加密

    一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的过程如下: 发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密 ...

  7. 后端开发者的Vue学习之路(五)

    目录 上节内容回顾 使用第三方组件库 如何发起请求 请求错误处理 请求带参 以get的方式带参: 以post的方式带参: 封装处理 请求的配置 axios实例 实现调用自定义函数来发起请求 抽取axi ...

  8. jquery中点击切换的实现

    项目中经常会遇到一种情况,就是点击切换,比如点击按钮,div样式为1,再点击一下按钮,div样式为2,再点击一下按钮,div样式为1.需要自定义jQuery方法toggle. // toggle方法 ...

  9. How to Apply Patches to a WLS 8.1 Environment

    APPLIES TO: Oracle Weblogic Server - Version 8.1 to 8.1Information in this document applies to any p ...

  10. (简单)华为荣耀4A SCL-TL00的usb调试模式在哪里打开的方法

    就在我们使用PC通过数据线连接上安卓手机的时候,如果手机没有开启Usb调试模式,PC则没办法成功检测到我们的手机,有时候,我们使用的一些功能强大的App好比之前我们使用的一个App引号精灵,老版本就需 ...