OpenDaylight融合OpenStack架构分析

OpenStack和OpenDaylight(ODL)的融合是一个热门话题,有大量的文档可供参考,但是这些文章主要对其使用方面进行阐述,而没有讲如何实现OpenStack和ODL的融合。本文将详细说明如何实现不同组件的融合。

ODL和OpenStack完整的安装步骤如下:

1、在虚拟机或者物理机上构建和安装合适的ODL版本(取决于你的选择)。确保你有合适的bundle实现Neutron的API(OVSDB、VTN Manager、LISP等)。

2、正确配置并启动ODL。

3、部署OpenStack。最好是多节点部署:一个控制节点,一个网络节点和若干个计算节点。

4、配置OpenStack,为ODL和OpenStack的融合作准备:

  • 确保核心插件在模块化的二层组件(ML2)上。
  • 将ODL作为“机制驱动”部署在ML2上。
  • 配置ml2_conf.ini文件的[ml2_odl]区域:

123

1、username = admin2、password = admin3、url = http://IP-Address-Of-OpenDayLight:8080/controller/nb/v2/neutron

5、在OpenStack上创建虚拟机,构建虚拟网络。

6、验证ODL界面生成的网络拓扑是否与想要的一致。

OpenStack和OpenDaylight融合

图1总结了OpenStack和ODL融合的全过程。Neutron包含ML2机制驱动,该机制驱动(ODL)作为REST代理能够调用所有的Neutron API。ODL包含北向REST服务(Neutron API服务),能够调用这些代理API缓存数据并可用于ODL的其他服务。下图详细地描述了这两个组件,这些RESTful API可以完成OpenStack和ODL的绑定。

图1:OpenStack和OpenDaylight融合

OpenStack

Neutron的模块化的二层组件(ML2)是一个可以使用二层网络多样性技术的框架。带有ML2插件的驱动程序实现了网络类型(local、flat、VLAN, GRE和VXLAN)的扩展和访问这些网络的机制驱动。

在ML2上,当添加、删除和修改三种核心资源(网络、子网和端口)的时候,将调用两次机制驱动。首次调用(也称为预提交调用)是为了维护机制驱动的状态,属于数据库业务的一部分。就ODL机制驱动而言,没有必要做这种预提交的操作。一旦业务被提交,机制驱动可以与外部服务和控制器交互的时候,其将被二次调用(也称为提交后调用)。

图2:ML2机制驱动架构

机制驱动在端口绑定过程中也发挥了作用:确定是否相关的机制可以为网络提供连接,如果可以,就使用相应的网段和VIF驱动。

图2总结了OpenStack Neutron的ML2机制驱动架构。ODL机制驱动由“mechanism_odl.py”文件和网络ODL驱动组成。基于ODL的API手册,机制驱动被分成了两个部分(核心API和扩展API),ODL机制驱动和ODL驱动类实现了核心API,ODL的3层路由插件类只实现了扩展API。目前,ODL驱动不支持防火墙服务(FWaaS)和负载均衡服务(LBaaS)。

ODL机制驱动接收到调用消息后,就对核心资源(网络、子网和端口)进行相应的添加、删除和修改的操作,机制驱动通过调用同步函数将消息转发给ODL驱动类,该同步函数采用了‘sendjson’ API。

同样地,ODL的3层路由插件类利用3层的API添加、删除和修改路由和浮动IP。因此,核心API和扩展API都调用‘sendjson’ API向ODL控制器发送REST请求,并等待应答。

之后的章节会介绍ODL是如何处理这些REST调用的。

OpenDaylight

OpenDaylight暴露OpenStack Neutron API服务接口,给多样性的解决方案提供Neutron API操作。图3总结了OpenDaylight Neutron API的实现架构,Neutron API服务主要由三个bundle组成:北向API和南向接口(SPI)、转录器(transcriber)以及解决方案的集合。

图3:OpenDaylight Neutron API实现架构

Northbound API Bundle

OpenDaylight的北向API处理来自OpenStack插件的REST请求并作出合适的应答。该bundle的组成部分如下:

1、父类请求: IneutronRequest。

2、JAXB(Java architecture for XML Binding)带注释的request类的集合,这些类涉及到的资源有:网络、子网、端口、防火墙和负载均衡等,这些request实现了IneutronRequest接口。例如:网络request包含如下属性:class NeutronNetworkRequest implements INeutronRequest

123456

@XmlElement(name="network") NeutronNetwork singletonNetwork; @XmlElement(name="networks") List<NeutronNetwork> bulkRequest; @XmlElement(name="networks_links") List<NeutronPageLink> links;

3、Neutron北向类的集合:为管理资源提供REST API。例如:NeutronNetworksNorthbound 类包括如下API:listNetworks(), showNetwork(), createNetworks(), updateNetwork()和deleteNetwork()。

除非特别提及,symbol*类都表示如下资源:网络、子网、端口、路由、浮动IP、安全组、安全组规则、负载均衡、负载均衡监测、负载均衡监听器和负载均衡资源池等。

Neutron SPI Bundle

Neutron SPI是连接北向API到实现方案的重要bundle,这个bundle包括:

1、JAXB (Java architecture for XML binding)注释的基类和子类。这些类以Neutron*命名,支持v2.0版本的API文档。

2、INeutron*CRUD接口。这些接口通过转录器(transcriber)实现。

3、INeutron*Aware接口。这些接口通过特定的插件(OpenDove、OVSDB、VTN等)实现。

Transcriber Bundle

Transcriber模块包含Neutron*类,这些类通过实现INeutron*CRUD接口将Neutron对象缓存下来。其中,大部分的类都包含一个并发的HashMap。如private ConcurrentMap portDB = new ConcurrentHashMap(),所有的添加、删除和获取的操作都在HashMap上进行。

Implementation Bundle

OpenDaylight的优势在于其包含Neutron网络的多种实现方式,提供多种与OpenStack结合的方法。ODL的北向服务能够提供网络虚拟化,这一功能可以作为Neutron网络的一种实现方案。ODL用于Neutron API实现的插件包括:

1、OVSDB:OpenDaylight将其北向API与Neutron结合,使用OVSDB对计算节点的虚拟交换机进行配置。所以ODL可以管理网络连接,还可以为计算节点开通GRE或者VXLAN隧道。OVSDB Integration是一个可以实现Open vSwitch数据库管理协议的bundle。该管理协议是网络虚拟化中Open vSwitch转发数据需要的重要协议。虚拟化版本中的OVSDB neutron bundle支持使用VXLAN和GRE隧道部署OpenStack和CloudStack的网络虚拟化。

2、VTN Manager(Virtual Tenant Network):VTN manager是网络虚拟化的一种解决方案,实现了一个使用AD-SAL的控制器的OSGI bundle,可以管理OpenFlow交换机。VTN manager还有一个单独的组件为OpenStack提供网络服务。VTN manager的Neutron组件能使OpenStack运行在单纯的OpenFlow环境下,因为数据平面所有的交换机都支持OpenFlow。VTN manager还可以使用OVSDB-enhanced VTN。Neutron bundle可以使用OVSDB插件进行添加端口等操作。

3、Open DOVE:Open DOVE是一个“网络虚拟化”平台,控制平面使用OpenDaylight,数据平面基于Open vSwitch。Open DOVE的目的在于供2层或3层的多租户网络建立连接,它运行在虚拟数据中心的所有IP网络上。据IBM研究,Open DOVE是基于IBM SDN虚拟环境和DOVE技术的。Open DOVE在氢版本发布之后就再没有更新过,无疑它在ODL锂版本上的扩展性受到了限制。

4、OpenContrail (plugin2oc):为OpenDaylight控制器和OpenContrail平台提供交互。开源解决方案的结合使得OpenContrail具备了一些功能,例如:OpenDaylight项目的云网络和网络功能虚拟化(NFV)。

5、LISP Flow Mapping LISP(Locator/ID Separation Protocol)目的在于提供一个灵活的map-and-encap框架可以为overlay网络应用程序所使用,并将网络的控制平面与数据转发平面分离。LISP包含两个namespace:endpoint identifiers (EIDs — 主机的IP地址)和routing locators (RLOCs —连接主机的LISP路由的IP地址).LISP流映射提供了LISP映射系统服务来存储数据(包括路由策略和负载均衡等)。

这些解决方案实现了以下部分或全部的功能:网络、子网、端口、路由、浮动IP、防火墙、防火墙策略、防火墙规则、安全组、安全组规则、负载均衡、负载均衡监测、负载均衡监听器、负载均衡资源池和负载均衡资源池成员。这些处理程序支持对核心资源(网络、子网和端口)进行相应的添加、删除和修改的操作。例如:NeutronNetworkHandler实现了如下操作:

123456

canCreateNetwork(NeutronNetwork network) neutronNetworkCreated(NeutronNetwork network) canUpdateNetwork(NeutronNetwork delta, NeutronNetwork original) neutronNetworkUpdated(NeutronNetwork network) canDeleteNetwork(NeutronNetwork network) neutronNetworkDeleted(NeutronNetwork network)

南向插件的使用决定了机制的选择:OpenFlow(1.0或1.3)、OVSDB、LISP、REST(OpenContrail)等。举一个VTN Manager中ManagerNeutronNetworkCreated handler的例子,参与处理程序的步骤总结如下:

1、检查是否可以通过调用canCreateNetwork再次创建网络。

2、将Neutron网络的租户ID(tenantID)和网络ID(network ID)分别转变成租户ID(tenant ID)和网桥ID(bridge ID)。

3、检查租户是否已经存在,否则就创建一个租户。

4、创建网桥并执行VLAN映射。

实际的操作流程是VTN manager的Neutron组件调用前者的核心功能,使用OpenFlow(1.0)插件逐个配置OpenFlow交换机。

使用所有的bundle创建网络

图4:在OpenDaylight上创建网络的过程

图4简要地总结了网络创建的过程和上述OpenDaylight Neutron实现方案中bundle的调用。该图帮助读者理解所有bundle中的控制流。

总之,OpenDaylight是与OpenStack融合的最优控制器之一,虽然暂不支持负载均衡和防火墙服务,但多种免费的解决方案和完整的核心API对管理员来说有巨大的优势,带来了很大的灵活性。我们期待在不久的将来OpenDaylight能够支持OpenStack的所有扩展,实现二者的完美融合。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java学习

学习java需要会哪些知识才能够去应聘工作?

按照我去培训机构的学习经历,给初学还有自学Java 的同学一个基本的学习脉络,希望对大家有帮助。 不建议找到一本书死啃,没啥用,不要有这一页看不明白我就不往下看...

31410
来自专栏java学习

学习java需要会哪些知识才能够去应聘工作?

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 按照我去培训机构的学习经历,给初学还有自学Java 的同学一个基本的学习脉络,希望...

3796
来自专栏王清培的专栏

WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能

最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的,消息中间件是采用rabbitmq,为了保证消息的绝对无丢失,我们需要在发送和接受前对消息进行...

1240
来自专栏Python爱好者

Java基础笔记01

2836
来自专栏Jimoer

JVM学习记录-线程安全与锁优化(二)

高效并发是程序员们写代码时一直所追求的,HotSpot虚拟机开发团队也为此付出了很多努力,为了在线程之间更高效地共享数据,以及解决竞争问题,HotSpot开发团...

1042
来自专栏walterlv - 吕毅的博客

不再为命名而苦恼!使用 MSTestEnhancer 单元测试扩展,写契约就够了

发布于 2018-02-22 11:52 更新于 2018-08...

1411
来自专栏java学习

Java基础第一天学习笔记

01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑。是...

3715
来自专栏技术记录

java-FFmpeg(一) 实现视频的转码和截图功能

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方...

1.8K8
来自专栏十月梦想

nodejs连接MongoDB插入数据

昨天介绍了一下MongoDB在shell下的正删改查,今天来讲一下在nodejs中如何连接数据库以及数据的插入!

1453
来自专栏编程微刊

2018年各大互联网前端面试题四(美团)

1722

扫码关注云+社区

领取腾讯云代金券