基于OpenDaylight和OVSDB搭建VxLAN网络

1 简介

本文主要介绍基于OpenDaylight子项目OVSDB中的southbound组件来搭建VxLAN网络,包括初始环境搭建和southbound RestConf API调用等。OpenDaylight中的northbound组件也可以用来创建VxLAN网络,但northbound不是基于yang的且OVSDB封装的不好,beryllium版本已经将其删除。

2 实验环境和原理

实验环境

VMware workstation: 11.1,共需要3台虚拟机,其中两台为mininet(mininet-1, mininet-2),一台为ODL(ODL-VM),ODL虚拟机同时作为router,用来转发两个mininet的流量,模拟三层互通。

Mininet:相比纯OVS,mininet可以模拟下挂主机,方便测试。

Postman:版本0.8.4.16。southbound的postman命令集可以到ovsdb源码目录下resources/commons/Ovsdb-Southbound-Collection-for-Single-Node-Cluster.json.postman_collection,导入到postman即可使用。笔者根据实验,整理了更方便的postman命令集,下载地址为https://www.getpostman.com/collections/0165fe58d20e33eb2e9c,打开另存为文件,导入到postman即可。

OpenDaylight:Lithium SR1版本,作为manager来管理OVS。

实验拓扑

OVSDB vs. OpenFlow

如下图所示,ODL连接OVS有两种协议:Openflow,OVSDB。Openflow方式下,ODL作为OVS的controller,来给OVS下发流表。OVSDB方式下,ODL作为OVS的manager,用来配置OVS,包括创建bridge和port等。在生产环境中,这两中协议一般配合使用。Ovsdb-server服务处理OVSDB协议,ovs-vswitchd服务处OpenFlow协议。

Southbound组件

Southbound组件源码位于子项目ovsdb的southbound目录。目录结构如下所示。Southbound-api的ovsdb.yang定义了southbound的restconf API的格式和含义,使用southbound rest api之前建议浏览下。Southbound-impl通过监听datastore中ovsdb.yang的数据变化,解析为OVSDB协议【rfc7047】并下发给OVS。

3 搭建基于OVSDB的VxLAN网络

3.1 配置三层互通环境

VxLAN是在跨三层的大二层网络,为了更贴近实际,我们将Mininet-1和Mininet-2配置为三层互通。 Mininet-1和Mininet-2属于不同的IP子网

Mininet-1:192.168.1.0/24 Mininet-2: 192.168.2.0/24

并且,Mininet-1和Mininet-2位于不同的VMware虚拟网络(相当于VLAN隔离)。Mininet-1位于VMnet2,Mininet-2位于VMnet3。

配置ODL-VM。为虚机添加两块虚拟网卡eth0和eth1,分别配置到VMnet2和VMnet3。Eth0配置IP:192.168.1.1/24, eth1配置IP:192.168.2.1/24。

并开启ubuntu路由转发功能:

在/etc/sysctl.conf文件中加上下面一行,即可打开ip 转发功能:

net.ipv4.ip_forward = 1

另外需要将mininet-1和mininet-2的默认网关分别配置为192.168.1.1、192.168.2.1。

如下图所示,配置完毕后mininet-1和mininet-2可以互相ping通,至此三层互通环境配置完毕。

笔者的postman安装在windows下,为了让宿主操作系统windows能访问到ODL-VM,需要给ODL-VM另外配置一块虚拟网卡eth2,并设置为NAT模式(或者桥接模式也可,只要宿主系统能访问到ODL-VM即可)。

注:虽然mininet-1和mininet-2位于同一子网也可以,但是VxLAN是在跨三层网络的大二层,为了更贴近实际,故采用三层互通环境。另,三层互通环境可以避免二层广播可能会造成的问题。

3.2 OVS配置

将mininet-1和mininet-2上的 OVS配置为被动监听模式,此模式下,ODL和OVS的连接由ODL发起。

sudo ovs-vsctl set-manager ptcp:6640

OVS也可以配置为主动连接方式,此模式下,ODL和OVS的连接由交换机主动发起。

sudo ovs-vsctl set-manager tcp:192.168.92.128:6640

其中192.168.92.128:为ODL的IP地址。

两种模式除了配置命令不同外,OVS在ODL中的node-id也不同。被动监听模式下,OVS的node-id格式为“ovsdb: //{{ip : port}}“;主动连接模式下,OVS的node-id格式为”ovsdb://uuid//{{uuid of OVS}}”

本文采用被动监听模式。

注:mininet-1和mininet-2上的OVS的UUID相同,这是因为笔者的两个虚拟机是直接克隆的,本文采用的是被动监听模式,UUID相同不影响本次实验。

3.3 Mininet配置杠铃拓扑

分别在mininet-1和mininet-2上执行 :

sudo mn

该命令会创建两个host和一个bridge的网络。

默认情况下,Mininet-1和mininet-2上的h1的IP都是10.0.0.1,而h2的IP都是10.0.0.2。为了区别开,我们将mininet-2上的h1和h2重新配置IP。

本实验的最终目的就是让这四个host (10.0.0.1, 10.0.0.2, 10.0.0.3, 10.0.0.4)在一个二层网络,可以互相ping通。

为了对比,我们在mininet-1和mininet-2的不同host之间做ping测试。结果如下: 10.0.0.1 ping 其他host的结果:可以ping通在相同bridge下的10.0.0.2。ping不通在mininet-2上的10.0.0.3和10.0.0.4。

10.0.0.3 ping 其他host的结果:可以ping通在相同bridge下的10.0.0.4。ping不通在mininet-1上的10.0.0.1和10.0.0.2。

待本实验完成,mininet-1和mininet-2之间建立VxLAN隧道后,四个host位于同一个子网,就可以互相ping通。

3.4 ODL配置

下载opendaylight lithium SR1版本,运行./bin/karaf启动后执行:

feature:install odl-ovsdb-southbound-impl-ui

该命令会安装所有必要的feature,feature之间的依赖请参考southbound中的feature定义。Feature安装完成后,执行postman命令集中的“Get Config Topology“, 可以得到名为ovsdb:1的空拓扑,如下图所示。URL中的“odl”是ODL-VM的eth2的IP,本文将此IP配置到了hosts文件中。

3.5Postman配置Vxlan网络

首先ODL连接到mininet-1上的OVS。

用Postman分别下发”Create Specific Config OvsdbNode”,

下发成功后,执行postman命令集中的”Get Operational Topology”,可以在operational中查询到创建的ovsdbNode,且可以查询到sudo mn命令创建的名为s1的bridge。查询到的信息很多,在此不截图了。

类似地,我们将ODL连接到mininet-2上的OVS。

下面执行最后一步,也是最重要的一步,建立VxLAN隧道。针对mininet-1和mininet-2上的OVS, 分别执行postman命令集中的” Create Specific Config Termination Point”, 注意修改对应的IP,key对应的value就是VxLAN的VNI号,两次下发要保持一致。

3.6 结果分析

再次执行ping测试。

Mininet-1上的10.0.0.1可以ping通10.0.0.3 和10.0.0.4.

Mininet上的10.0.0.3可以ping通10.0.0.1和10.0.0.2。

在mininet-1上用wireshark抓包,如下图所示,抓到的是VxLAN封装类型的包。

3.7其他

实验中,我们直接用了mininet创建的bridge。也可以用postman调用RESTConf API来新建bridge。

执行postman命令集中的” Create Specific Config Bridge”, 为mininet-1上的OVS新建名为test的bridge。

4 参考资料

[1] https://wiki.opendaylight.org/view/OVSDB_Integration:Mininet_OVSDB_Tutorial [2] https://wiki.opendaylight.org/view/OVSDB:MDSAL_Southbound [3] http://www.sdnlab.com/5365.html [4] http://www.sdnlab.com/opendaylight-postman-vxlan/

5 总结

本文分析了基于OpenDaylight子项目OVSDB中的southbound组件来搭建VxLAN网络,详细介绍了通过Postman下发RESTConf API来完成VxLAN隧道建立的步骤。

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

原文发表时间:2015-11-26

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏你不就像风一样

深入理解Spring Boot数据源与连接池原理

在使用Spring Boot数据源之前,我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc 如下

1.5K3
来自专栏JackeyGao的博客

Celery用户手册 - Tasks

Tasks是Celery 应用的构建块。事实上Celery应用是由一个或多个Task拼装组成的。

1743
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(五):简易留言簿交互实现

努力与运动兼备~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

5278
来自专栏YoungGy

R包简单教程

R包概述 R包是什么 为什么学习R包 R包的结构 R包的工作流程 R包的创建 预先准备 包的创建 DESCRIPTION的编写 数据文件 R函数 R文档 测试R...

32310
来自专栏java思维导图

开源项目renren-fast解读,让java不再难懂(二)

1、百度百科的解释: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览...

2534
来自专栏Kevin-ZhangCG

[ Java面试题 ]JavaWeb篇

3468
来自专栏JavaEdge

大道缓存1 缓存特征2 缓存介质3 缓存分类和应用场景缓存实战

用户请求从界面(浏览器/App)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。

1161
来自专栏和蔼的张星的图像处理专栏

1.Win10+VsCode的C/CPP编译环境搭建

我是从开始学C++的时候就一直用的是visual studio,毕竟宇宙第一IDE,写和调试都是超级方便快捷,唯一的缺点可能就是启动慢一点。 之前电脑没有换固...

7916
来自专栏点滴积累

Jupyter(Python)中无法使用Cache原理分析

前言 最近需要在Jupyter中写一个类库,其中有一个文件实现从数据库中读取空间数据并加载为Feature对象,Feature对象是cartopy封装的geom...

3446
来自专栏我叫刘半仙

手写一个简化版Tomcat

      Tomcat作为Web服务器深受市场欢迎,有必要对其进行深入的研究。在工作中,我们经常会把写好的代码打包放在Tomcat里并启动,然后在浏览器里就能...

3985

扫码关注云+社区

领取腾讯云代金券