专栏名称: 云技术实践
关注云计算,云技术,云运维,云存储,存储,分布式,OpenStack,SDN,Ceph,虚拟化,运维,分享在云计算/虚拟化/运维项目实施中的资讯、经验、技术,坚持干货。
目录
相关文章推荐
51好读  ›  专栏  ›  云技术实践

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

云技术实践  · 公众号  · 架构  · 2017-07-03 20:01

正文

请到「今天看啥」查看全文


编者按

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


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


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


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

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

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

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

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

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

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

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

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


校对

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

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

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


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


已经发布章节链接:

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

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

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

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

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



第四章 动态互联(二)



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


Openflow交换机的远程配置

网络设备Yang模型的动态更新

引导程序的网络安全


介绍


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


Openflow交换机的远程配置


OpenFlow配置协议(OF-Config)使SDN控制器来配置OpenfFlow交换机变得越来越简单。OF-Config是为Opendaylight提供远程配置OpenFlow数据通道能力的南向接口插件。


预备条件


通过本单元你将学习如何使用Opendayligth将OpenVSwitch看作一个标准Openflow switch来进行远程配置。本章需要一个新的Opendaylight环境以及安装了OpenVSwitch 2.3、libnetconf和OF-Config supporting for OVS的Ubuntu14.04虚拟机。你可以从https://github.com/serngawy/of-config下载满足上述所有要求的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. 使用如下命令安装OF-Config南向API组件:

opendaylight-user@root> feature:install odl-of-config-all

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

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

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



3. 现在你需要使用如下命令从github克隆OF-Config仓库,开户新的命令行窗口并输入:


$ git clone https://github.com/serngawy/of-config.git

$ cd of-config/


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


$ vi Vagrantfile

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

启动虚拟机:

$ vagrant up

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


5. 在虚拟机中运行OVS OF-Config server,可以使用如下命令连接到虚拟机的ssh会话:


$ vagrant ssh

使用如下命令启动OFC-Server:

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ofc-server -v 3 -f

6. 现在我们需要在Opendaylight和运行在虚拟机中的OFC-Server组件之间建立连接。在of-config目录下有一个名为OF-CONFIG.postman_collection的文件,我们要用它来向Opendaylight发送REST调用。


打开Postman并导入OF-CONIFG.postman_collection文件后,将获得3个可用的REST调用,分别是: Connection-establishment,Modify-controller-connection Get-Network:


7. 使用Connection-establishment payload操作Opendaylight连接到OVS,不要忘记修改payload中的 字段为虚拟机的IP地址。成功后将会收到状态码204:


8. 使用Get-Network payload 检测网络拓扑,将会返回虚拟机的IP地址以及已启用的功能。


工作原理


Opendaylight使用OF-CONFIG南向接口插件以抽象的逻辑交换机的形式来定义OpenFlow交换机。OF-CONFIG协议允许Opendaylight配置OpenFlow逻辑交换机的essential artifacts,所以Opendaylight可以通过OpenFlow协议与交换机通信并进行控制。OF-Config提供的essential artifacts如下:

sync-conf-ocs: 与具备OpenFlow能力的交换机同步配置

modify-controller-connection: 在Openflow逻辑交换机上修改控制器连接配置

create-tls: 为Openflow逻辑交换机与控制器创建TLS隧道并进行认证证书配置

opt-flowtable: 操作Openflow逻辑交换机的流表

config-tunnel: 在Openflow逻辑交换机中配置隧道

config-port: 在具备Openflow能力的交换机中配置端口及队列

config-ols-basic: 在Openflow逻辑交换机中配置dpid、lost-connection-behavior的基础条目


参考


做为如何在postman collection中使用这些essential artifact的示例,前文提供了编辑控制器连接的payload。此外,也可以参考Opendaylight的API Doc: http://localhost:8181/apidoc/explorer/index.html



网络设备Yang模型的动态更新


使用netconf协议来更新网络设备的Yang模型需要Opendaylight持续捕捉发送至设备的请求。从大规模网络的设备中迭代式的捕捉数据请求(设备的Yang模型)将对网络带来极大的负载。Yang PubSub项目只允许Opendaylight请求网络设备Yang模型的更新部分。本单元我们将向你展示如何使用Opendaylight在netconf网络设备中注册一个持续的请求获取来监听yang模型的更新。


预备条件


本单元介绍的操作需要Opendaylight Beryllium 环境,Opendaylight Netconf测试工具或具备netconf功能以及Yang推送能力的网络设备,例如Cisco IOS-XR设备。同时需要一个REST API客户端,最后你需要从本书的github仓库下载本单元对应的目录。


操作指南


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. 使用如下命令安装Yang推送功能:


opendaylight-user@root> feature:install odl-yangpush-ui

使用如下命令检查Yang推送功能的可用性:

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

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



3. 接下来我们要下载Opendaylight Netconf测试工具。转至本单元目录并执行如下命令下载该工具:


$ cd chapter4/chapter4-recipe5/

$ wget https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconftesttool/1.0.2-Beryllium-SR2/netconftesttool-1.0.2-Beryllium-SR2-executable.jar


4. 使用如下命令启动Netconf测试工具:


$ java -Xmx1G -XX:MaxPermSize=256M -jar netconf-testtool- 1.0.2-Beryllium-SR2-executable.jar --debug true --schemas-dir schema/

将会获得如下输出

[main] INFO NetconfDeviceSimulator - All simulated devices started successfully from port 17830 to 17830


5. 使用如下命令检测模拟设备是否正常运行:


$ ssh admin@localhost -p 17830 -s netconf


模拟设备的连接允许任意口令。需要时可直接输入回车以继续操作。连接成功后将会返回hello消息。


6. 现在我们要使用postman做为REST API客户端向Opendaylight data store添加模拟的netconf设备并注册持续更新请求以使Opendaylight可以获得Yang模型的更新。从本单元目录中导入yang-push.postman_collection.json文件至postman后,将会得到如下payload:Post YangPush Device, Get Netconf devices and Post RPC Push Updates:



7. 我们要使用第一个REST API payload “Post YangPush Device” 来向Opendaylight data store注册设备。如payload数据所示,该设备名称为xrvr2,按下来可以使用第二个REST API payload “Get Netconf device” 来检测该设备是否成功注册并已连接。


8. 接下来我们要使用“Post RPC Push Updates payload”注册continuous fetch请求以达到从模拟设备接收yang模型更新的目的。请求的返回信息如下:

{

"output": {

"subscription-id": "sub-2"

}

}


工作原理


注册在Opendaylight中的Push Update请求会以每分钟一次的频率连续不断的向模拟的netconf设备发送fetching update请求。我们通过向simulator schemas目录增加yang-push模块在Netconf 测试工具中模拟了Yang推送能力。在本单元的schema目录下存在如下文件:[email protected][email protected],以及[email protected]。ietf-datastore-push.yang包含了Opendaylight的可向设备注册的订阅及过滤条件,同时也包含了可向Opendaylight发送的RPC调用的定义。当netconf设备的数据产生了更新,仅更新部分的数据会通过已经注册的continuous fetching update request来向Opendaylight发送。


安全网络引导基础设施


在一个可伸缩的SDN网络中,基于证书的身份认证以及密钥的分发工作是一个挑战。Opendaylight的SNBI项目提供了zero-touch的安全方法在网络设备和Opendaylight充当的SDN控制器之间建立安全连接。任何利用IEEE 802.1AR – 2009标准进行安全标识的设备均可以与Opendaylight之间建立安全通信。Opendaylight和网络设备会自动发现对方并获取分配到对方的IP地址、交换证书并最终建立安全连接。


预备条件


本单元需要如下环境:Ubuntu 14.04主机、Opendaylight环境、docker和snbi/beryllium docker镜像、使用Postman做为REST API客户端。并且如果想要使用本单元目录下预定义的vagrant文件的话,还需要安装vagrant。本单元你将学习到如何使用Opendaylight在两个实现了安全设备标识标准的模拟设备之间来建立安全通信。


操作指南


1.如果已有预备条件中所述的环境,则可忽略本步骤并直接进入第4步。如需使用预定义的vagrant文件来建立环境,首先需要安装vagrant软件,然后转至本单元目录下的SnbiVMs目录:


$ cd chapter4-recipe6/SnbiVMs/


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


$ vi Vagrantfile


将第65行的“en0”修改为主机的网络接口名称并保存,然后启动虚拟机:

$ vagrant up


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


2. 安装完成后,会获得三个运行状态的虚拟机: SnbiODL、Snbi01、Snbi02.


$ vagrant status


将会返回正在运行的虚拟机列表。


3. 现在启动四个控制台窗口并使用vagrant ssh命令登录到每个虚拟机,然后设置虚拟机名称:


$ vagrant ssh snbiODL-vm

$ vagrant ssh snbi1-vm

$ vagrant ssh snbi2-vm


在第四个控制台窗口中登录到snbiODL-vm,我们在Opendaylight的karaf console的操作过程需要操持此控制台的可用。


4. 使用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>


5. 使用如下命令安装SNBI功能:


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

使用如下命令来检测OF-Config已经安装的功能特性:

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


6. 现在我们需要创建所需的网络拓扑结构以模拟本单元的网络,Snbi1-vm和Snbi2-vm通过直连方式连接到snbiODL-vm。使用如下命令在每个虚拟机中创建网络端口:


$ sudo ip6tables -A INPUT -j DROP -p udp --destination-port 4936 -i eth0


然后检测 iptables:


$ sudo ip6tables –list




7. 现在使用如下命令在网络端口间建立连接:


$ sudo ip link add snbi-ra type dummy

$ sudo ip addr add fd08::aaaa:bbbb:1/128 dev snbi-ra

$ sudo ifconfig snbi-ra up


可以使用如下命令检测snbi-ra的网络端口信息:


$ ifconfig


8. 现在启动Postman并从本单元目录中导入snbi.postman_collection.json文件。导入后将会得到三个REST API请求,分别是:Add domain list, Get domain list 以及Del domain list:


使用Add domain list请求向Opendaylight发送domain列表。


9. 在Karaf CLI中执行start secure_domain命令使Opendaylight转变为active discover模式:


opendaylight-user@root> snbi:start secure_domain

10. 我们首先要在snbiODL-vm中启动snbi/beryllium docker镜像,然后在snbi1-vm和snbi2-vm中也同样启动该镜像。使用如下命令在所有虚拟机中启动snbi/beryllium镜像:


snbiODL-vm:

$ sudo docker run -v /etc/timezone:/etc/timezone:ro --net=host --        privileged=true --rm -t -i -e SNBI_UDI=UDI-FirstFE -e SNBI_REGISTRAR=fd08::aaaa:bbbb:1 snbi/beryllium:latest /bin/bash

snbi1-vm:

$ sudo docker run -v /etc/timezone:/etc/timezone:ro --net=host --privileged=true --rm -t -i –e SNBI_UDI=UDI-dev1 -e SNBI_REGISTRAR=fd08::aaaa:bbbb:1 snbi/beryllium:latest /bin/bash

snbi2-vm:

$ sudo docker run -v /etc/timezone:/etc/timezone:ro --net=host --privileged=true --rm -t -i –e SNBI_UDI=UDI-dev2 -e SNBI_REGISTRAR=fd08::aaaa:bbbb:1 snbi/beryllium:latest /bin/bash

现在在容器的CLI中执行如下命令以检测设备信息:

snbi.d> show snbi device


11. 现在回到Karaf CLI中可以在日志中看到snbi/berylliumcontainers的证书和密钥信息。执行如下命令:


opendaylight-user@root> log:tail


12. 使用如下命令在每个host中验证路由信息:


$ ip -6 route show


13. 现在在几个vm之间使用ping命令验证它们之间的安全连接:


snbiODL-vm > $ ping6 fd02:a8f9:890b:0:e22:f722:cf0b:1


工作原理


在snbiODL-vm中,Opendaylight和运行在snabi容器中的snapi-agent建立了SSL连接来保证通信的安全性。因为Opendaylight和snbi agent运行在同一主机上,这被看作是安全通信。同时,运行在snabiODL-vm、snabi1-vm和snabi2-vm中的所有snapi-agent使用他们自己的发现协议互相发现对方。所有snabi-agnet之间会建立安全的SSL连接,同时被看作是snabi-agent之间的安全通信。并且运行在snabi-agent主机中的其它网络服务可以基于Opendaylight使用snabi-agent已经建议的SSL连接启动安全通信。


相关阅读:

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


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








请到「今天看啥」查看全文