1 项目简介1.1 项目简介

自己官方的网络项目是,有着自己的一套网络实现方案:基于linux ,构建一个个相对独立的虚拟网络功能单元。通过这些网络功能单元提供所需要的网络服务。在自己的实现之外,也考虑了第三方功能的兼容,例如2层的功能被抽象到了ML2的 ,各个网络功能被抽象到了对应的 。第三方SDN只需要实现相应的 和 ,就能接入到 。进而在整个环境下使用。的架构如下图所示:

抛开第三方SDN接入实现不说,单看的实现。大体上可以分成两个部分, 和。

1.2

的北向()接口,DB接口。 实现了网络数据模型的抽象,和基于这些抽象模型的业务逻辑。 有整个的虚拟网络信息,有关网络的可达信息和统计数据的计算都将在 进行。 可以部署多个,以达到HA的效果,并达到水平扩展的目的。从划分 nodes, nodes和 nodes的角度来说, 属于 nodes。

1.3

的南向()接口。这里的指的是各种,例如DHCP agent,L3 agent,ovs-agent,-agent,l2gw-agent等等。可以看出来,的具体网络功能是由一个个agent完成。可以是 nodes的一部分,也可以是 nodes的一部分,具体要看是什么agent,并且网络是集中式的还是分布式的。

ML2 的都是属于core。分为type和两种。Type (如flat, VLAN, GRE 和VXLAN) 定义 L2 type。 (如OVS, from ODL, Cisco, NEC, etc) 负责一系列动作(更新、创建、删除)网络、子网、端口。

整个过程可以分为下面几个步骤:

用户通过的界面()输入消息给 API,再发送给 接受信息发送给 / 更新通过REST API发送消息给SDN控制器SDN控制器接受消息然后通过南向的/, 如, OVSDB or OF-.1.4 RPC( Call)

与之间通过双向的RPC进行数据交互。也就是上面图中的 queue。

1.5 DB()

通常与其他项目共用一种SQL数据库。 是中唯一与DB有交互的进程或者服务。

2 SDN架构实现

传统的SDN架构里面没有这一层,在SDN 里面新增了这一层。而也在这一层。SDN想要接入到,必须要在这一层完成适配,将的请求转换成SDN的请求。在这一层不需要关心SDN底层的具体实现,因为SDN已经将底层网络抽象成纯软件的概念。

是SDN将底层网络抽象成软件概念,并暴露出来的接口。

& Tier通过 接入SDN 。这个接口通常是,但不局限于是 API。像ODL还提供了OSGI接口,而OVN和直接提供DB读写的接口。

换一个角度,不论底层的SDN是什么,单看提供的服务, 也可以看成是一个 。因为它提供了相应的网络数据模型的 API。

SDN的最核心部分。又分成了几个部分:

SDN自己是一个集群内运行的软件。有自己的状态和数据,因此必须要有一个来存储相关的数据。而SDN主要是进行网络运算,网络运算的要求就是高速,低延时。因此对的性能要求也比较高。基于内存的NoSQL数据库通常具有更好的性能,更快的响应速度。在这类数据库中,是选用最多的数据库,,,都支持。并且有报告表明,的性能的确优于同类的其他数据库。

鉴于的重要性,通常会将部署在独立的节点,并且考虑到HA和水平扩展,节点也会部署成一个集群。

由于SDN是一个集群内运行的软件,因此SDN需要定义自己的消息通讯机制,以供集群内的各个节点之间通讯。像ODL和采用的是RPC作为消息机制,则是参考MPLS V**自己制定的消息通讯机制,OVN和则是简单的消息发布订阅机制。

终于到了SDN ,根据ONF(Open )的定义,SDN 是一个逻辑集中的控制器。逻辑集中的控制器,那物理上就不一定集中了。实际上哪怕是集中式SDN控制器,出于HA和水平扩展的考虑,也不会部署成物理集中。而SDN控制器也朝着分布式的方向发展。像,,OVN,都有不同程度的分布式。

SDN控制器包含了各个网络功能的实现。也就是一个个 。具体的来说, 就是将的抽象数据和的具体网络协议做了适当的转换和翻译。也就是这样,原本生硬晦涩的 ,经过 可以灵活的通过软件来定义。

SDN 还包括了数据层面(Data plane)的接口,当然,这个接口一般不会太具体。

各类控制协议和网络协议。虽然感觉上很多,但是最常见的还是和。这是 暴露出来的接口,只有支持相应协议的网络设备才有可能成为SDN的一部分。

这一层就是实际的网络设备层,包含各种网络设备。网络设备本身也分为 和 。 就是支持或者或者其他控制协议的交换机,路由器和其他的网络设备。这些硬件设备目前占据SDN市场的最大份额,也是各大传统网络设备厂商的地盘。 ,就是支持或者其他控制协议的虚拟网络设备。像OVS,的。 被认为是最有发展前景的,并且在成本上也优于 。

3 为而生的SDN控制器——OVN3.1 为什么OVN会出现?

(OVS) 以其丰富的功能和相对优秀的性能,成为中广泛使用的虚拟交换机。在内核部分合并进入Linux主干之后,Open 几乎成为了开源虚拟交换机的事实标准。

下图是2014年的一个调查,时过境迁,nova-已经被废弃,如今的占有率肯定会更高。

OVS甚至可以说是网络虚拟化里最重要的工业级开源产品,OVS模仿物理交换机设备的工作流程,实现了很多物理交换机当时才支持的许多网络功能。OVN提供了许多原生的虚拟网络功能,提升了OVS的工作效率和性能。

OVN是项目组为开发SDN控制器,基于这个出发点,OVN在创立之初只关注2-3层的虚拟网络,这是区别于其他全功能的SDN控制器或者平台。OVN可以看成是OVS的补充,因此OVN可以运行在任何OVS兼容的环境下。虽然两者在一个项目下,OVN与OVS的连接采用的是OVS的通用接口,因此ovs-和ovsdb-不会因为OVN而受到影响。另一方面,就算不使用OVN,对OVS本身也没有什么影响。

随着OVS 2.6的发布,OVN的第一个版本也随着发布(包含在OVS中),OVN从创立之初就考虑了与的集成。OVN通过-ovn项目与集成。

OVN是一个厂商中立的开源项目,背后并没有一个大的厂商在操纵,项目的发起是的工程师,项目的推进有和IBM等其他公司的参与。相比ODL、ONOS其架构也较为简单。OVN在创立之初就考虑了与的集成,因此OVN在环境下工作的较好,一些 已知的问题,在OVN中都有较好的解决,例如DVR, Group的性能问题。对于已有的 + OVS环境,升级到OVN也是一个不错的选择。据说OVN已经在数百个物理节点上进行了部署测试,并且用ovn-scale-test项目进行了数千个节点的模拟测试。

其现在的主要问题就在于 node的瓶颈问题,相信后继的改进能够解决这个问题。其他问题在于项目的定位不是一个全功能的SDN,因此只有2-3层的 。不过这个倒是契合 的定位。其他的 功能可以通过 的各个子项目弥补。

3.2 OVN架构

在OVS的基础上,OVN新增了两个进程:ovn-和ovn-,两个数据库: DB和 DB。下面来分别看看:

3.2.1 DB

存储 data model,例如 ,,Port等。 DB是由CMS()写入,也就是说与之前说过的SDN不太一样,OVN北向不提供接口,而是直接由CMS写入数据库内容。举个例子,在 的场景下,对应的在中创建一个,需要通过-ovn在 DB中创建一个。

3.2.2 Ovn-

监听 DB的变化,将 DB的内容翻译成,存储在 DB。Ovn-是一个集中的进程,在OVN环境下一般运行在独立的 node上,在下面会再提到 node。

3.2.3 DB

存储,和其他的一些信息。 DB存储ovn-的数据。传统的集中式SDN控制器会根据已有的配置和数据计算规则,并下发到各个节点。而OVN将这个过程分解成了两部分:

3.2.4 Ovn-

分布在各个计算节点(OVN中叫做)的SDN 。Ovn-向上读取 DB的数据,应用在本地;并且读取本地的VIF和信息,向上更新。

3.2.5 OVN部署框架

OVN对于网络功能的实现,秉承的是分布式思想。因此网络功能都分布在计算节点,并且没有一个专门的网络节点。但是OVN需要独立的 node。这是因为OVN目前采用ovsdb-作为其DB,一方面,这对于OVN的部署很方便,因为OVN本身就基于OVS,采用ovsdb-可以避免新增依赖。但是另一方面,ovsdb-之前的主要应用场景是给OVS存储本地的虚拟网络设备信息,而OVN是一个集群内运行的软件,ovsdb-明显不能胜任这种大规模的数据读写。同时,前面说过ovn-是一个集中式进程,因此用一个独立的 node来运行ovn-并存储 DB和 DB,可以一定程度的缓解瓶颈问题。

OVN与集成之后的运行框架如下图所示 :

3.3 实现原理3.3.1安全组

OVN 的 group 每创建一个 port,只需要把 tap port 连到 OVS (默认是 br-int),不用像现在 那样创建那么多 ,大大减少了跳数。更重要的是,OVN 的 group 是用到了 OVS 的 功能,可以直接根据连接状态进行匹配,而不是匹配报文的字段,提高了流表的查找效率,还可以做有状态的防火墙和 NAT。

OVS 的 是用 Linux 的 来做的,他调用 API 把来报文送给 Linux 的 模块进行处理,这个模块给每个连接维护一个连接状态表,记录这个连接的状态,OVS 获取连接状态, flow 可以 match 这些连接状态。

3.3.2 OVN L3

的三层功能主要有路由,SNAT 和 IP(也叫 DNAT),它是通 Linux 的 来实现的,每个路由器对应一个 ,利用 Linux TCP/IP 协议栈来做路由转发。OVN 支持原生的三层功能,不需要借助 Linux TCP/IP stack,用 流表来实现路由查找,ARP 查找,TTL 和 MAC 地址的更改。OVN 的路由也是分布式的,路由器在每个计算节点上都有实例,有了 OVN 之后,不需要 L3 agent 了 和DVR了。

3.3.3 OVN L2

OVN的L2功能都是基于流表实现的,包括Port 、 ACL、ARP 、DHCP、 、 ACL等。

参考链接

理解与SDN控制器的集成_筋斗云计算的博客-CSDN博客 sdn

与SDN控制器的集成 | | 专注网络创新技术

为而生的SDN控制器——OVN_筋斗云计算的博客-CSDN博客 sdn控制器

架构详解图_大规模SDN云计算数据中心组网的架构设计的博客-CSDN博客

开源SDN控制器和商用SDN控制器一览的博客-CSDN博客

OVN – OVN (二)的博客-CSDN博客

中SDN泛谈1 (&ODL&ONOS) – 知乎

中SDN泛谈3 (OVN&) – 知乎

中SDN泛谈4 (SDN发展与架构) – 简书

《重识云原生系列》专题索引:

第一章——不谋全局不足以谋一域第二章计算第1节——计算虚拟化技术总述第三章云存储第1节——分布式云存储总述第四章云网络第一节——云网络技术发展简述第四章云网络4。2节——相关基础知识准备第四章云网络4。3节——重要网络协议第四章云网络4。3。1节——路由技术简述第四章云网络4。3。2节——VLAN技术第四章云网络4。3。3节——RIP协议第四章云网络4。3。4节——OSPF协议第四章云网络4。3。5节——EIGRP协议第四章云网络4。3。6节——IS-IS协议第四章云网络4。3。7节——BGP协议第四章云网络4。3。7。2节——BGP协议概述第四章云网络4。3。7。3节——BGP协议实现原理第四章云网络4。3。7。4节——高级特性第四章云网络4。3。7。5节——实操第四章云网络4。3。7。6节——MP-BGP协议第四章云网络4。3。8节——策略路由第四章云网络4。3。9节—— (平滑重启)技术第四章云网络4。3。10节——VXLAN技术第四章云网络4。3。10。2节——VXLAN 网络方案设计第四章云网络4。3。10。3节——VXLAN隧道机制第四章云网络4。

3。10。4节——VXLAN报文转发过程第四章云网络4。3。10。5节——VXlan组网架构第四章云网络4。3。10。6节——VXLAN应用部署方案第四章云网络4。4节——Spine-Leaf网络架构第四章云网络4。5节——大二层网络第四章云网络4。6节—— 和 概念第四章云网络4。7。1节——网络虚拟化与卸载加速技术的演进简述第四章云网络4。7。2节——网络半虚拟化简介第四章云网络4。7。3节——Vhost-net方案第四章云网络4。7。4节vhost-user方案——的DPDK卸载方案第四章云网络4。7。5节vDPA方案——的半硬件虚拟化实现第四章云网络4。7。6节——-blk存储虚拟化方案第四章云网络4。7。8节——SR-IOV方案第四章云网络4。7。9节——NFV第四章云网络4。8。1节——SDN总述第四章云网络4。8。2。1节——概述第四章云网络4。8。2。2节——协议详解第四章云网络4。8。2。3节——运行机制第四章云网络4。8。3。1节——Open 简介第四章云网络4。8。3。2节——Open 工作原理详解第四章云网络4。8。4节——与SDN的集成第四章云网络4。8。5节——第四章云网络4。8。6节——