专栏名称: 云技术实践
关注云计算,云技术,云运维,云存储,存储,分布式,OpenStack,SDN,Ceph,虚拟化,运维,分享在云计算/虚拟化/运维项目实施中的资讯、经验、技术,坚持干货。
目录
相关文章推荐
架构师之路  ·  如何1分钟实现一个分布式锁?(第26讲) ·  昨天  
美团技术团队  ·  2024年美团机器人研究院学术年会议程公布 ·  2 天前  
架构师之路  ·  手贱删了DB,如何快速恢复?(第24讲) ·  4 天前  
架构师之路  ·  超经典,网页判重核心技术!(第25讲) ·  3 天前  
高可用架构  ·  一行代码改进:Logtail的多行日志采集性 ... ·  6 天前  
51好读  ›  专栏  ›  云技术实践

《OpenDaylight》第四章:动态互联(1)

云技术实践  · 公众号  · 架构  · 2017-06-15 21:23

正文

编者按

《OpenDaylight Coolbook》这本书由云技术社区志愿者翻译组翻译,因为没有出版纸质书的计划,本书的翻译只会翻译重点章节。


翻译的过程是译者和作者思想沟通的过程,也是一个学习的过程,中间充满艰辛,也充满快乐,欢迎大家加入云技术社区翻译小组,一起交流、学习、提高,加入请联系群主(群主微信:xiaolikvm,群穿越使者北极熊微信:hadxiaer),也欢迎大家推荐好的英文技术资料到云技术社区,由社区会组织翻译,一起共同学习。


云技术越来越成熟,但是云计算网络技术目前有好几个流派,OpenDaylight就是其中之一,《OpenDaylight Coolbook》侧重概念及实战,阅读本书可以快读了解OpenDaylight。


以下社区优秀翻译参加了本书的翻译:

云技术社区 金牌翻译 韩卫    第一章

云技术社区 金牌翻译 邓嘉浩  第三章

云技术社区 金牌翻译 路君    第四章

云技术社区 金牌翻译 刘志红  第五章

云技术社区 金牌翻译 罗晶    第六章

云技术社区 金牌翻译 罗莹    第九章

云技术社区 金牌翻译 孟驰    第十章

云技术社区 金牌翻译 文杰    第十一章


校对

云技术社区 金牌翻译 陈海  第一,三,四章

云技术社区 金牌翻译 陈建永 第五,六,九章

云技术社区 金牌翻译 黄继敏 第十,十一章  


在此感谢他们辛苦而卓越的付出!


已经发布章节链接:

《OpenDaylight Cookbook》第一章:OpenDaylight原理(上)

《OpenDaylight》第一章:OpenDaylight原理(中)

《OpenDaylight》第一章:OpenDaylight原理(下)

《OpenDaylight》第三章:虚拟客户边界



第四章 动态互联(一)



本章中,我们将主要涉及如下内容:


在Opendaylight中使用SNMP插件

在SDN环境中对交换机进行管理

传统设备的自动化


介绍


本章中,我们将主要集中于在SDN内部的网络设备间建立动态连接。由于SNMP、OpConf有不一样的网络管理和配置协议,Opendaylight为不同的协议实现了统一的南向API以便于对大规模的网络设备进行统一管理。


在Opendaylight中使用SNMP插件


简单网络管理协议(SNMP)被广泛应用于网络设备的配置和信息采集。SNMP插件允许网络相关的应用程序使用SNMP协议与网络设备进行通信。


准备


通过本单元介绍的操作你将学习到Opendaylight如何使用SNMP协议连接网络设备来获取设备数据。要顺利完成本单元的学习,你需要准备一个新的Opendayligth Beryllium版本环境、一个SNMP模拟器,并且需要从本书的Github库中下载本单元介绍的操作对应的目录。


操作指南


1. 使用karaf 脚本启动Opendaylight环境,并使用Karaf命令行访问:


$ cd distribution-karaf-0.4.1-Beryllium-SR1/

$ ./bin/karaf

________ ________ .__ .__ .__ __

\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/

|_

/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\

/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |

\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___|

/__|

\/|__| \/ \/ \/ \/\/ /_____/ \/

Hit '' for a list of available commands

and '[cmd] --help' for help on a specific command.

Hit '' or type 'system:shutdown' or 'logout' to shutdown

OpenDaylight.

opendaylight-user@root>


2. 使用feature:install命令安装SNMP-plugin南向API组件:


opendaylight-user@root> feature:install odl-snmp-plugin

opendaylight-user@root> feature:install odl-restconf-all

opendaylight-user@root> feature:install odl-dlux-all

使用feature:list 命令检查OF-Config是否已安装:

opendaylight-user@root> feature:list -i | grep snmp

返回以下结果表明已安装:



3. 如果没有支持SNMP协议的物理网络设备,也可以安装SNMP模拟器(SNMP虚拟设备)。开一个新的控制台窗口并执行以下安装:


$ easy_install snmpsim

关于SNMPSIM设备的详细信息,请访问:

http://snmpsim.sourceforge.net/download.html


4. 用两种方式使用SNMP模拟器:1)在本地运行SNMP代理;2)使用demo.snmplabs.com提供的公用SNMP模拟器。使用snmpsimd.py命令在本地运行SNMP模拟器:


$ snmpsimd.py -agent-udpv4-endpoint=127.0.0.1:1161

开一个新的控制台窗口运行SNMP代理:

$snmpwalk -On -v2c -c public localhost:1161 1.3.6

通过如下命令使用demo.snmplabs.com提供的SNMP代理:

$snmprec.py --agent-udpv4-endpoint=demo.snmplabs.com

上述操作将返回所有的SNMP OID以及各自的值:



5. 现在可以使用Opendayligth的YangUI visualizer工具接收SNMP代理的信息。打开浏览器并访问http://localhost:8181/index.html/yangui 。默认的用户名、口令为:admin/admin 。 在主页面中选择YangUI面板并下拉滚动条至“rev.2014-09-22”:



如上图所示,共有四个可用来获取SNMP设备信息的RPC调用可供使用。它们是: get-interface, snmp-set, snmp-get 以及 get-nodeproperties。


6. 在本单元的目录“chapter4-recipel”下可以找到名为” Plugin.postman_collection.json”的文件,该文件包含了前面所提到的用于连接demo.snmplabs.com的RPC调用的配置。如下图所示,使用postman或其它REST API客户端导入postman_collection.json文件,可以得到如下项目信息:get interfaces, get node properties, set snmp。同样的过程适用于使用SNMP模拟器获取SNMP信息的场景。



SDN对交换机进行管理


在SDN中Opendaylight使用SNMP4SDN插件管理以太网交换机。SNMP4SDN插件提供了基于SNMP插件配置交换机的转向表和访问控制列表的功能。


预备条件


本单元介绍的操作需要Opendaylight Beryllium 环境并且需要从GitHub仓库下载本单元对应的目录。通过本单元介绍的操作你将学习到如何使用Opendayligth在交换机中安装流表配置以及如何管理不同厂商的不同类别的交换机。


操作指南


1. 使用karaf script启动Opendayligth环境,同时获得Karaf CLI的命令行入口:


$ cd distribution-karaf-0.4.1-Beryllium-SR1/

$ ./bin/karaf

________ ________ .__ .__ .__ __

\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/

|_

/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\

/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |

\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___|

/__|

\/|__| \/ \/ \/ \/\/ /_____/ \/

Hit '' for a list of available commands

and '[cmd] --help' for help on a specific command.

Hit '' or type 'system:shutdown' or 'logout' to shutdown

OpenDaylight.

opendaylight-user@root>


2. 使用如下命令安装SNMP4SDN组件:

opendaylight-user@root> feature:install odl-snmp4sdn-all

使用如下命令检查OF-Config已安装的组件:

opendaylight-user@root> feature:list -i | grep snmp4sdn

正常情况下将返回如下信息:



3. Opendaylight 需要SDN网络中可用的交换机的基本信息。本单元目录下的snmp4sdn_swdb.csv文件中包含了交换机基本信息的示例列表。

Mac-Address,IP-Address,SNMP_Community,UserName,Password,Model

90:94:e4:23:13:e0,192.168.0.32,private,admin,password,

D-Link_DGS3650

90:94:e4:23:0b:00,192.168.0.33,private,admin,password,

D-Link_DGS3650

90:94:e4:23:0b:20,192.168.0.34,private,admin,password,

D-Link_DGS3650


4. 将snmp4sdn_swdb.csv文件拷贝至Opendaylight部署路径下的etc目录。

5. 接下来要让Opendaylight加载交换机列表,在Opendaylight Karaf CLI中运行如下命令:


$ snmp4sdn:ReadDB etc/snmp4sdn_swdb.csv

如果要打印交换机列表,在Karaf CLI中执行如下命令:

$ snmp4sdn:PrintDB


6. 可以在Karaf CLI中手工执行如下命令让Opendayligth来发现网络拓扑:


$ snmp4sdn:TopoDiscover


7. 如果网络中包含了多个交换机和多个网络边界,可以通过不同的命令来区别交换设备和网络边界的发现。对于交换设备的发现,在Karaf CLI中运行:


$ snmp4sdn:TopoDiscoverSwitches

对于网络边界的发现,运行:

$ snmp4sdn:TopoDiscoverEdges


更多信息


SNMP4SDN已经具备通过REST API对交换机进行配置和管理的能力。交换机的流配置是在转发表、ACL和VLAN表的基础上实现的。接下来我们将要介绍如何使用REST API来配置和管理不同厂商的交换机。


使用REST API配置交换机


转发表是交换机中非常重要的配置。在本单元目录下的SNMP4SDN.postman文件中包含了可以用来配置交换机的转发表和其它配置信息的REST调用。可以使用postman做为客户端导入这个json文件:



多厂商支持


由于一个SDN网络中很可能会有多个厂商的交换设备存在,所以在交换机之间会存在不同类型的配置信息。例如,我们可以通过SNMP的标准MIB来增加VLAN并且同时配置端口。然而,某些交换机需要先创建VLAN然后才允许设置VLAN的端口。因此,SNMP4SDN允许网络管理员在snmp4sdn_VendorSpecificSwitchConfig.xml文件中定义交换机的厂商配置以实现对网络中所有设备的支持。本单元目录下的snmp4sdn_VendorSpecificSwitchConfig.xml文件是这方面的一个很好的示例。


传统设备的自动化


SDN网络中不同网络设备的自动化需要在Opendaylight中为每个设备预先定义规格。Opendaylight的Device Identification And Driver Management(DIDM)项目满足了提供设备规范的功能需求。对于SDN网络中的每个设备都有包含了基本规格信息的驱动。DIDM为设备驱动提供了如下功能:

Discovery: 发现设备是否存在于Opendaylight management domain

Identification: 标识设备类型

Driver Registration: 在Opendaylight management domain中注册设备驱动

Synchronization: 收集设备信息及配置

Features Data Model: 按设备功能定义数据模型

RPC for features: 按设备功能定义远程调用


预备条件


通过本单元你将学习如何使用Opendaylight检测使用DIDM功能连接的OpenVSwitch节点。本单元需要一个新的Opendaylight环境以及安装了2.4版本的OpenVSwitch的Ubuntu 14.04环境。你可以直接使用本单元目录下的Vagrant文件来生成所需的环境。你需要安装在你的计算机中的Vagrant软件来运行vagrant文件。要安装Vagrant,请访问https://www.vargantup.com。最后,可使用postman或其它任何REST API客户端来执行Opendaylight的REST API远程调用。


操作指南


1.使用karaf script启动Opendayligth环境,同时获得Karaf CLI的命令行入口:


$ cd distribution-karaf-0.4.1-Beryllium-SR1/

$ ./bin/karaf

________ ________ .__ .__ .__ __

\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/

|_

/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\

/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |

\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___|

/__|

\/|__| \/ \/ \/ \/\/ /_____/ \/

Hit '' for a list of available commands

and '[cmd] --help' for help on a specific command.

Hit '' or type 'system:shutdown' or 'logout' to shutdown

OpenDaylight.

opendaylight-user@root>


2. 使用如下命令安装DIDM组件:

opendaylight-user@root> feature:install odl-didm-ovs-all

opendaylight-user@root> feature:install odl-dlux-all

使用如下命令检查OF-Config已安装的组件:

opendaylight-user@root> feature:list -i | grep didm

正常情况下将返回如下信息:



如你所见,这里还有HP设备之类的其它驱动。然而,出于我们的演示目的,我们将只使用OVS驱动来与我们的OVS设备一同工作。


3. 修改vargant文件中的network interface name使之与主机的网络接口对应。


$ vi Vagrantfile

将第46行的“en0”改为主机的网络接口名称并保存。

启动虚拟机:

$ vagrant up

需要大概五分钟时间启动虚拟机并安装所需软件。


4. 在虚拟机中创建bridge br1以允许Opendaylight连接到OVS。可以使用如下命令通过ssh协议连接到虚拟机:


$ vagrant ssh

运行如下命令检测OVS是否正常运行:

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ovs-vsctl show

创建br1并设置br1为Opendaylight的控制器。

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ovs-vsctl add-br br1

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ovs-vsctl set-controller br1 tcp::6633


5. 导入本单元目录下的DIDM.postman_collection.json文件以获得驱动信息。

导入DIDM.postman_collection.json之后,将得到两个REST 调用:Getmininet 和 Get-Network。

参考


DIDM工程的主要目的是让你能够为你的SDN网络设备定义新的驱动并调整它们的功能。更多信息请参考位于https://wiki.opendaylight.org/view/DIDM:Developer_Guide的developer guide。


相关阅读:

高端私有云项目交流群,欢迎加入!


加入中国最活跃的kubernetes技术讨论QQ群,加群主QQ:502207183,并注明城市、行业、技术方向。