SDN实验4:开源控制器实践——OpenDaylight
实验目的
- 能够独立完成OpenDaylight控制器的安装配置
- 能够使用Postman工具调用OpenDaylight API接口下发流表
实验要求
(一)基本要求
- 配置JAVA环境,下载并解压安装OpenDaylight,版本选择Carbon 或 Beryllium
- 下载并解压安装Postman
- 利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器
通过sudo mn --topo=single,3 --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
搭建拓扑后,执行pingall,并在之前运行好的ODL中查看拓扑,如下图所示:
Postman下发流表
通过Postman请求Restful API,进行流表下发,URL和json文件如下所示:
URL:
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1
json文件
{
"flow": [
{
"id": "1",
"match": {
"in-port": "1",
"ethernet-match": {
"ethernet-type": {
"type": "0x0800"
}
},
"ipv4-destination": "10.0.0.3/32"
},
"instructions": {
"instruction": [
{
"order": "0",
"apply-actions": {
"action": [
{
"order": "0",
"drop-action": {}
}
]
}
}
]
},
"flow-name": "flow1",
"priority": "65535",
"hard-timeout": "10",
"cookie": "2",
"table_id": "0"
}
]
}
先执行h1 ping h3
,再通过send按钮下发流表,可以看到json文件中的配置生效:
进阶要求
- api文档
- 获取流表状态数量,新增修改和删除流表
- 获取特定交换机端口的状态
- 获取指定交换机信息
个人总结
遇到的问题和解决方案
- 问题一
运行了sudo mn --topo single,3 --mac --switch ovsk --controller remote,ip=127.0.0.1,port=6633,protocols=Openflow13
后,h1无法ping通h3
解决方法:参考链接,执行命令./pox/pox.py forwarding.hub
后即可ping通h1和h3主机
- 问题二
Postman无法send request,如图所示报错:
解决方法:没有打开ODL,要打开ODL才能请求成功。搜到的通常解决方法是Setting-Proxy-去掉勾选的Use the system proxy,但由于当时都没开ODL所以效果不明显。
- 问题三
send之后ping命令丝毫没有受到影响,一直在进行成功的ping命令
解决方法:之后重启了虚拟机,再来一次,这个问题就自己消失了
- 问题四
重新尝试进行实验时,pox报错:
解决方法:停止ODL后重新尝试即可
- 问题五
- 如果点击send后,出现的执行结果出现error的,而且error的提示信息里有protocol的,可以考虑检查一下URL是不是不对
个人感想
这次作业做了比较久,一些没有见过的报错,以及一些预料之外的问题,让整个实验的时间都被延长了。在开始实验之前,环境的配置也花了一定的时间,实验后期虚拟机频繁出现未响应的现象,但好像还没有什么解决方法。在实验过程中,对Postman通过json文件下发流表的过程获得了更全面的了解。(除了耐心的各种尝试之外,还是需要注重经验的积累,不然容易花很多时间在处理报错和debug上)