logo资料库

openvswitch完全使用手册.docx

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
OpenvSwitch完全使用手册
本文主要参考 
1 什么是OpenvSwitch
2 OpenvSwitch的组成
3 OpenvSwitch和其他vswitch
4 概念及工作流程
4.1 vswitch、Bridge、Datapath
网桥的工作原理
OVS中的bridge
6 OVS简单应用实例
6.1 创建物理机到物理机的网络拓扑
6.2 创建虚拟机到虚拟机的网络拓扑
7.Misc
7.1 查表
7.2 关于 Brdige 及 Port
7.3 关于Controller
7.4 关于 STP (Spanning Tree Protocol)
7.5 关于 Openflow Version
7.6 关于 VLAN
7.7 关于 GRE Tunnel
7.8 关于 Dump flows
7.9 XenServer 开启 OpenvSwitch 方式
7.10 关于 Log
7.11 关于 Fallback
7.12 关于 sFlow
7.13关于 NetFlow
7.14 设置 Out-of-band 和 in-band
7.15 关于 ssl
7.16 关于 SPAN
7.17 关于 Group Table
7.18 关于 VXLAN
7.19 关于 OVSDB Manager
7.20 OpenFlow Trace
7.21 其它
OpenvSwitch 完全使用手册 2015 年 07 月 01 日 10:17:22 阅读数:46312 本文主要参考 Overview of functionality and components 以及 Frequently Asked Ques tions 以及结合自己的理解。 http://sdnhub.cn/index.php/openv-switch-full-guide/ 1 什么是 OpenvSwitch OpenvSwitch,简称 OVS 是一个虚拟交换软件,主要用于虚拟机 VM 环境,作为一个虚拟交换 机,支持 Xen/XenServer, KVM, and VirtualBox 多种虚拟化技术。OpenvSwitch 还支持多 个物理机的分布式环境。 在这种某一台物理机器的虚拟化环境中,一个虚拟交换机(vswitch)主要有如下两个作用:  传递虚拟机 VM 之间的流量  以及实现 VM 和外界网络的通信。 如下图所示:
整个 OVS 代码用 C 写的。目前有以下功能:  Standard 802.1Q VLAN model with trunk and access ports  NIC bonding with or without LACP on upstream switch  NetFlow, sFlow(R), and mirroring for increased visibility  QoS (Quality of Service) configuration, plus policing  GRE, GRE over IPSEC, VXLAN, and LISP tunneling  802.1ag connectivity fault management  OpenFlow 1.0 plus numerous extensions  Transactional configuration database with C and Python bindings  High-performance forwarding using a Linux kernel module 2 OpenvSwitch 的组成 OVS 的核心组件包括 ovsdb-server,ovs-vswitchd,ovs kernel module。如下图所示:
运行原理: 内核模块实现了多个“数据路径(DataPath)”(类似于网桥),每个都可以有多个“vports” (类似于桥内的端口)。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表 中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发 到另一个 vport。当一个数据包到达一个 vport,内核模块所做的处理是提取其流的关键信息并 在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数 据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后遇到 相同类型的数据包可以在内核中执行操作)。细节如下图所示:
除了核心组件,还包括一些管理工具,详细介绍如下:  ovs-vswitchd:OVS 守护进程是 OVS 的核心部件,实现交换功能,和 Linux 内核兼容模块一 起,实现基于流的交换(flow-based switching)。它和上层 controller 通信遵从 OPENFL OW 协议,它与 ovsdb-server 通信使用 OVSDB 协议,它和内核模块通过 netlink 通信,它 支持多个独立的 datapath(网桥),它通过更改 flow table 实现了绑定和 VLAN 等功能。  ovsdb-server:OVS 轻量级的数据库服务器,用于整个 OVS 的配置信息,包括接口,交换内 容,VLAN 等等。ovs-vswitchd 根据数据库中的配置信息工作。它于 manager 和 ovs-vswi   tchd 交换信息使用了 OVSDB(JSON-RPC)的方式。 ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。 ovs-vsctl:主要是获取或者更改 ovs-vswitchd 的配置信息,此工具操作的时候会更新 ovsdb- server 中的数据库。  ovs-appctl:主要是向 OVS 守护进程发送命令的,一般用不上。 a utility that sends com mands to running Open vSwitch daemons (ovs-vswitchd)
 ovsdbmonitor:GUI 工具来显示 ovsdb-server 中数据信息。(Ubuntu 下是可以使用 apt-ge       t 安装,可以远程获取 OVS 数据库和 OpenFlow 的流表) ovs-controller:一个简单的 OpenFlow 控制器 ovs-ofctl:用来控制 OVS 作为 OpenFlow 交换机工作时候的流表内容。 ovs-pki:OpenFlow 交换机创建和管理公钥框架; ovs-tcpundump:tcpdump 的补丁,解析 OpenFlow 的消息; brocompat.ko : Linux bridge compatibility module openvswitch.ko : Open vSwitch switching datapath 一些用用的 OVS 命令示例: sudo ovs-vsctl show sudo ovs-vsctl add-br mybridge sudo ovs-vsctl del-br mybridge sudo ovs-vsctl add-port mybridge port-name sudo ovs-vsctl del-port mybridge port-name sudo ovs-vsctl list Bridge/Port/Interface/... sudo ovs-appctl fdb/show mybridge sudo ovs-ofctl show mybridge sudo ovs-ofctl dump-flows mybridge sudo ovs-ofctl add-flow mybridge dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2,i n_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2,actions=output:6 sudo ovs-ofctl del-flows mybridge dl_src=02:a2:a2:a2:a2:a2,dl_dst=02:b2:b2:b2:b2:b2, in_port=2,dl_type=0x0800,nw_src=10.0.0.1,nw_dst=10.0.0.2 sudo ovs-ofctl add-flow dp0 in_port=2,actions=output:6 # This will delete all the flow entries in the flow table sudo ovs-ofctl del-flows mybridge 3 OpenvSwitch 和其他 vswitch 这里其他的 vswitch,包括 VMware vNetwork distributed switch 以及思科的 Cisco Nexus 1000V。
VMware vNetwork distributed switch 以及思科的 Cisco Nexus 1000V 这种虚拟交换机提 供的是一个集中式的控制方式,。而 OVS 则是一个独立的 vswitch,他运行在每个实现虚拟化 的物理机器上,并提供远程管理。 OVS 提供了两种在虚拟化环境中远程管理的协议:  一个是 OpenFlow,通过流表来管理交换机的行为,  一个是 OVSDB management protocol,用来暴露 sietch 的 port 状态。 4 概念及工作流程 4.1 vswitch、Bridge、Datapath 在网络中,交换机和桥都是同一个概念,OVS 实现了一个虚拟机的以太交换机,换句话说,OV S 也就是实现了一个以太桥。那么,在 OVS 中,给一个交换机,或者说一个桥,用了一个专业 的名词,叫做 DataPath! 要了解 OVS 如何工作,首先需要知道桥的概念: 网桥也叫做桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个 LAN 连接,根据 MAC 地址来转发帧,可以看成一个“低层的路由器”(路由器工作在网络层,根据 IP 地质进行 转发)。 网桥的工作原理 网桥处理包遵循以下几条规则:  在一个接口上接收到的包不会再往那个接口上发送此包。  每个接收到的包都要学习其源 MAC 地址。  如果数据包是多播或者广播包(通过 2 层 MAC 地址确定)则要向接收端口以外的所有端口转发, 如果上层协议感兴趣,则还会递交上层处理。  如果数据包的地址不能再 CAM 表中找到,则向接收端口以外的其他端口转发。
 如果 CAM 表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送。 注意,网桥是以混杂模式工作的。关于网桥更多,请查阅相关资料。 OVS 中的 bridge 上面,说到,一个桥就是一个交换机。例如,在 OVS 中: root@localhost:~# ovs-vsctl add-br br0 root@localhost:~# ifconfig br0 Link encap:Ethernet HWaddr 1a:09:56:ea:0b:49 br0 inet6 addr: fe80::1809:56ff:feea:b49/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1584 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:316502 (316.5 KB) TX bytes:468 (468.0 B) 当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名 字就是网桥的名称(br-int),之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机) 功能。有了这个交换机以后,还需要为这个交换机增加端口(port),一个端口,就是一个物理网 卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了。 root@localhost:~# ovs-vsctl add-port br0 port 这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须 是以混杂模式工作,工作在链路层,处理 2 层的帧,所以这个 port 就不需要配置 IP 了。(你没 见过哪个交换的端口有 IP 的吧) 那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以 telnet 到交换机上进行配 置吧,那么在 OVS 中创建的虚拟交换机有木有这种呢,有的!上面既然创建交换机 brname 的 时候产生了一个虚拟网口 br-int,那么,你给这个虚拟网卡配置了 IP 以后,就相当于给交换机 的管理接口配置了 IP,此时一个正常的虚拟交换机就搞定了。 root@localhost:~# ip address add 192.168.1.1/24 dev br0
最后,我们来看看一个 br 的具体信息: root@localhost:~# ovs-vsctl show bc12c8d2-6900-42dd-9c1c-30e8ecb99a1b Bridge "br0" Port "eth0" Interface "eth0" Port "br0" Interface "br0" type: internal ovs_version: "1.4.0+build0" 首先,这里显示了一个名为 br0 的桥(交换机),这个交换机有两个接口,一个是 eth0,一个是 br0,上面说到,创建桥的时候会创建一个和桥名字一样的接口,并自动作为该桥的一个端口, 那么这个虚拟接口的作用,一方面是可以作为交换机的管理端口,另一方面也是基于这个虚拟接 口,实现了桥的功能。 #### OpenvSwitch 的典型工作流程 这一部分以一个简单的例子,说明在虚拟化环境中 OpenvSwitch 的典型工作流程。 前面已经说到,OVS 主要是用来在虚拟化环境中。实现虚拟机之间通信以及一个虚拟机和外网 之间通信,如下是一个典型的结构图: 那么,通常情况下的工作流程如下:
分享到:
收藏