easyOVS

easyOVS 是一个开源的 OpenvSwitch 虚拟交换机管理工具。使用它,用户可以很轻松的对 OpenvSwitch 的网桥、端口等进行查看,同时它深度整合了 OpenStack (支持 Havana 版本到 Juno 版本) 中网络相关的信息,也是一个十分强大的 Neutron 中各个组件的监测工具。

主要功能一览

  • 支持 OpenvSwitch 版本 1.4.6 ~ 2.0.2,OpenStack Havana 到 Juno 版本;
  • 支持操作系统环境报 Ubuntu、Debian、CentOS、Fedora 和 Redhat;
  • 输出结果经过处理,支持彩色输出,十分简洁易读;
  • 开启 OpenStack 支持,可以获取端口的地址、mac、vlan 甚至虚拟机关联的 iptables 规则等信息;
  • 对流表操作语法更加简洁,并支持通过 id 进行删除;
  • 支持 tab 自动补全;
  • 支持通过 -m 'cmd' 来直接运行命令,无需进入 CLI 操作。

安装

安装十分简单,一行代码搞定。

  1. git clone https://github.com/yeasy/easyOVS.git && sudo bash ./easyOVS/util/install.sh

安装成功后,可以使用

  1. sudo easyovs

进入操作界面。

打开 OpenStack 支持

由于 OpenStack 组件信息获取需要有相关的认证信息,因此需要在环境变量或者配置文件中进行指定。

环境变量

可以在用户目录的 .bashrc 文件中加入

  1. export OS_USERNAME=demo
  2. export OS_TENANT_NAME=demo
  3. export OS_PASSWORD=admin
  4. export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/

配置文件

默认的配置文件在 /etc/easyovs.conf,替换为相应的认证信息即可。

  1. [OS]
  2. auth_url = http://127.0.0.1:5000/v2.0
  3. username = demo
  4. password = admin
  5. tenant_name = demo

操作命令

help

显示帮助信息.

list

列出本地的 OpenvSwitch 网桥,例如

  1. EasyOVS> list
  2. s1
  3. Port: s1-eth2 s1 s1-eth1
  4. Interface: s1-eth2 s1 s1-eth1
  5. Controller:ptcp:6634 tcp:127.0.0.1:6633
  6. Fail_Mode: secure
  7. s2
  8. Port: s2 s2-eth3 s2-eth2 s2-eth1
  9. Interface: s2 s2-eth3 s2-eth2 s2-eth1
  10. Controller:tcp:127.0.0.1:6633 ptcp:6635
  11. Fail_Mode: secure
  12. s3
  13. Port: s3-eth1 s3-eth3 s3-eth2 s3
  14. Interface: s3-eth1 s3-eth3 s3-eth2 s3
  15. Controller:ptcp:6636 tcp:127.0.0.1:6633
  16. Fail_Mode: secure

show

EasyOVS> [bridge|default] show

显示某个网桥上的端口信息,例如

  1. EasyOVS> br-int show
  2. br-int
  3. Intf Port Vlan Type vmIP vmMAC
  4. int-br-eth0 15
  5. qvo260209fa-72 11 1 192.168.0.4 fa:16:3e:0f:17:04
  6. qvo583c7038-d3 2 1 192.168.0.2 fa:16:3e:9c:dc:3a
  7. qvo8bf9cba2-3f 9 1 192.168.0.5 fa:16:3e:a2:2f:0e
  8. qvod4de9fe0-6d 8 2 10.0.0.2 fa:16:3e:38:2b:2e
  9. br-int LOCAL internal

dump

EasyOVS> [bridge|default] dump

显示网桥上绑定的流表规则,例如

  1. EasyOVS> s1 dump
  2. ID TAB PKT PRI MATCH ACT
  3. 0 0 0 2400 dl_dst=ff:ff:ff:ff:ff:ff CONTROLLER:65535
  4. 1 0 0 2400 arp CONTROLLER:65535
  5. 2 0 0 2400 dl_type=0x88cc CONTROLLER:65535
  6. 3 0 0 2400 ip,nw_proto=2 CONTROLLER:65535
  7. 4 0 0 801 ip CONTROLLER:65535
  8. 5 0 2 800

addflow

EasyOVS> [bridge|default] addflow [match] actions=[action]

添加一条流到网桥,例如

EasyOVS> br-int addflow priority=3 ip actions=OUTPUT:1

delflow

EasyOVS> [bridge|default] delflow id1 id2...

从网桥删除流,其中 id 信息可以从 dump 的结果中拿到.

set

EasyOVS> bridge set

指定默认网桥,同时进入网桥操作模式,指定后进行操作可以忽略网桥信息。

  1. EasyOVS> set br-int
  2. Set the default bridge to br-int.
  3. EasyOVS: br-int>

exit

EasyOVS> exit

退出网桥模式,或者退出程序.

get

EasyOVS> get

在网桥模式下,获取当前的网桥名称.

  1. EasyOVS: br-int> get
  2. Current default bridge is br-int

ipt

EasyOVS> ipt vm_ip1, vm_ip2...

给定虚拟机 IP 地址,显示与它相关的 iptables 规则。需要启用 OpenStack 支持。

  1. EasyOVS> ipt 192.168.0.2 192.168.0.4
  2. ## IP = 192.168.0.2, port = qvo583c7038-d ##
  3. PKTS SOURCE DESTINATION PROT OTHER
  4. #IN:
  5. 672 all all all state RELATED,ESTABLISHED
  6. 0 all all tcp tcp dpt:22
  7. 0 all all icmp
  8. 0 192.168.0.4 all all
  9. 3 192.168.0.5 all all
  10. 8 10.0.0.2 all all
  11. 85784 192.168.0.3 all udp udp spt:67 dpt:68
  12. #OUT:
  13. 196K all all udp udp spt:68 dpt:67
  14. 86155 all all all state RELATED,ESTABLISHED
  15. 1241 all all all
  16. #SRC_FILTER:
  17. 59163 192.168.0.2 all all MAC FA:16:3E:9C:DC:3A
  18. ## IP = 192.168.0.4, port = qvo260209fa-7 ##
  19. PKTS SOURCE DESTINATION PROT OTHER
  20. #IN:
  21. 73 all all all state RELATED,ESTABLISHED
  22. 0 all all tcp tcp dpt:22
  23. 0 all all icmp
  24. 0 192.168.0.2 all all
  25. 0 192.168.0.5 all all
  26. 0 10.0.0.2 all all
  27. 11331 192.168.0.3 all udp udp spt:67 dpt:68
  28. #OUT:
  29. 30034 all all udp udp spt:68 dpt:67
  30. 11377 all all all state RELATED,ESTABLISHED
  31. 12 all all all
  32. #SRC_FILTER:
  33. 9859 192.168.0.4 all all MAC FA:16:3E:0F:17:04

query

EasyOVS> query port_ip, port_id...

给定某个的端口的 IP 地址,或者部分端口 id 信息,显示该端口相关的完整信息。需要启用 OpenStack 支持。

  1. EasyOVS> query 10.0.0.2,c4493802
  2. ## port_id = f47c62b0-dbd2-4faa-9cdd-8abc886ce08f
  3. status: ACTIVE
  4. name:
  5. allowed_address_pairs: []
  6. admin_state_up: True
  7. network_id: ea3928dc-b1fd-4a1a-940e-82b8c55214e6
  8. tenant_id: 3a55e7b5f5504649a2dfde7147383d02
  9. extra_dhcp_opts: []
  10. binding:vnic_type: normal
  11. device_owner: compute:az_compute
  12. mac_address: fa:16:3e:52:7a:f2
  13. fixed_ips: [{u'subnet_id': u'94bf94c0-6568-4520-aee3-d12b5e472128', u'ip_address': u'10.0.0.2'}]
  14. id: f47c62b0-dbd2-4faa-9cdd-8abc886ce08f
  15. security_groups: [u'7c2b801b-4590-4a1f-9837-1cceb7f6d1d0']
  16. device_id: c3522974-8a08-481c-87b5-fe3822f5c89c
  17. ## port_id = c4493802-4344-42bd-87a6-1b783f88609a
  18. status: ACTIVE
  19. name:
  20. allowed_address_pairs: []
  21. admin_state_up: True
  22. network_id: ea3928dc-b1fd-4a1a-940e-82b8c55214e6
  23. tenant_id: 3a55e7b5f5504649a2dfde7147383d02
  24. extra_dhcp_opts: []
  25. binding:vnic_type: normal
  26. device_owner: compute:az_compute
  27. mac_address: fa:16:3e:94:84:90
  28. fixed_ips: [{u'subnet_id': u'94bf94c0-6568-4520-aee3-d12b5e472128', u'ip_address': u'10.0.0.4'}]
  29. id: c4493802-4344-42bd-87a6-1b783f88609a
  30. security_groups: [u'7c2b801b-4590-4a1f-9837-1cceb7f6d1d0']
  31. device_id: 9365c842-9228-44a6-88ad-33d7389cda5f

sh

EasyOVS> sh cmd

执行系统命令。

  1. EasyOVS> sh ls -l
  2. total 48
  3. drwxr-xr-x. 2 root root 4096 Apr 1 14:34 bin
  4. drwxr-xr-x. 5 root root 4096 Apr 1 14:56 build
  5. drwxr-xr-x. 2 root root 4096 Apr 1 14:56 dist
  6. drwxr-xr-x. 2 root root 4096 Apr 1 14:09 doc
  7. drwxr-xr-x. 4 root root 4096 Apr 1 14:56 easyovs
  8. -rw-r--r--. 1 root root 660 Apr 1 14:56 easyovs.1
  9. drwxr-xr-x. 2 root root 4096 Apr 1 14:56 easyovs.egg-info
  10. -rw-r--r--. 1 root root 2214 Apr 1 14:53 INSTALL
  11. -rw-r--r--. 1 root root 1194 Apr 1 14:53 Makefile
  12. -rw-r--r--. 1 root root 3836 Apr 1 14:53 README.md
  13. -rw-r--r--. 1 root root 1177 Apr 1 14:53 setup.py
  14. drwxr-xr-x. 2 root root 4096 Apr 1 14:09 util

quit

输入 ^d 或者 quit 命令来退出程序。

参数

-h

显示帮助信息。

  1. $ easyovs -h
  2. Usage: easyovs [options]
  3. (type easyovs -h for details)
  4. The easyovs utility creates operation CLI from the command line. It can run
  5. given commands, invoke the EasyOVS CLI, and run tests.
  6. Options:
  7. -h, --help show this help message and exit
  8. -c, --clean clean and exit
  9. -m CMD, --cmd=CMD Run customized commands for tests.
  10. -v VERBOSITY, --verbosity=VERBOSITY
  11. info|warning|critical|error|debug|output
  12. --version

-c

进行环境清理。

-m

不进入 CLI,直接执行给定的命令,显示结果。
例如

  1. $ sudo easyovs -m "show br-int"
  2. Intf Port Vlan Type vmIP vmMAC
  3. qvof47c62b0-db 2 1 10.0.0.2 fa:16:3e:52:7a:f2
  4. qvoc4493802-43 3 1 10.0.0.4 fa:16:3e:94:84:90
  5. br-int LOCAL internal
  6. patch-tun 6 patch

例如

  1. $ sudo easyovs -m 'br-int dump'
  2. ID TAB PKT PRI MATCH ACT
  3. 0 0 30 1 * NORMAL
  4. 1 23 0 0 * drop

-v

设置输出信息的日志级别,包括 debug,info,warn,error 等,方便进行调试。

—version

显示版本信息。