本篇内容介绍了“openvswitch的原理和常用命令介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一.Openvswitch工作原理
openvSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由 Nicira Networks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。Open vSwitch支持多种linux 虚拟化技术,包括Xen/XenServer, KVM和VirtualBox。
openvswitch是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer,KVM以及virtualBox多种虚拟化技术。在这种虚拟化的环境中,一个虚拟交换机主要有两个作用:传递虚拟机之间的流量,以及实现虚拟机和外界网络的通信。
内核模块实现了多个“数据路径”(类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作)。
1.OpenvSwitch的组成###
ovs-vswitchd:OVS守护进程是,OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。它和上层 controller 通信遵从 OPENFLOW 协议,它与 ovsdb-server 通信使用 OVSDB 协议,它和内核模块通过netlink通信,它支持多个独立的 datapath(网桥),它通过更改flow table 实现了绑定和VLAN等功能。
ovsdb-server:轻量级的数据库服务,主要保存了整个OVS 的配置信息,包括接口啊,交换内容,VLAN啊等等。ovs-vswitchd 会根据数据库中的配置信息工作。它于 manager 和 ovs-vswitchd 交换信息使用了OVSDB(JSON-RPC)的方式。
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
ovs-vsctl:主要是获取或者更改ovs-vswitchd 的配置信息,此工具操作的时候会更新ovsdb-server 中的数据库。
ovs-appctl:主要是向OVS 守护进程发送命令的,一般用不上。
ovsdbmonitor:GUI 工具来显示ovsdb-server 中数据信息。
ovs-controller:一个简单的OpenFlow 控制器
ovs-ofctl:用来控制OVS 作为OpenFlow 交换机工作时候的流表内容。
2. OpenvSwitch的工作流程###
1.VM实例 instance 产生一个数据包并发送至实例内的虚拟网络接口 VNIC,图中就是 instance 中的 eth0.
2.这个数据包会传送到物理机上的VNIC接口,如图就是vnet接口.
3.数据包从 vnet NIC 出来,到达桥(虚拟交换机) br100 上.
4.数据包经过交换机的处理,从物理节点上的物理接口发出,如图中物理机上的 eth0 .
5.数据包从 eth0 出去的时候,是按照物理节点上的路由以及默认网关操作的,这个时候该数 据包其实已经不受你的控制了.
注:一般 L2 switch 连接 eth0 的这个口是一个 trunk 口, 因为虚拟机对应的 VNET 往往会设置 VLAN TAG, 可以通过对虚拟机对应的 vnet 打 VALN TAG 来控制虚拟机的网络广播域. 如果跑多个虚拟机的话, 多个虚拟机对应的 vnet 可以设置不同的 vlan tag, 那么这些虚拟机的数据包从 eth0(4)出去的时候, 会带上TAG标记. 这样也就必须是 trunk 口才行。
3.OpenvSwitch简单应用实例###
通过以下命令即可实现:
root[@localhost](https://my.oschina.net/u/570656):~# ovs-vsctl add-br br0 root[@localhost](https://my.oschina.net/u/570656):~# ovs-vsctl add-port br0 eth0 root[@localhost](https://my.oschina.net/u/570656):~# ovs-vsctl add-port br0 eth2
4.Openvswitch常见操作
添加网桥:
ovs-vsctl add-br br0
列出所有网桥:
ovs-vsctl list-br
判断网桥是否存在:
ovs-vsctl br-exists br0
将物理网卡挂载到网桥上:
ovs-vsctl add-port br0 eth0
列出网桥中的所有端口:
ovs-vsctl list-ports br0
列出所有挂载到网卡的网桥:
ovs-vsctl port-to-br eth0
查看ovs的网络状态:
ovs-vsctl show
删除网桥上已经挂载的网口:
ovs-vsctl del-port br0 eth0
删除网桥:
ovs-vsctl del-br br0
设置控制器:
ovs-vsctl set-controller br0 tcp:ip:6633
删除控制器:
ovs-vsctl del-controller br0
设置支持OpenFlow Version 1.3:
ovs-vsctl set bridge br0 protocols=OpenFlow13
删除OpenFlow支持设置:
ovs-vsctl clear bridge br0 protocols
设置vlan标签:
ovs-vsctl add-port br0 vlan3 tag=3 -- set interface vlan3 type=internal
删除vlan标签:
ovs-vsctl del-port br0 vlan3
查询 VLAN:
ovs-vsctl show ifconfig vlan3
查看网桥上所有交换机端口的状态:
ovs-ofctl dump-ports br0
查看网桥上所有的流规则:
ovs-ofctl dump-flows br0
查看ovs的版本:
ovs-ofctl -V
“openvswitch的原理和常用命令介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!