OpenvSwitch的操作命令有若干个,其中比较重要的有

ovs-ovsctl   获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库

ovs-ofctl     操作交换机里的流表

ovsdb-tool  对ovsdb数据库操作,不经过ovsdb-server模块

 前面已经介绍过了ovs-ovsctl命令是对交换机上网桥和端口等信息进行配置的命令。这里首先需要说明一下ovs的概念中 ‘桥’ 这个词的意思就是指交换机。我们说创建一个网桥,其实说的意思就是创建一个交换机。而端口则是指交换机的网口。

查看网桥

使用如下命令能够查看所有的网桥的信息。记住这是我们学会的第一个命令,也是使用频率最高的命令。

[root@localhost openvswitch-2.8.1]# ovs-vsctl show
b9da3f20-b407-40fa-8944-df970f4ca3ad    该主机的id
    ovs_version: "2.8.1"    版本信息

因为这是一个刚装好ovs的机器,所以还没有任何网桥信息,但是还是有一些信息的。比如这一串数字指的是该主机的id,只在连接了SDN控制器之后才有作用;还有一个交换机的版本信息,这里的版本是2.5.5。

添加网桥

可以很方便的创建网桥,也就是交换机。使用如下命令创建一个名字叫着 br-test的网桥。

[root@localhost ~]# ovs-vsctl add-br  br-test

当创建好网桥之后用第一个学会的命令来看看创建好的网桥

b9da3f20-b407-40fa-8944-df970f4ca3ad
    Bridge br-test
        Port br-test
            Interface br-test
                type: internal
    ovs_version: "2.8.1"

可以看到已经有创建好的网桥br-test了,Bridge br-test 指的是网桥br-test,那么在这个交换机中只有一个网口,是的,这个网口叫着port,即port br-test。为什么我们只创建了网桥并没有创建端口这里却有一个呢?其实这个端口就是常见的环回口。在我们的电脑上都有一个叫着localhost的端口,交换机中也会有一个和交换机同名的网口,都是指环回口。

创建port

在上面创建好一个网桥之后默认有一个同名的port,使用下面的命令可以继续添加port。格式是:ovs-vsctl add-port 网桥名  端口名 。这里端口需要是存在机器上的网卡名。

我的机器上的网卡的信息如下

[root@localhost ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:58:d0:b7:bc  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.220  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::448f:7a09:b3fa:48e0  prefixlen 64  scopeid 0x20<link>
        inet6 2409:8a0c:1c:3050:7c6:7714:febe:63f6  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:c5:19:99  txqueuelen 1000  (Ethernet)
        RX packets 216953  bytes 302976430 (288.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 41861  bytes 4911746 (4.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 108  bytes 9847 (9.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 108  bytes 9847 (9.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

因为我的机器上有网卡  ens33  所有可以使用下面的命令向网桥br-test上添加port  ens33。如果想在自己的机器上做这个实验要把网卡替换成你机器的真实网卡。

[root@localhost ~]# ovs-vsctl add-port br-test ens33
[root@localhost ~]# ovs-vsctl add-port br-test ens33

删除port

能添加一个port,就能删除这个port。这是ovs的最基本的操作。

 注意:如果删除port时不指明名字,那么将会删除全部的port,小心这个操作。

删除网桥

使用如下命令删除一个网桥。

[root@localhost ~]# ovs-vsctl del-br br-test

值得注意的是:删除网桥时如果网桥上有很多端口,那么端口也会被一并删除。这个很好理解 

再次查看网桥信息

[root@localhost ~]# ovs-vsctl show
b9da3f20-b407-40fa-8944-df970f4ca3ad
    ovs_version: "2.8.1"

网桥连接控制器

这五个命令是ovs最基本的操作命令,下面还有一个连接控制器的命令是为下一篇打好基础。

ovs交换作为SDN交换机连接到SDN控制器上才能发挥最大的效能。连接控制器的命令如下

[root@localhost ~]# ovs-vsctl add-br br-test
[root@localhost ~]# ovs-vsctl set-controller br-test tcp:172.171.82.31:6633
[root@localhost ~]# ovs-vsctl show
b9da3f20-b407-40fa-8944-df970f4ca3ad
    Bridge br-test
        Controller "tcp:172.171.82.31:6633"
        Port br-test
            Interface br-test
                type: internal
    ovs_version: "2.8.1"

查看此时网桥的配置信息,在Bridge下出现了一个Controller ,控制器的IP是172.171.82.31,端口是6633,下面还有一个连接成功的状态:is_connected=True。

12-19 23:44