基于OpenDaylight和OVSDB搭建VxLAN网络

news2024/11/28 11:53:14

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隧道建立的步骤。

原文链接:https://cloud.tencent.com/developer/article/1082587 

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

overflow属性详解

overflow属性详解_桃花扇J的博客-CSDN博客_overflow属性 原链接 overflow是对溢出内容的处理,有四个属性值visible,hidden,scroll,auto,且可以分别设置overflow-x,overflow-y,需要注意的是&am…

从夜间照明到随动转向速锐得解码比亚迪唐车灯升级改装技术方案

汽车大灯犹如人的眼睛一样,在汽车的正脸,灵魂与窗口一样的存在,我们通过技术手段将汽车大灯升级为更高亮度、更智能化,是从根本解决行车安全问题。行车灯发展了几十年,已经不仅限于满足“夜间照明”的功能,…

lt基站学习总结

目录 1.nanocell基站的介 2.lte的网络结构 2.1 网络实体 2.2 功能划分 2.3功能描述 2.4业务类型 2.5语音回落原理 3 S1接口上用户注册消息的简介 3.1 S1接口的位置 3.2 S1接口的协议栈关系 3.3 S1接口建立实例 4 3g用户附着流程 5. Lte用户开机附着过程 1.nanocell基站…

扫描点读笔搭载北京君正X2000多核异构跨界处理器的案例

外研通云畅VT-S30扫描点读笔搭载北京君正X2000多核异构跨界处理器,X2000多核异构跨界处理器主要面向于智能音频、图像识别、智能家电、智能家居、智能办公等五大领域。CPU采取三核结构,搭载双XBurst2,主频1.2GHz,跨界第三核XBurst…

Vue3.0五问五答

1、Vue 3.0 性能提升主要是通过哪几方面体现的? 响应式系统升级 首先来看一下响应式系统升级。我们都知道Vue2的时候,数据响应式的原理使用的是defineProperty,在初始化的时候会遍历data中的所有成员。通过defineProperty,把对象的…

Clion代码提示功能消失无法标出错误代码

Clion就不用多说了吧,jetbrains永远的神! 初次遇到这个问题也不知道是怎么回事,突然代码写着写着感到十分顺利。要是按照往常,依据jetbrains的强迫症,非要对你写的代码催毛求疵找出有误的地方,或者警告&…

spark安装与入门

下载 https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz Local 模式 将 spark-3.0.0-bin-hadoop3.2.tgz 文件上传到 Linux,解压 tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module 重命名 cd /opt/module mv spark-3.0.…

Vue3项目搭建教程

找到一个你想要创建Vue项目的目录(本文以C:\Users\XTT\Desktop\新建文件夹\project为例)。在此目录打开命令行,输入以下命令: 回车,如果是第一次用这种方式创建Vue3项目,命令行会提示安装 create-vue 包&…

sharedPtr

shared_ptr 1.以何种方式传递 通过下列方式将 shared_ptr 传递给其他函数: 按值传递 shared_ptr。 这将调用复制构造函数,增加引用计数,并使被调用方成为所有者。 此操作的开销很小,但此操作的开销可能很大,具体取决…

python小游戏编程arcade----坦克动画图片合成

python小游戏编程arcade----坦克动画图片合成前言坦克动画图片合成1、PIL image1.1 读取文件并转换1.2 裁切,粘贴1.3 效果图1.4 代码实现2、处理图片的透明度问题2.1 past 函数的三个参数2.2 注意点12.3 注意点22.4 效果![在这里插入图片描述](https://img-blog.csd…

Android中简单使用aspectj

Android中简单使用aspectj 前言: 面向切面编程(AOP是Aspect Oriented Program的首字母缩写),这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程. 1.简介: 在Android中使用注解…

48、线程

一、线程相关概念: 1、程序(program): 是为完成特定任务、用某种语言编写的一组指令的集合,即我们写的代码。 2、进程: (1)进程是指运行中的程序,比如我们使用QQ&…

✿✿✿JavaScript --- BOM、DOM对象

目 录 一、BOM浏览器对象模型 1.Window窗口对象 (1)与弹出有关的方法 (2)与定时器有关的方法 (3)与打开关闭有关的方法 (4) 获取其他对象的属性 2.Location地址栏对象 3.History历史记录对象 二、DOM文档对象模型 1.Document文档对象 (1)获取Element对象 (2)创建…

如何理解CRC循环冗余校验——图解CRC算法模型和C语言实现

如何理解CRC循环冗余校验 循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种产生定长校验码的算法,主要用来检测或校验数据传输或者保存后可能出现的错误。 它真的太常见了,上至应用软件通信…

Qt QCustomPlot 点状网格线实现和曲线坐标点拾取

Qt QCustomPlot 点状网格线实现和曲线坐标点拾取 文章目录Qt QCustomPlot 点状网格线实现和曲线坐标点拾取摘要我想实现的效果点阵的实现第一版本,使用QPen Style第二版本,通过设置背景第三版本,回到QPen Style取曲线上的点关键字&#xff1a…

[附源码]Python计算机毕业设计Django电影推荐网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【附源码】计算机毕业设计JAVA助农脱贫系统

【附源码】计算机毕业设计JAVA助农脱贫系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA mybati…

cpu设计和实现(异常和中断)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 异常和中断几乎是cpu最重要的特性。而异常和中断,本质上其实是一回事。很多熟悉mips的朋友,应该都听过这么一个词&#xff…

算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295)

算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2291 饿饿!饭饭!2. MT2292 甜甜花的研究3. MT2293 赌…

【2013NOIP普及组】T4. 车站分级 试题解析

【2013NOIP普及组】T4. 车站分级 试题解析 时间限制: 1000 ms 内存限制: 131072 KB 【题目描述】 一条单向的铁路线上,依次有编号为 1,2,…,n 的 n 个火车站。每个火车站都有一个级别,最低为 1 级。现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟…