【sdn】OpenDaylight+OVS+docker搭建sdn网络(3)

一、总述

前两次已经完成了docker镜像的生成以及OVS和docker之间的连接,本次完成ODL与OVS的连接,最终可以在ODL看到拓扑。

主要参考的文章如下:

实现两个ovs交换机相连_ovs-vsctl set interface-CSDN博客

如何实现OpenDaylight连接和控制OVS_服务器如何 连接ovs-CSDN博客

Docker 节点在 ODL 控制下的 OVS 网桥连接_ovs链接odl是怎么链接的-CSDN博客

二、下载并安装ODL,打开ODL

这个在CSDN上教程很多,挑选一个就行。

需要注意运行ODL(在/bin下运行/karaf后),在浏览器打开的网站的ip,使用ifconfig查看,一般是196.xxxx这样的,不应该是127.0.0.1这个地址,这个地址也可以打开ODL并且查看交换机,但是后续在拓扑里不显示主机,目前我还不知道原因。

三、连接ODL和OVS交换机
1.设置协议版本
ovs-vsctl set bridge (OVS的网桥名) protocols=OpenFlow13
2.连接网桥
 ovs-vsctl set-controller (OVS的网桥名) tcp:(你的ip地址):6633

此时我们就可以在ODL的topology页面看到交换机,但是无法看到相连的主机。

Nodes页面可以看到交换机及其相连的端口。

此时我们ping不通原来可以ping通的两台docker主机了,这是因为没有下发流表的缘故。

3.下发流表

形如

ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:2
  1. br0:OVS的网桥名
  2. priority:优先级,优先级越高越先传输
  3. in_port:进口,这里的进出的1和2口应该在ODL的Nodes页面查看端口号具体是多少,比如我设置时的两个端口就分别是6和7

需要注意三点:

  1. 如果在前面设置了协议版本,在命令的结尾都要添加
    -O openflow13
    

    不然会报错

  2. 如果想让两个主机导通,应该下发两条流表,比如
    ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:2
    ovs-ofctl add-flow br0 priority=12,in_port=2,actions=output:1
  3. 如果下发的流表,比如进口为1,但是出口有2和3,不可以一条一条的下发流表,他们会覆盖。比如
#错误示范
ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:2
ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:3
#正确示范
ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:2,3
4.ping主机

此时两台docker主机之间就可以ping通了,并且ping通之后在拓扑页面就可以显示主机了。如果需要连接多台OVS交换机,请参考我上面列出的第一篇文章,再重复一遍下面的步骤。

四、效果展示

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值