SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

以下为你介绍的SDN/OpenFlow软件都可用在Linux系统上:Loxigen(OpenFlow 协议编译工具)、k8s-ovs(一款基于ovs的k8s网络插件)、VLCP(SDN 控制器)、DaoliNet(软件定义网络SDN系统)。

1、Loxigen(OpenFlow 协议编译工具)

LoxiGen是一个为多种语言生成OpenFlow协议库的工具。它由一个解析线路协议描述的前端和每个支持的语言的后端(目前为C,Python和Java,路由中的Lua自动生成的线路解析器)组成。

LoxiGen当前支持OpenFlow版本1.0、1.1、1.2和1.3.1、1.4.1和1.5.1。1.0、1.3.1和1.4.1版本已在生产中积极使用,对版本1.1和1.2的支持被视为试验性的,目前对1.5.1的支持尚处于试验阶段,并且仅限于Java后端。

Loxigen是免费的开源软件,Loxigen工具本身已获得Eclipse Public License版本1.0(EPL)的许可,但允许根据您选择的条件分发生成的工件的例外。

用法:

您可以直接从资源库中运行LoxiGen,无需安装它,并且它不具有Python 2.7+以上的依赖项。

生成所有语言的库:

make

要生成单一语言的库:

make c

当前支持的语言是c、python和java。有一个实验后端可以生成lua wireshk解剖器(wireshark)。

生成的库将位于loxi_output目录下,使用Makefile时,可以使用LOXI_OUTPUT_DIR环境变量进行更改。

每个生成的库都以该语言的标准格式附带其自己的一组文档。

下载地址:https://github.com/floodlight/loxigen

2、k8s-ovs(一款基于ovs的k8s网络插件)

k8s-ovs是一个使用openvswitch为K8S提供SDN功能的项目。该项目基于openshift SDN的原理进行开发。由于openshift的SDN网络方案和openshift自身的代码耦合在一起,无法像flannel和calico等网络方案以插件的方式独立的为K8S提供服务,所以我(隶属于万达网络科技集团云平台部)开发了k8s-ovs,它拥有openshift优秀的SDN功能,又可以独立为K8S提供服务。

k8s-ovs支持单租户模式和多租户模式:

单租户模式直接使用openvswitch+vxlan将K8S的POD网络组成一个大二层,所有POD可以互通。

多租户模式也使用openvswitch+vxlan来组建K8S的POD网络,但是它可以基于K8S中的NAMESPACE来分配虚拟网络从而形成一个网络独立的租户,一个NAMESPACE中的POD无法访问其他NAMESPACE中的PODS和SERVICES。

多租户模式下可以对一些NAMESPACE进行设置,使这些NAMESPACE中的POD可以和其他所有NAMESPACE中的PODS和SERVICES进行互访。

多租户模式下可以合并某两个NAMESPACE的虚拟网络,让他们的PODS和SERVICES可以互访。

多租户模式下也可以将上面合并的NAMESPACE虚拟网络进行分离。

单租户和多租户模式下都支持POD的流量限制功能,这样可以保证同一台主机上的POD相对公平的分享网卡带宽,而不会出现一个POD因为流量过大占满了网卡导致其他POD无法正常工作的情况。

单租户和多租户模式下都支持外联负载均衡。

快速安装:

快速安装需要你部署K8S 1.6以上版本的集群,如果是1.5或者1.4的集群请下载yaml文件做相应修改。

$ kubectl apply -f https://raw.githubusercontent.com/tangle329/k8s-ovs/master/rootfs/k8s-ovs.yaml

上面命令成功返回之后,你可以通过下列查询命令获取pod和node的运行状态来确认是否安装成功:

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

至此,k8s-ovs部署完成,用户可以跳转到admin.md进行功能配置了。

下载地址:https://github.com/tangle329/k8s-ovs

3、VLCP(SDN 控制器)

VLCP 是一款为生产集群应用而严格设计开发的 SDN 控制器。它从根本性的设计上改变了以往 SDN 控制器不稳定的印象,使用 ZooKeeper + 专业的事务性技术为控制器集群提供同步性支持,使用先进的异步编程框架实现内部逻辑。

项目已经开发约18个月,目前已经在借贷宝公司小规模投产。在10台物理机组成的集群中进行压测,控制器可以在:每服务器1000+容器;16+Gbps 流量;每分钟、每服务器创建/删除两百个容器的高压力环境下长期稳定运行。VLCP 的最终设计目标是面向数千台物理服务器、数万乃至数十万个虚拟网络端点的巨型 IDC 环境中稳定运行,提供高效、可靠、可控的 SDN 网络。

VLCP 可以通过 vlcp-docker-plugin 与 docker 进行对接,为 docker 提供更多功能、更高稳定性的 SDN 网络,直接为容器提供外部网络连通性,或者子网之间的连通性等。

架构特点:

VLCP 使用协程化的架构实现了无锁、高性能的并发逻辑。基于 Pub/Sub 机制的协程同步机制为扩展提供了极大的便利。独特的调度器实现简化了许多异步逻辑,通过统一的中心队列在进程内实现了众多的生产者-消费者模型,使得程序结构稳定、易读、统一排错: 

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

VLCP 使用高可扩展性的模块化设计。每个模块都可以单独加载、单独卸载,加载不同模块即可为控制器添加新的功能。模块功能不仅限于 SDN,也包括外围功能如管理、监控、排障等。官方自带的模块就已经有了很丰富的内容:

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

VLCP利用ZooKeeper实现了统一的事务层——ObjectDB,保证了从任意节点的读写都满足事务性,并与其他节点的数据保持同步。事务层的使用简便而有特色,通过WALK与TRANSACT两个原语实现了任意的读事务和写事务;组合两者则可以实现任意的事务操作。同时,写入的内容会通过更新消息推送的机制推送到其他节点上,从而实时更新其他节点上的信息和流表。

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

VLCP使用一种通用的方式来解析OpenFlow中的二进制结构,利用了namedstruct库。这种库通过类似于C程序中结构体定义的语法定义出结构体并进行动态的解析或构造。这种写法很容易跟着OpenFlow的版本升级,甚至可以比较容易地保持以往程序的兼容性。同样的技术还用来解析以太网数据包和ZooKeeper协议。

VLCP使用OpenFlow1.3的多流表功能实现了从L2到L3的完整功能,这些功能可以通过独特的流表分配机制由模块系统进行扩展。现有的流表结构大致如下图所示:

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

VLCP支持预推送、OpenvSwitch学习、控制器学习与首包上传等多种不同运行策略。

VLCP甚至包含了内置的HTTP服务器,用于提供WebAPI接口;也可以用来开发简单的管理界面。

VLCP有统一的配置系统,很容易将配置文件映射到具体的类中的属性。

下载地址:https://pypi.org/project/vlcp/

4、DaoliNet(软件定义网络SDN系统)

DaoliNet是道里云公司自主研发的为基于Docker的应用平台量身打造的动态敏捷高效网络技术,DaoliNet将以全新的技术变革,通过技术开源模式,为全球Docker容器网络贡献价值。

Docker是目前最火的容器技术,而DaoliNet是一个软件定义网络(SDN)系统,其设计目的是为Docker容器提供动态、高效的链接。在Docker容器中,微服务工作负载具有轻量且短暂的性质,DaoliNet恰好适用于这种性质。

DaoliNet介绍:

顶层特点:

资源高效:当容器处于相互不主动通信,但可随时切换到提供全连接性能的状态下,容器之间的连接几乎不消耗主机资源。这同容器高效利用主机CPU资源的方式相同。使用者可以从服务器资源中获得更多。

任意分布:Docker服务器可以是办公室或家中防火墙内的笔记本电脑或PC机,也可以是自建数据中心内的服务器,亦或诸如AWS的公共云中的虚拟机,跨数据中心的通信始终加密。

网络虚拟化:可以为容器选择任意CIDR IP地址,并且在物理位置改变后,容器保持IP地址不变。

使用Open-V-Switch(OVS)的纯软件实现:可提供网络功能,如分布式交换机、路由器、网关和防火墙。系统部署采用简单的即插即用。

架构:

DaoliNet的网络体系结构基于OpenFlow标准。它使用OpenFlow控制器作为智能控制平面,并用Open-V-Switches(OVSes)实现数据通路。DaoliNet中的OpenFlow控制器逻辑上为集中化的实体,但实际上为一组HA分布式类Web服务代理。OVSes在Linux内核中无所不在,因此也存在于所有Docker服务器中。

在DaoliNet网络中,所有Docker服务器处于同一以太网,彼此或实际连接或VPN连接。每个Docker服务器都像虚拟路由器一样工作,所有容器工作负载都托管在该服务器上。这些虚拟路由器遵循OpenFlow技术,不运行任何路由算法。当一个容器初始化连接时,所涉及的虚拟路由器将由OpenFlow控制器实时配置,从而建立路由路径。

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

工作过程:

当容器发起连接,作为源路由器,宿主Docker服务器中的OVS将给OpenFlow控制器发出一个PacketIn请求。该请求是起始容器的第一个数据包。OpenFlow控制器知晓系统中作为OpenFlow路由器的全部Docker服务器,并且可发现其PacketIN;它还可以识别另一个作为目标工作负载,并承载容器的Docker服务器。第二个Docker服务器是连接的目标路由器。OpenFlow控制器将响应一对PacketOut流,其中一个流用于源服务器,另一个用于目标服务器。PacketOut流将在两个容器之间建立热插拔路由,如图“热插拔路由的建立”所示。

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

热插拔路由一般包括3个IP跳数:(1)src-容器- src -服务器,(2)src -服务器-dst-服务器,(3)dst-服务器-dst-容器。在两个容器承载于同一Docker服务器的情况下,PacketOut流路由仅包括一跳:src-容器- dst -服务器,如图“热插拔路由的IP跳数”所示。

SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet介绍

当一个连接变为空闲,并大于时间阈值,热插拔路由流将暂停,同时将其删除以释放服务器资源。由于热插拔路由建立速度快,所删除的闲置连接可以在重新连接时被重新热插拔。因此作为DaoliNet路由器,Docker服务器将在无连接,无资源消耗的状态下工作。这种网络资源利用率的风格与容器利用服务器CPU的风格完全匹配,因为闲置的容器会消耗很少的服务器资源。DaoliNet是一种用于连接Docker容器的动态高效的网络技术。

用于容器的简单网络:

在DaoliNet中,系统中的Docker服务器正处于一种简单的状态,即彼此之间完全独立,互不知晓。该体系结构不仅节约了资源利用率,更重要的是,Docker服务器之间的独立关系极大简化了资源的管理。扩展资源库和即插即用过程(将服务器添加到库并通知OpenFlow控制器)一样简单。在所需的路由器之间没有复杂的路由表查找和更新,也没有必要使用Docker服务器来成对地运行数据包封装协议,因为这样做不仅资源利用率低,而且会使网络诊断和故障排除工具(如跟踪路由)失效。

使用指南:

在开始使用前,请确保系统已经完成安装过程,同时确保各个服务都正常启动。DaoliNet提供了一套命令行工具实现如下功能:

使用Group connect/disconnect由使用DaoliNet driver的Docker network创建的子网,在同一子网的容器默认连通。

在任何主机中使用connect/disconnect连接任意两个容器。

设置防火墙策略控制容器访问行为。

创建Docker网络。

网络控制和管理。

下载地址:https://gitee.com/mirrors/daolinet

注明

以上就是SDN/OpenFlow软件Loxigen、k8s-ovs、VLCP、DaoliNet的介绍内容,这些SDN/OpenFlow软件都能使用在Linux操作系统中。

栏目相关文章