OpenDaylight控制器架构分析


ODL是一个基于SDN开发的模块化、可扩展、可升级、支持多协议的控制器框架。引入SAL屏蔽不同协议的差异性,支持多种南向协议插件。北向接口可扩展性强,REST型API用于松耦合应用,OSGI型用于紧耦合应用。ODL控制平台采用了OSGI框架,实现了模块化和可扩展化,为OSGI模块和服务提供了版本和周期管理。

ODL控制器可以运行在任何支持JAVA的平台上,如结构图1所示,大体分为三部分,网络APP和业务流程层、控制器平台层以及物理和虚拟网络设备层,并且用北向接口与南向接口将三者连接。控制器向应用层提供北向接口,应用使用控制器收集信息,利用控制器做分析,部署新的网络规则等。南向接口可支持多种协议,openflow1.0、openflow1.3、BGP-LS等,这些协议插件动态地连接在SAL上。
ODL架构图1
ODL架构 图1

物理和虚拟网络设备层

最底层由物理、虚拟设备组成。例如交换机、路由器等在网络端点间建立连接。支持混合式交换机和经典openflow交换机。

南向接口和协议模块

南向接口

ODL向下层提供的接口称之为南向接口,南向接口支持多种协议。如OpenFlow 1.0、 OpenFlow 1.3,OVSDB、NETCONF、LISP、BGP、PCEP和SNMP等。这些协议模块以插件的方式动态挂在SAL上。

南向接口使用netty来管理底层的并发IO。Netty是提供异步的、事件驱动的网络应用框架,该框架健壮性、可扩展性良好,而且还具有延时低、节省资源等特点。Netty使用简单,功能强大,支持多种主流协议。定制性强,可以通过channelHandler对通信框架进行灵活扩展,适用于支持多种协议的南向接口。

协议模块

协议模块主要有OpenFlow、OVSDB、NETCONF、LISP、BGP、PCEP和SNMP等协议模块。其中OF最具代表性,OF是控制器与交换机之间的通信准则,管理网络设备会话连接以及协议交互,一方面监听底层设备的消息,另一方面将上层请求下发到底层设备,此外还支持链路发现服务。

SNMP协议插件.png


SNMP协议插件 图2

为了用以太网交换机建SDN,提出一个南向接口插件。如图2所示,可通过这个插件中的SNMP和CLI把流配置安装到以太网交换机的转发表、ACL 和VLAN表中,此外需要拓展SAL的API去支持一些设置。

OVSDB插件用于实现open VSwitch数据库管理协议,允许南向接口配置虚拟交换机。而LISP插件与LISP服务相互协作,为数据平台设备提供映射服务。

BGP协议用于支持BGP链路状态分布,作为网络层拓扑信息来源。而PCEP协议用于支持路径计算单元协议,为底层网络实例化路径。

控制器平台层

基本网络服务功能

控制器基本服务功能模块包含拓扑管理、统计管理模块、交换机管理模块、转发管理模块、主机追踪模块、ARPHandler模块。控制器需要知道设备的能力以及可到达性等才能控制设备,这些信息由拓扑管理模块存储、管理。而 ARP handler、 Host Tracker、 Device Manager 和Switch Manager 等其他模块帮助生成拓扑数据库。

顾名思义拓扑管理模块就是管理拓扑图,但它不是独立运作的,需要其他模块协助才能实现拓扑管理功能。拓扑模块管理节点、连接、主机等信息,负责拓扑计算。拓扑模块与OF协议模块、ARPHandler模块、HostTracker模块、SAL模块等紧密联系,通过与这些模块的交互获取节点、连接、主机等信息。例如协议插件模块中的DiscoveryService向拓扑模块提供交换机节点及链路信息,HostTracker模块提供主机信息。

统计模块用于收集流、端口、表的统计信息,并开放相关API。交换机管理模块用于管理南向接口连接的底层设备。转发管理模块就是负责管理转发规则,以增、删、改、查流规则实现管理。由上层下达事件或是底层上报事件。该模块循环读取事件,并对不同的事件进行针对性处理。

主机追踪模块负责追踪主机信息,记录主机的IP、MAC、Vlan以及连接交换机的节点和端口信息。该模块依赖于ARPhandler模块,当ARPhandler模块发现是单播发送ARP数据包,则通知hosttracker模块学习主机信息。该模块接收到主机上报的ARP消息,先判断主机信息是否已经存在,若不存在则缓存主机信息并下发新增规则消息。若存在,则删除旧信息,再缓存新信息并下发新增规则消息。

ARPHandler模块用于监听IPV4和ARP数据包,从中获取相关主机信息,并根据不同情况作出不同反应。拓扑模块与HostTracker模块都依赖于该模块。Openflow协议模块收到ARP或是IPV4包后交给SAL,借SAL转交给ARPhandler模块。ARPhandler对这两种数据包分别进行处理,若是IPV4则进入handlePuntedIPPacket处理流程,若是ARP数据包则进入handleARPPacket处理分支流程。

拓展服务功能

拓展服务功能是在基础版之后添加的,包括Affinity service、Open Stack service、LISP service、OVSDB Neutron、VTN Manager和oDMC。
关联元数据服务图
关联元数据服务 图3
Affinity service 是关联元数据服务模块,作为外部应用程序的主导,用于表达工作量关系和服务水平。如图3所示,控制平台从工作量交流过程获取明确需求,最大化组合资源使用方式。保证底层设备适应应用,而不是反过来。将网络消费转变为自助服务,从需求模式转变为云流量模式。前者转变是从客户角度看,消费是别人给的,自助是自己拿的。而后者转变从服务提供者角度看,需求模式是客户提出请求后提供服务,云流量模式是把许多服务资源放那,客户自己拿。该模型具有一个抽象的API,屏蔽细微差别和底层基础架构的复杂性,允许opendaylight控制器和应用创建与底层基础设施类型无关的拓扑和设施,使开发人员能够更快速、轻松地开发应用程序。

Open stack service模块用于提供openstack对接服务,openstack的宗旨是帮助组织运行虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。该模块用于与openstack对接,添加openstack插件并利用openstack的功能。

LISP service插件用于创建虚拟网络的LISP映射服务(Mapping service)。由于IP兼具定位符和标识符两个功能,导致IP地址语义过载,全局路由表不断增长,于是将IP分为EID和RLOC,EID用于标志主机,不具备全局路由,RLOC用于全局路由。采用分级结构进行映射系统设计,通过映射系统实现EID 到RLOC的映射解析。
LISP
LISP 图4
如图4所示,LISP流映射提供LISP Map-Server和LISP Map-Resolver 服务,分别为数据平台节点和应用提供、存储映射数据。映射数据包含虚拟节点所在的虚拟地址到物理地址的映射,和一些路由规则。应用和服务可以通过北向接口定义LISP 映射服务的映射和规则。数据平台设备则通过LISP控制协议、北向接口连接的LISP插件,使用映射服务。

OVSDB neutron模块支持Open vSwitch 数据库管理和配置协议。

VTN Manager是floodlight控制器的一种插件,与VTN coordinator相互作用,提供rest接口以便配置ODL控制器的VTN组件。

oDMC 多用于多租户网络虚拟化应用。DOVE 是一个网络虚拟平台,在虚拟数据中心的任何IP网络上提供多租户网络。DOVE为每个租户提供一个虚拟网络抽象层,2、3层的连接,而且使用获取控制策略则有能力控制通信。DOVE中集群提供了地址传播和策略执行,还兼具网关功能,保证虚拟网络中的虚拟机和外部主机的通信。
openDOVE
openDOVE 图5
如图5所示,DMC向应用层提供API,用户可以通过DMC创建、管理虚拟网络,以及绘制简单基本的用户界面。DMC也用于配置网关,配置虚拟网络与外界非虚拟网络的连接。DCS为虚拟交换机提供地址和策略信息。

除了以上模块ODL还可以扩展其他模块,ODL采用OSGI框架,将功能模块化,实现了一个优雅、完整和动态的组件模型。各个模块间进行封装,功能模块间相互隔离,可以动态地加载、卸载模块而无需停止JVM平台。这个特点符合ODL的需求,允许插入不同的应用和协议以满足不同使用者的需求,支持不同供应商的决策观点。模块称之为事件,其中以JAR文件和manifest文件为基础的事件显示应该向其他模块输出什么,又从其他模块接收什么,负责模块间的交互管理。各种功能项目以事件的身份插入框架,形成一系列Java接口,向外提供服务。

服务抽象层

SAL模块是控制器模块化设计的核心,支持多种南向协议,屏蔽了协议间差异,为上层模块和应用提供一致性的服务。如图6,SAL根据插件提供的特性来构建服务,服务请求被SAL映射到合适的插件上,采用合适的南向协议跟底层设备进行交互,各个插件之间独立并且跟SAL松耦合。SAL层提供的服务有数据包服务(Data Packet Service)、拓扑服务(Topology Service)、流编程服务(Flow Programming Service)、资源查询服务(ReadService)、连接服务(ConnectionService)、统计服务(Statistics Service)、清单服务(Inventory Service)等。其中数据包服务主要用于转发底层与上层模块间的数据流;拓扑服务是一套传递拓扑信息的服务集合;流编程服务主要为下发流表请求到SDN南向协议插件,为流规则管理模块提供增加,删除,修改流的功能,并提供对流的监听服务;资源查询服务派发硬件信息查询请求给南向协议模块,并通知监听器变化;连接服务传递上层模块的节点连接、断连、本地状态查询请求,以及通知监听器集群视图变化等。

SAL框架图.png


SAL框架 图6
SAL将服务提供给向其注册过的北向模块,SAL计算出不依赖底层协议情况下怎样满足北向服务需求,这样可以屏蔽底层协议的差异性,为上层应用提供保护,即使以后openflow与其他协议发展也不会对上层应用造成影响。

北向接口

控制平台层向上层提供的接口称之为北向接口,ODL定义了标准化北向接口,意图打造开放统一的控制平台。北向API分为OSGI和REST两种。其中OSGI适用于需要模块化,面向服务,面向组件的应用程序。极大的增强了功能模块的可扩展性,方便功能模块的选择性加载,也便于协同工作。REST是以资源的角度观察整个网络,分布在各处的资源由URI确定,因此地址空间与控制器相同的应用使用OSGI,地址空间与控制器不同的应用使用REST。

网络App和业务流程层

ODL是为了推动SDN发展而诞生的,因此ODL存在的最终目的是推动SDN发展,促进SDN产业化。传统网络体系庞大,不堪重负,结构复杂,更新困难,于是针对其所存在的问题提出了SDN,SDN的目的是实现网络的可控性和可编程性。网络APP和业务流层就是控制和编程的平台,这一层包括一些网络应用和事件,可以控制、引导整个网络。借用这一层用户可以根据需求调用下层模块,享受下层提供的服务,可以根据用户需求提供不同等级的服务,大大提高了网络的灵活性。也可以利用控制器部署新规则,掌握整个网络,实现控制与转发的分离。其中,复杂的服务需要与云计算和网络虚拟化相结合。

这一层大体有Management GUI/CLI、VTN Coordinator、D4A Protection和OpenStack Neutron。

D4A Protection是一个监测、缓和DDOS攻击的SDN应用,如下图7所示,该应用通过ODL北桥REST API与ODL控制平台通信。Defense4All主要起到两个作用,控制保护流量的行为,还有就是转移被攻击流量到所选的AMSs。
Defense4All
Defense4All 图7
VTN技术是ODL控制器所用技术的特色之一,该模块使用VTN虚拟化技术,为用户提供REST接口,能与VTN Manager插件相互作用实施用户配置,同时具有多控制器编制能力。

VTN
VTN 图8
如图8所示,VTN主要负责在控制器上提供对多租户虚拟网络的支持,不同租户使用不同网络配置和应用程序,若是在物理网络中实现则需要针对不同租户分别配置和管理,情况复杂。但是,VTN提供一个逻辑的抽象层,租户在逻辑上进行隔离,物理网络无需太大改动。租户可以任意使用租用的网络而无需了解物理网络拓扑和带宽限制。基于VTN设计的网络会自动被映射到底层物理设备,并配置到支持SDN控制协议的独立的交换机上。这样不仅仅屏蔽了底层网络的复杂性而且可以更好的管理网络资源,减少了网络服务的配置时间和配置错误。

9 个评论

沙发,好文章,有个问题:文中物理和虚拟网络设备层下的协议模块中所说:可以用snmp协议为以太网交换机配置sdn环境。这可行吗?以太网交换机不支持openflow协议吧?
可行,通过对普通交换机进行管理配置,可将交换机配置成OpenFlow交换机,进行软件定义安装,也可通过对普通主机进行团建定义安装
我理解的文中图的意思应该是实现sdn并不是只有openflow一种形式,sdn的一个特性就是实现网管自动化,当然可以通过snmp实现网管
但是目前sdn的南向协议走的还都是openflow,就跟小编回复的,它这个of应该是用软件模拟出来的。
谢谢,软件定义的安装,有没有什么文档介绍这类配置的。
还有个问题,关于文中提到的“该模块接收到主机上报的ARP消息,先判断主机信息是否已经存在,若不存在则缓则主机信息并下发新增规则消息。”。HostTracker模块貌似不会触发流表下发,源码中不存在,应该是路由计算才会触发流表下发,我看的源码是这样的,不知道是不是有出入。
这边是有点歧义,hosttracker模块是指上报主机信息,当主机信息不存在时,相当于获取到一个新的主机,他获取主机信息,并将信息上报,这也是相当于新发送一条信息出去,下发新增规则信息表示的就是主机信息,而你说的是下发的流表信息
主机信息的话,hosttracker上发是发到北向的app吗?下发主机信息是什么意思,是发给请求主机信息的bundle吗?
应该说是上报主机信息,而不是下发,定位可能不准确吧

要回复文章请先登录注册