本文基于SDN控制器和基于Openflow的交换机之间的OpenFlow和OVSDB连接,并提供有关连接生命周期的详细信息。 我们将使用开源SDN控制器, 即 Opendaylight(ODL)碳释放 和Openflow虚拟交换机, 即 OpenVswitch(OVS)版本2.6.0 来描述OVSDB和Openflow连接。
SDN控制器通过两种类型的连接管理底层Openflow交换机:
- OVSDB
- OPENFLOW
OVSDB和Openflow连接
OVSDB是OVS数据库管理协议,其定义OVS数据库的模式和控制器与交换机之间通信的规范。 SDN控制器使用此协议通过使用预期配置填充其数据库来控制OVS交换机。
通常,SDN控制器以被动模式运行,以分别从端口6640和6653上的OVS监听OVSDB和Openflow连接。
所以首先让我们启动ODL控制器,你可以从 这里 下载 。 将系统中的JAVA_HOME环境变量设置为最新的Java版本是一个先决条件。 运行ODL是如此简单,只需下面的步骤:
- 从 这里 下载ODL分发 。
- 解压缩ODL分发。
- 输入 下载包顶层目录下 的 'bin' 子目录。
- 运行以下命令让您的控制器:karaf
以下是执行上述步骤的图像:
由于我们需要管理OVSDB和Openflow连接的OVS交换机,因此需要将Openflow和OVSDB插件安装到ODL中。 这是要做的 这可以做到如下所示:
一旦安装了Openflow和OVSDB插件,ODL将分别开始在6653和6640端口监听Openflow和OVSDB连接。 这可以通过运行以下命令在控制器检查:
netstat -a | grep 6653
netstat -a | grep 6640
注意,在执行任何OVS命令之前,OVS开关应该已经在运行。 要在Ubuntu上运行OVS,请使用root权限运行以下命令:
sudo /etc/init.d/openvswitch-switch start
它可作为服务使用,因此您也可以检查其状态。
sudo /etc/init.d/openvswitch-switch status
一旦OVS正在运行,您也可以执行其CLI命令。 例如,
sudo ovs-vsctl show
以下是上述命令执行输出的图像:
在OVS侧,运行以下命令以启动与控制器的OVSDB连接:
ovs-vsctl set-manager tcp:<controller-IP>:6640
要确认连接建立,可以运行以下命令,显示输出中的 “is_connected” 标志设置为true。
sudo ovs-vsctl show
Open Bridge连接是在桥上进行的,因此您可以在OVS上创建网桥,也可以通过OVSDB连接将配置发送到OVS,也可以在OVS上创建网桥。 在OVS中的桥上,可以运行以下命令将网桥连接到ODL, 该 ODL 建立在ODL和OVS之间建立Openflow连接。
ovs-vsctl set-controller <bridge name> tcp:<controller-IP>:6653
请查看下面的连接详情。
从OVS方面看,OVSDB和Openflow连接已经完成,并且可以通过运行以下命令在ODL侧验证相同的。
netstat -a | grep 6653
netstat -a | grep 6640
检查以下图像输出确认连接的命令ESTABLISHED状态:
由于OVSDB和Openflow连接 基于TCP,因此可以通过Wireshark软件轻松捕获ODL和OVS之间交换的消息。 检查下面的数据包捕获图像,显示在连接设置期间交换的消息。
在Wireshark数据包捕获日志中,您可以看到在连接设置期间在控制器和OVS之间交换的各种Openflow消息。
正如您在连接设置期间看到的,ODL发送了FEATURES_REQUEST Openflow消息,作为响应,ODL从OVS接收到FEATURES_REPLY。 在FEATURES_REPLY消息中,ODL获取OVS网桥的数据路径ID(即唯一标识符),它负责转发(基于由OFL配置的Openflow规则)连接到OVS端口的虚拟机之间的流量。
在OVS侧,可以运行以下命令来显示桥的详细信息。
sudo ovs-ofctl show br-int -OOpenFlow13
检查下面的图像输出命令:
在这里,您可以看到FEATURE_REPLY显示OVS上桥接器的数据路径ID(十六进制格式)。
即使ODL具有仪表板DLUX功能,它可以通过url http:// localhost:8181 / index.html 向ODL控制器提供GUI Web界面 ,ODL用户可以登录(默认用户名和密码为“admin”),并检查网络拓扑ODL正在运行的系统的浏览器。 检查下面的图像相同。
在上图中,您可以看到OVS交换机显示在由ODL控制器管理的网络拓扑中。 既然,我们只连接了一个交换机,这就是为什么只显示一个Openflow节点。 这里显示OVS开关,其数据路径ID为十进制格式。
要使用ODL删除Openflow连接,可以在OVS下运行以下命令:
ovs-vsctl del-controller <bridge name>
要使用ODL删除OVSDB连接,可以在OVS下运行以下命令:
ovs-vsctl del-manager
连接被删除后,当建立连接时,'is_conncted'标志为'true',将从OVS的'ovs-vsctl show'CLI命令的输出中消失。
检查以下图像,从OVS侧启动OpenFlow和OVSDB连接删除:
对于调试和故障排除,您可以检查ODL和OVS中维护的日志文件。
ODL记录路径
当您解压缩ODL分发(您已下载)并且运行' karaf' 二进制可执行文件时, 将创建包含 karaf.log 文件的 “ log” 子目录 ,其通用路径为: 〜/ distribution-karaf- <version -number> - <release name> / data / log。
检查以下图像的ODL端日志文件。
OVS记录路径
当OVS运行时,它将生成一个名为“ovsdb-server.log”的OVSDB日志文件和名为“ovs-vswitchd.log”的Openflow日志文件,路径为:
/var/log/openvswitch
检查OVSDB(ovsdb-server.log)和OVS的Openflow模块(ovs-vswitchd.log)的OVS端日志文件。
+===+
This article is co-authored by Tarun Thakur.
参考文献: