基于OpenFlow交换机的OpenStack部署实践

DN(软件定义网络)通过逻辑上集中的主控制器实现对底层交换机报文处理的管理,在业界也因此出现了多种SDN/OpenFlow的控制器比如 RYU,OpenDaylight、Floodlight等;随着云计算技术的发展在IaaS领域涌现很多开源的云平台管理工具,但是这两个领域目前还没有很好的融合。本项目通过为OpenStack的网络实现一个可扩展的OpenFlow控制器Plugin,试图解决早期OpenFlow控制器在扩展性方面的缺陷。

一、简介

云计算越来越普及,云提供的弹性和服务的动态提供日益受人瞩目。随着OpenStack项目的出现,云平台的创新也越来越容易。最初 OpenStack项目由instance管理项目(Nova),object存储项目(Swift)和image repository项目(Glance)组成,网路部分由Nova提供flat network配置和VLAN隔离,并没有受到太多关注。这种简单的网络能力使得租户很难设立多级网络(flat networking模式),同时没有扩展性可言。

从Quantum项目开始,OpenStack在接口设备(比如vNIC)间提供“网络连接即服务”。Quantum使得租户可以轻松建立虚拟网络,模块化的架构和标准的API可方便实现防火墙和ACL的Plugin。在大量涌现的Plugin中,和网络最相关的就是OpenFlow控制器RYU 的plugin,但是RYU开源的Plugin缺乏云计算最基本的特性:扩展性。本项目将为Quantum设计一个更具扩展性的openflow plugin,同时利用SDN的集中控制,我们还会演示基于控制器的虚机迁移应用。

二、实现方法

Floodlight是基于Java的OpenFlow控制器,来源于Stanford大学最早开发的Beacon控制器(另一个最早的控制器是 NOX),本项目选择Floodlight是因为它是一款相对简单又具有较高性能的控制器,不过本项目采用的方法可同样适用于其它控制器。

OpenFlow开源控制器RYU提供和本项目类似的Plugin,实现了逻辑上的集中控制和API,便于创建新的网络管理和控制应用。RYU进行租户的2层网络隔离不是通过VLAN,而是为VM内部通信建立单独的流,有实验表明这种方法在数据中心网络不具有扩展性,因为它会很快耗尽交换机的内存资源。

我们基于Floodlight为Quantum开发一款扩展性更好的OpenFlow Plugin。最初选择Floodlight是因为它是一款高性能的企业级控制器(译注:非常遗憾Floodlight已经停止更新)。不过本项目的方法可以很容易应用于其他标准的OpenFlow控制器。

我们的Plugin将来自Quantum API的建立/更新/删除网络资源的请求传递给底层网络。除了Plugin,每一个Nova VM会加载一个Agent用来处理该VM的虚拟接口的创建,并将它们与Quantum网络对接。我们的方案利用支持OpenFlow的 OpenvSwitch(OVS)来提供Quantum所需的底层网络,并通过Floodlight控制器对OVS进行配置。

1 挑战

为Quantum提供OpenFlow控制器Plugin的最大挑战就是扩展性。RYU开源的Plugin为所有的VM间流量创建流,当流的数目超过OpenFlow交换机TCAM支持的最大条目后扩展性就会成为问题。

本方法采用更具有扩展性的VLAN方案对租户网络进行隔离。我们知道VLAN同样有扩展性的限制,因此,后续方案开发可以考虑新的封装协议比如VXLAN。

2 架构

Quantum的Plugin用来处理网络建立请求,它将来自Quantum的网络ID转换为VLAN并将这个转换关系维护在数据库中。 Plugin负责OVS Bridge的创建,记录逻辑网路模型。Agent和Plugin同时纪录进入网络的端口,通知Floodlight有新的流量进入网络。基于网络端口的分配情况和端口的源MAC地址,流量被控制器加上VLAN ID标签。一旦加上标签后,网络流量就基于传统的learning switch进行转发。因此,通过VLAN标签和OpenFlow的控制我们就可以基于租户进行VM流量的隔离。


上图所示为Plugin的架构。租户通过nova-client将指令传递给Quantum管理单元,管理单元再将这些Call传递给真正执行创建 /读取/更新/删除(CRUD)功能的控制器Plugin。Plugin通过在每个租户的网络ID和VLAN ID间建立映射关系实现上述功能。每当有新的端口加载于Quantum网络,Plugin就会相应地添加端口到OVS-bridge,保存端口和VLAN ID间的映射关系。最后,以Daemon形式运行于每个Hypervisor之上的Quantum agent不断轮询数据库和OVS Bridge,当有变化发生时就通知Floodlight Client,Client采用RESTful API告知Floodlight控制器模块。这样控制器就获取了端口、网络ID和VLAN ID的映射关系。当到达OVS的新报文没有任何entry时,报文会送到控制器做决策。然后控制器会推送一条规则到OVS告知其采用哪个VLAN ID来标记报文以及封装报文所用的物理主机地址。另外,控制器还会为物理交换机增加一条规则,动作为按照普通报文处理流程处理报文,所以报文的转发将会按照基本的Leaning Switch方式。通过这个方法每个物理交换机所需的TCAM条目数与通过交换机的VLAN数目成正比。

3 分析对比


本节分析对比上述方法与RYU方法在流表数目上对交换机的需求。假定每个服务器有20个VM,每个VM有10条并发流(出入各5条)。在这样的设定下,如果采用RYU的方法VM-VM间的流不具有扩展性。上图所示为两种方法的对比图。假定RYU的匹配规则基于VM的源和目的地址,因此ToR交换机需要在TCAM中存储20 servers/rack x 20 VMs/server x 10并发流/VM = 4000条流表。然而在我们的方案中基于每个报文的VLAN标签可对流表进行聚合,即使在物理交换机上每个VM都有一条匹配规则(这里假定最坏情况即服务器上的每个VM都属于不同的租户),需要存储在交换机TCAM中的流表条目数也只有400条,可以下降十倍以上。

4 管理应用示例:VM迁移

OpenFlow和我们的OpenStack Plugin实现网络的全局视角以及对转发行为的直接控制,因而可以简化操作管理。接下来我们提供一个应用案例:VM迁移。

高速无缝的VM迁移是数据中心实现负载均衡、配置管理、能耗节约等提升资源利用率的重要手段。但是VM迁移需要更新网络状态,可能导致冲突、业务中断、环路以及SLA不达标等一系列问题,因此VM迁移对服务提供商来讲始终是一个挑战。SDN为解决这些棘手问题提供一个强有力的手段:在逻辑上集中的控制器位置运行算法和可精确控制交换机转发层面的能力有助于在两个状态间切换网络。

本方法特别解决以下问题:对于分别由带有特定转发规则的交换机组成的起始网络和目标网络,我们是否可以设计出一套OpenFlow指令将起始网络状态转换到目标网络,同时保持某些状态比如路径无环以及保证带宽。这个问题可以分解为两个小问题:确定VM迁移的顺序或者规划排序;对于每一个要迁移的 VM,确定要执行或者丢弃的OpenFlow指令的顺序。

为了在有正确性保证的情况下进行迁移,我们测试了最佳算法(用来从所有可能的迁移顺序组合中确定导致最少冲突的排序)的性能。算法可以计算出VM迁移的排序以及一系列的转发状态改变。 算法运行在SDN控制器之上所以可以编排整个网络的改变。为了评估设计的性能,我们在真实的数据中心用虚拟的网络拓扑仿真性能。对于各种负载情况,算法可以大幅提高迁移的随机排序性能(80%以上)。

在共享的物理数据中心分配虚拟网络已经有很多研究,本项目借用这些工作中物理底层网络和VN的拓扑和设置。另外,对于底层拓扑,我们测试了用于随机图、树、胖树、D-Cell和B-Cube的算法。对于VN,我们采用Web服务应用常见的星形、树和3-tier图。在迁移前最初分配VN时,我们使用了SecondNet的算法。

我们随机选择虚拟节点来进行迁移,从有空余资源的底层节点任意选择目的网络。在其他场景下当需要不同的节点或目标选取策略时或许会影响算法的性能,基于本算法可以继续进行研究。

迁移平台基于Intel的Core i7-2600K,16GB内存。图3实验为200个节点的树,链接带宽为500MB,VN为9节点树,链路带宽为10MB。如图所示,采用最佳算法后冲突比例保持在30%以下,而某些随机排序下则接近100%。


三、扩展工作:VXLAN

随着VXLAN等新的协议出现,扩展多租户云网络的其他方法也可以被应用于Plugin的通信底层机制。

VLAN(IEEE802.1q)传统上常被用于为云中的不同租户和组织提供隔离机制。虽然VLAN通过将网络分隔为独立的广播域解决了2层网络的问题,但是它无法提供敏捷的服务,可支持的host数目有限。因此,服务需要扩展时不得不适配不同的VLAN,导致服务的分隔。另外,在手工配置的情况下,VLAN配置很容易出错,难于管理。虽然可以借助于VLAN管理策略服务器(VMPS)和VLAN trunking协议(VTP)自动化地配置access端口和trunk端口,但是网络管理员很少采用VTP,因为在这种情况下,管理员必须将交换机分为不同VTP域,域中的每一个交换机必须加入域中所有的VLAN,造成不必要的负担。再加上VLAN头只提供12位的VLAN ID,网络中最多有4096个VLAN。考虑到VLAN广泛的用途,这个数目难堪重任。数据中心虚拟化后进一步增大对VLAN的需求。虚拟可扩展 VLAN(VXLAN)是IETF推出的标准,试图通过引入24位的VLAN网络标识符(VNI)来消除VLAN的限制,也就是说VXLAN可在网络中创建16M个VLAN。VXLAN主要利用hypervisor中软交换(或者硬件接入交换机)的虚拟隧道端点(VTEP)并将与VM相关的VNI和报文进行封装。VTEP基于IGMP协议加入多播组,这有助于消除未知的单播flood。

限制:VXLAN中16M个VLAN将超过多播组的最大数目,所以属于不同VNI的多个VLAN可能共享同一多播组。这可能导致安全和性能的问题。

四、总结

基于OpenFlow交换机部署OpenStack可充分体现SDN的优势。本项目实现了可扩展的Quantum/Neutron网络Plugin,同时为后续进一步基于VXLAN等新封装协议优化改善Plugin提供了设计方向。

本文作者:杨勇涛

来源:51CTO

时间: 2024-09-11 07:10:06

基于OpenFlow交换机的OpenStack部署实践的相关文章

自动化工具后起之秀Ansible的部署实践

本文讲的是自动化工具后起之秀Ansible的部署实践,从早期手动加脚本的部署方式,到后来自动化工具(chef, puppet, saltstack, ansible等)的出现,再到如今DevOps的盛行,企业应用部署正式进入平台部署阶段,CD(持续部署)已经成为企业对应用部署的标准需求,运维的交付也不再是以周或天为单位,而是以分钟为单位. 本文主要介绍自动化工具Ansible,及其在普元DevOps平台中的应用部署和日常应用部署中的实践. 本文目录: 一.如何选择合适的自动化工具? 二.Ansi

DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践

本文讲的是DockOne微信分享(一三二):58 赶集基于 Docker 的自动化部署实践[编者的话]随着 58 业务的发展,机器和服务数量也日益庞大,在多环境下,服务的管理和依赖难以维护.基于 Docker 带来的技术红利,我们借助 Docker 和 Kubernetes 提供了镜像的自动打包,单一镜像在测试-沙箱-生产-稳定四个环境的流转,以及测试环境统一的 Nginx 入口.至此,开发同学可以不再为资源和环境问题困扰,提高了生产效率. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训

基于超融合架构的容器云管部署实践

作者介绍 张扬,DaoCloud售前工程师,致力于企业IT环境中容器化.超融合和云计算方面的需求分析,方案设计和技术支持.曾任职IBM AICS云服务项目并负责Cloud Infra和DevOps相关工作.Nutanix社区活跃用户,个人微信号:小张烤茄.   随着云计算的逐步落地,容器化和超融合等技术开始风靡整个IT圈.本次分享主要从技术层面讲述云计算环境中容器化和超融合的双擎工作模型.    一.超融合概念   超融合基础架构(Hyper-Converged Infrastructure,或

《软件定义网络:基于OpenFlow的SDN》一一2.1 OpenFlow参考交换机

2.1 OpenFlow参考交换机 OpenFlow交换机是基本的转发单元,可以通过OpenFlow协议和接口对它进行访问.这种架构初看起来似乎简化了交换机的硬件,但是诸如OpenFlow一类的基于流的SDN体系结构要求额外的转发表记录.缓存空间和统计计数器,在传统的采用专用IC芯片(ASIC)的交换机中,这些实现起来并不十分容易.在OpenFlow网络中,有两种类型的交换机:混合型的(可启用OpenFlow)和纯粹型的(只支持OpenFlow),混合型的交换机除了传统的操作和协议(二层.三层交

《软件定义网络:基于OpenFlow的SDN》一一第2章 OpenFlow交换机的实现

第2章 OpenFlow交换机的实现 在本章中,我们将介绍OpenFlow交换机(1.0版本)的实现方案以及重要的OpenFlow交换机硬件和软件.然后,介绍一个能提供OpenFlow交换机和控制器实践的集成化环境Mininet.本章将对OpenFlow的参考实现方案及其软硬件产品进行描述.最后,详细讲解使用Mininet网络仿真工具完成OpenFlow实验的步骤.

《软件定义网络:基于OpenFlow的SDN》一一3.2 已有的实现方案

3.2 已有的实现方案 目前存在不同的OpenFlow(以及SDN)控制器实现方案,我们将把它们作为现有开源项目的组成部分,放在第8章中详细介绍.本章内容主要集中在NOX.POX.NodeFlow.Floodlight(派生自Beacon)和OpenDaylight方面,通过这些实现方案介绍若干OpenFlow控制器,以及在开发网络应用时各种可选的编程语言.3.2.1 NOX和POX 第一个OpenFlow控制器是用C++编写的NOX(www.noxrepo.org),它同时还提供了用于Pyth

EasyStack获评2016年度制造行业OpenStack最佳实践

近日,由工业和信息化部信息化和软件服务业司指导,中国信息通信研究院和中国通信标准化协会共同主办,云计算开源产业联盟承办的"云计算开源产业联盟第一次成果发布会"在京召开. 工信部信息化和软件服务业司巡视员李颖.中国信息通信研究院党委书记李勇出席会议并致辞,云计算开源产业联盟常务副理事长 何宝宏主持会议.会议发布了中国首个云计算开源产业发展白皮书,以及政府.广电.电力.电信.教育.金融.医疗.制造八大行业基于OpenStack技术 的最佳实践.   EasyStack合作伙伴副总监 罗云飞

OpenStack 部署运维实战

OpenStack 部署运维实战 OpenStack 简介 OpenStack 是一个开源的 IaaS 实现,它由一些相互关联的子项目组成,主要包括计算.存储.网络.由于以 Apache 协议发布,自 2010 年项目成立以来,超过 200 个公司加入了 OpenStack 项目,其中包括 AT&T.AMD.Cisco.Dell.IBM.Intel.Red Hat 等.目前参与 OpenStack 项目的开发人员有 17,000+,来自 139 个国家,这一数字还在不断增长中. OpenStac

《软件定义网络:基于OpenFlow的SDN》一一3.1 SDN控制器

3.1 SDN控制器 如后面的图3-1所描绘的那样,在软件定义网络(SDN)中,特别是OpenFlow中,控制平面和数据平面是分离的,我们可以把两者类比作操作系统和计算机硬件,OpenFlow控制器(就好比操作系统)提供一个OpenFlow交换机(就好比计算机硬件)的编程接口,利用这个编程接口,就可以开发网络应用,完成控制和管理任务,并提供新的功能.SDN中的控制平面,特别是OpenFlow的控制平面,在逻辑上是集中化的,因此在开发网络应用的时候,可以把网络视为一个系统.由于采用应变式的(rea