2.OVSDB的网桥和端口管理

实验原理

在虚拟交换机领域,Open vSwitch作为非官方的标准已获得产业界的高度关注。一般来讲,控制器及应用可以通过OpenFlow和OVSDB两种南向协议方式与Open vSwitch交换机进行交互,其中通过OpenFlow来引导数据包流的转发,通过OVSDB可以进行端口和隧道的增加、更新以及删除,这些隧道和端口提供流转发的管道。因此,OVSDB在Open vSwitch作为一个重要的事实标准,OpenDaylight系统如何高效地支持OVSDB也变得非常重要。OpenDaylight的OVSDB子项目实现了OVSDB管理协议,该协议允许控制器进行虚拟交换机的南向配置。OVSDB协议包含一个OVSDB库和各种插件用法,该协议使用JSON/RPC调用的方式来操作内置OVSDB的物理或虚拟交换机。
OVSDB子项目主要包含Northbound模块、plugin模块和OVSDB Library模块,其中北向Northbound模块可供外部APP调用,南向OVSDB Library通过OVSDB协议与外部通信,进行OVSDB的管理,具体系统架构如下图所示。
1.png
Library模块主要包含message、notation、impl、jsonrpc和schema等程序包,其中jsonrpc主要提供兼容rpc1.0的解码器,能够从TCP流解码JSON消息;notation主要包含OVSDB MAP、ResultSet等定义以及Json串行化;schema提供OVSDB数据库模式的表示。

Plugin模块主要包含api、impl、internal和error等程序包,其中api程序包主要提供OVSDB的连接、增删改查等服务,impl包中的类是其接口的实现。

Northbound模块主要包含五大类,分别是DatabaseResource、NodeResource、OvsdbNorthboundV2、OvsdbNorthboundV3、RowResource、TableResource。以类OvsdbNorthboundV2为例进行说明,该类提供OVSDB北向 REST API接口,用于创建、读取、更新和删除任一OVSDB表中的记录。创建OVSDB Row时,body请求体中的JSON格式与OVSDB JSON-PRC消息相同。northbound及其功能描述如下表所示。
2.png
用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。而Postman不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送GET、POST、PUT、DENLETE等几乎所有类型的HTTP请求。Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。

实验拓扑

拓扑.png

创建实验

步骤1 登录OpenDaylight控制器,确保服务已经启动成功,由于OpenDaylight组件过于庞大,所以启动比较慢,需等待一段时间,使用命令:

netstat -an|grep 6633 #netstat -an:查看端口对应的应用

查看端口是否处于监听状态:
3.png
步骤2 在保证控制6633端口处于监听状态后,登录交换机,查看交换机与控制器连接情况。执行以下命令:

ovs-vsctl show

4.png
上图中controller下方显示“is_connected:true”则表明连接成功。
步骤3 登录控制器,查看控制器IP,如下图所示。
5.png
步骤4 登录交换机,连接控制器。原本控制器与交换机之间的连接是通过OpenFlow协议的,在此基于OVSDB协议创建一个新的连接,其中20.0.1.3是控制器IP地址,6640是OVSDB协议对应的侦听端口。执行如下命令:

ovs-vsctl set-manager tcp:20.0.1.3:6640

连接成功后在manager下面会有“is_conneted:true”:
6.png

创建网桥

步骤1 登录控制器,单击Applications Menu—>Development—>Postman打开Postman应用,如下图所示。
7.png
步骤2 在创建网桥前,需要先获取交换机节点信息,输入URL http://[controller ip]:8282/ovsdb/nb/v3/node

请求类型选择GET,单击Send按钮发送GET请求。访问一个页面需要输入用户名和密码,同样,用Postman发送请求也需要一定的权限。单击Authorization,type选择Basic Auth。输入用户名和密码,用户名和密码都是admin。Body中返回的就是交换机节点信息,此处获取到的节点信息在后面会用到,如下图所示。
8.png
步骤3 发送POST请求创建网桥。输入URL http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/bridge/rows,其中“20.0.1.4:59141”

就是前面获取到的交换机节点信息,如下图所示。
9.png
单击Headers,输入用户名和密码生成HTTP认证头部,POST请求还需要添加头部指明Body格式,如图所示,手动输入Content-Type且值为application/json,如下图所示。
10.png
步骤4 单击Body,Body格式选择raw—>JSON(application/json)。Body内容如下所示,创建一个名为br0的网桥,并且与控制器通过OpenFlow13进行连接。

Body内容如下所示,创建一个名为br0的网桥,并且与控制器通过OpenFlow13进行连接。单击Send按钮发送请求。

{
   "row": {
    "Bridge": {
      "name": "br0",
        "datapath_type": "OpenFlow13"
        }
    }
}

11.png
步骤5 登录交换机,确认网桥创建成功。执行以下命令:

ovs-vsctl show

12.png

获取网桥uuid

步骤1 URL保持不变,依旧是http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/bridge/rows ,将请求类型改为GET。输入用户名和密码生成HTTP认证头部,如下图所示。
13.png
步骤2 单击Send按钮发送GET请求,STATUS显示请求发送成功,并返回网桥信息,下图中两个uuid分别是br0和br-sw的。单击uuid所在行左侧的数字可以展开/收起网桥的详细信息,方便查看,如下图所示。
14.png

创建端口

步骤1 发送POST请求创建端口,输入URL http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/port/rows。
单击Basic Auth,输入用户名和密码生成HTTP认证头部,并且添加Content-Type为application/json,如下图所示。
15.png
步骤2 将请求类型改为POST,输入Body内容如下所示,其中parent_uuid是网桥的uuid,这里所用的是br0的uuid,那么端口就会添加到br0网桥上。

{
   "parent_uuid": "2dd82e5e-922d-43c8-80d9-7917161acfd2",
    "row": {
      "Port": {
        "name": "port0"  
        }
    }
}

16.png
单击Send按钮发送请求,STATUS显示请求发送成功,端口已经创建,如下图所示。
17.png
步骤3 登录交换机,确认交换机端口是否创建成功。执行以下命令:

ovs-vsctl show

18.png

获取端口uuid

步骤1 发送GET请求获取端口的uuid。输入URL http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/port/rows 。在Basic Auth页面输入用户名和密码生成HTTP认证头部,如下图所示。
19.png
步骤2 单击Send按钮发送GET请求,STATUS显示请求发送成功,并且展示出获取到的端口信息。因为获取的是所有网桥的端口所以比较多,如下图所示,标注出来的是port0的uuid。获取到的信息完全展开比较多,可以直接在页面中搜索端口名称“port0”,然后往上翻找该端口的uuid,如下图所示。
20.png

删除端口

步骤1 发送DELETE请求删除端口。输入URL http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/port/rows/2d47e410-fe0d-4f63-a1c4-8121152235f8。其中“2d47e410-fe0d-4f63-a1c4-8121152235f8 ”就是port0端口的uuid,如下图所示。
21.png
步骤2 单击Send按钮发送DELETE请求,STATUS显示请求发送成功但是没有返回信息,如下图所示。
22.png
步骤3 登录交换机,确认port0端口删除成功。

ovs-vsctl show

23.png

删除网桥

步骤1 发送DELETE请求删除网桥。输入URL http://20.0.1.3:8282/ovsdb/nb/v2/node/OVS/20.0.1.4:59141/tables/bridge/rows/2dd82e5e-922d-43c8-80d9-7917161acfd2。其中“2dd82e5e-922d-43c8-80d9-7917161acfd2” 就是br0网桥的uuid,如下图所示。
24.png
步骤2 单击Send按钮发送DELETE请求,STATUS显示请求发送成功但是没有返回信息,如下图所示。
25.png
步骤3 登录交换机,确认网桥br0删除成功。执行以下命令:

ovs-vsctl show

26.png