OpenvSwitch完全使用手册.docx

上传人:b****5 文档编号:29715488 上传时间:2023-07-26 格式:DOCX 页数:18 大小:635.60KB
下载 相关 举报
OpenvSwitch完全使用手册.docx_第1页
第1页 / 共18页
OpenvSwitch完全使用手册.docx_第2页
第2页 / 共18页
OpenvSwitch完全使用手册.docx_第3页
第3页 / 共18页
OpenvSwitch完全使用手册.docx_第4页
第4页 / 共18页
OpenvSwitch完全使用手册.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

OpenvSwitch完全使用手册.docx

《OpenvSwitch完全使用手册.docx》由会员分享,可在线阅读,更多相关《OpenvSwitch完全使用手册.docx(18页珍藏版)》请在冰豆网上搜索。

OpenvSwitch完全使用手册.docx

OpenvSwitch完全使用手册

OpenvSwitch完全使用手册

本文主要参考 Overviewoffunctionalityandcomponents 以及 FrequentlyAskedQuestions 以及结合自己的理解。

1什么是OpenvSwitch

OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer,KVM,andVirtualBox多种虚拟化技术。

OpenvSwitch还支持多个物理机的分布式环境。

在这种某一台物理机器的虚拟化环境中,一个虚拟交换机(vswitch)主要有如下两个作用:

∙传递虚拟机VM之间的流量

∙以及实现VM和外界网络的通信

如下图所示:

整个OVS代码用C写的。

目前有以下功能:

∙Standard802.1QVLANmodelwithtrunkandaccessports

∙NICbondingwithorwithoutLACPonupstreamswitch

∙NetFlow,sFlow(R),andmirroringforincreasedvisibility

∙QoS(QualityofService)configuration,pluspolicing

∙GRE,GREoverIPSEC,VXLAN,andLISPtunneling

∙802.1agconnectivityfaultmanagement

∙OpenFlow1.0plusnumerousextensions

∙TransactionalconfigurationdatabasewithCandPythonbindings

∙High-performanceforwardingusingaLinuxkernelmodule

2OpenvSwitch的组成

OVS的核心组件包括ovsdb-server,ovs-vswitchd,ovskernelmodule。

如下图所示:

运行原理:

内核模块实现了多个“数据路径(DataPath)”(类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。

每个数据路径也通过关联流表(flowtable)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。

当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。

当有一个匹配的流时它执行对应的操作。

如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后遇到相同类型的数据包可以在内核中执行操作)。

细节如下图所示:

除了核心组件,还包括一些管理工具,详细介绍如下:

∙ovs-vswitchd:

OVS守护进程是OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-basedswitching)。

它和上层controller通信遵从OPENFLOW协议,它与ovsdb-server通信使用OVSDB协议,它和内核模块通过netlink通信,它支持多个独立的datapath(网桥),它通过更改flowtable实现了绑定和VLAN等功能。

∙ovsdb-server:

OVS轻量级的数据库服务器,用于整个OVS的配置信息,包括接口,交换内容,VLAN等等。

ovs-vswitchd根据数据库中的配置信息工作。

它于manager和ovs-vswitchd交换信息使用了OVSDB(JSON-RPC)的方式。

∙ovs-dpctl:

一个工具,用来配置交换机内核模块,可以控制转发规则。

∙ovs-vsctl:

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

∙ovs-appctl:

主要是向OVS守护进程发送命令的,一般用不上。

autilitythatsendscommandstorunningOpenvSwitchdaemons(ovs-vswitchd)

∙ovsdbmonitor:

GUI工具来显示ovsdb-server中数据信息。

(Ubuntu下是可以使用apt-get安装,可以远程获取OVS数据库和OpenFlow的流表)

∙ovs-controller:

一个简单的OpenFlow控制器

∙ovs-ofctl:

用来控制OVS作为OpenFlow交换机工作时候的流表内容。

∙ovs-pki:

OpenFlow交换机创建和管理公钥框架;

∙ovs-tcpundump:

tcpdump的补丁,解析OpenFlow的消息;

∙brocompat.ko:

Linuxbridgecompatibilitymodule

∙openvswitch.ko:

OpenvSwitchswitchingdatapath

一些用用的OVS命令示例:

sudoovs-vsctlshow

sudoovs-vsctladd-brmybridge

sudoovs-vsctldel-brmybridge

sudoovs-vsctladd-portmybridgeport-name

sudoovs-vsctldel-portmybridgeport-name

sudoovs-vsctllistBridge/Port/Interface/...

sudoovs-appctlfdb/showmybridge

sudoovs-ofctlshowmybridge

sudoovs-ofctldump-flowsmybridge

sudoovs-ofctladd-flowmybridgedl_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,actions=output:

6

sudoovs-ofctldel-flowsmybridgedl_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

sudoovs-ofctladd-flowdp0in_port=2,actions=output:

6

#Thiswilldeletealltheflowentriesintheflowtable

Sudoovs-ofctldel-flowsmybridge

3OpenvSwitch和其他vswitch

这里其他的vswitch,包括VMwarevNetworkdistributedswitch以及思科的CiscoNexus1000V。

VMwarevNetworkdistributedswitch以及思科的CiscoNexus1000V这种虚拟交换机提供的是一个集中式的控制方式,。

而OVS则是一个独立的vswitch,他运行在每个实现虚拟化的物理机器上,并提供远程管理。

OVS提供了两种在虚拟化环境中远程管理的协议:

∙一个是OpenFlow,通过流表来管理交换机的行为,

∙一个是OVSDBmanagementprotocol,用来暴露sietch的port状态。

4概念及工作流程

4.1vswitch、Bridge、Datapath

在网络中,交换机和桥都是同一个概念,OVS实现了一个虚拟机的以太交换机,换句话说,OVS也就是实现了一个以太桥。

那么,在OVS中,给一个交换机,或者说一个桥,用了一个专业的名词,叫做DataPath!

要了解OVS如何工作,首先需要知道桥的概念:

网桥也叫做桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个LAN连接,根据MAC地址来转发帧,可以看成一个“低层的路由器”(路由器工作在网络层,根据IP地质进行转发)。

网桥的工作原理

网桥处理包遵循以下几条规则:

∙在一个接口上接收到的包不会再往那个接口上发送此包。

∙每个接收到的包都要学习其源MAC地址。

∙如果数据包是多播或者广播包(通过2层MAC地址确定)则要向接收端口以外的所有端口转发,如果上层协议感兴趣,则还会递交上层处理。

∙如果数据包的地址不能再CAM表中找到,则向接收端口以外的其他端口转发。

∙如果CAM表中能找到,则转发给相应端口,如果发送和接收都是统一端口,则不发送。

注意,网桥是以混杂模式工作的。

关于网桥更多,请查阅相关资料。

OVS中的bridge

上面,说到,一个桥就是一个交换机。

例如,在OVS中:

root@localhost:

~#ovs-vsctladd-brbr0

root@localhost:

~#ifconfigbr0

br0Linkencap:

EthernetHWaddr1a:

09:

56:

ea:

0b:

49

inet6addr:

fe80:

:

1809:

56ff:

feea:

b49/64Scope:

Link

UPBROADCASTRUNNINGMULTICASTMTU:

1500Metric:

1

RXpackets:

1584errors:

0dropped:

0overruns:

0frame:

0

TXpackets:

6errors:

0dropped:

0overruns:

0carrier:

0

collisions:

0txqueuelen:

0

RXbytes:

316502(316.5KB)TXbytes:

468(468.0B)

当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名字就是网桥的名称(br-int),之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。

有了这个交换机以后,还需要为这个交换机增加端口(port),一个端口,就是一个物理网卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了。

root@localhost:

~#ovs-vsctladd-portbr0port

这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须是以混杂模式工作,工作在链路层,处理2层的帧,所以这个port就不需要配置IP了。

(你没见过哪个交换的端口有IP的吧)

那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以telnet到交换机上进行配置吧,那么在OVS中创建的虚拟交换机有木有这种呢,有的!

上面既然创建交换机brname的时候产生了一个虚拟网口br-int,那么,你给这个虚拟网卡配置了IP以后,就相当于给交换机的管理接口配置了IP,此时一个正常的虚拟交换机就搞定了。

root@localhost:

~#ipaddressadd192.168.1.1/24devbr0

最后,我们来看看一个br的具体信息:

root@localhost:

~#ovs-vsctlshow

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主要是用来在虚拟化环境中。

实现虚拟机之间通信以及一个虚拟机和外网之间通信,如下是一个典型的结构图:

那么,通常情况下的工作流程如下:

1.VM实例instance产生一个数据包并发送至实例内的虚拟网络接口VNIC,图中就是instance中的eth0.

2.这个数据包会传送到物理机上的VNIC接口,如图就是vnet接口。

3.数据包从vnetNIC出来,到达桥(虚拟交换机)br100上.

4.数据包经过交换机的处理,从物理节点上的物理接口发出,如图中物理机上的eth0.

5.数据包从eth0出去的时候,是按照物理节点上的路由以及默认网关操作的,这个时候该数据包其实已经不受你的控制了。

一般L2switch连接eth0的这个口是一个trunk口,因为虚拟机对应的VNET往往会设置VLANTAG,可以通过对虚拟机对应的vnet打VALNTAG来控制虚拟机的网络广播域.如果跑多个虚拟机的话,多个虚拟机对应的vnet可以设置不同的vlantag,那么这些虚拟机的数据包从eth0(4)出去的时候,会带上TAG标记.这样也就必须是trunk口才行.

6OVS简单应用实例

6.1创建物理机到物理机的网络拓扑

root@localhost:

~#ovs-vsctladd-brbr0

root@localhost:

~#ovs-vsctladd-portbr0eth0

root@localhost:

~#ovs-vsctladd-portbr0eth1

6.2创建虚拟机到虚拟机的网络拓扑

使用KVM虚拟化。

root@localhost:

~#ovs-vsctladd-brbr0

root@localhost:

~#cat/etc/ovs-ifup

#!

/bin/sh

switch='br0'

/sbin/ifconfig$10.0.0.0up

ovs-vsctladd-port${switch}$1

root@localhost:

~#cat/etc/ovs-ifdown

#!

/bin/sh

switch='br0'

ovs-vsctldel-port${sw/sbin/ifconfig$10.0.0.0down

itch}$1

root@localhost:

~#kvm-m512-netnic,macaddr=00:

11:

22:

33:

44:

55-net\

tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive\

file=/path/to/disk-image,boot=on

        

root@localhost:

~#kvm-m512-netnic,macaddr=11:

22:

33:

44:

55:

66-net\     

tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive\

file=/path/to/disk-image,boot=on

7.Misc

7.1查表

ovs-vsctllistbridgeovs-br

7.2关于Brdige及Port

创建Brdige

ovs-vsctladd-brovs-br

在ovs-br上添加interface

ovs-vsctladd-portovs-breth0

(1)+

(2)的可以合并为:

ovs−vsctladd−brovs-br--add−portovs-breth0

删除Bridge

ovs-vsctldel-brovs-br#如果不存在,会有errorlog

ovs-vsctl--if-existsdel-brovs-br

更改ofport(openflowportnumber)为100:

ovs-vsctladd-portovs-breth0--setInterfaceeth0ofport_request=100

设置port为internal

ovs-vsctlsetInterfaceeth0type=internal

7.3关于Controller

设置Controller

ovs-vsctlset-controllerovs-brtcp:

1.2.3.4:

6633

设置multicontroller

ovs-vsctlset-controllerovs-brtcp:

1.2.3.4:

6633tcp:

5.6.7.8:

6633

查询Controller

ovs-vsctlshow

如果有成功连到controller则提示is_connected:

true,反之未连上:

ovs-vsctlget-controllerovs-br

移除Controller

ovs-vsctldel-controllerovs-br

7.4关于STP(SpanningTreeProtocol)

开启STP

ovs-vsctlsetbridgeovs-brstp_enable=true

关闭STP

ovs-vsctlsetbridgeovs-brstp_enable=false

查询STP配置信息

ovs-vsctlgetbridgeovs-brstp_enable

设置Priority

ovs−vsctlsetbridgebr0other_config:

stp-priority=0x7800

设置Cost

ovs−vsctlsetporteth0other_config:

stp-path-cost=10

移除STP设置

ovs−vsctlclearbridgeovs-brother_config

7.5关于OpenflowVersion

支持OpenFlowVersion1.3

ovs-vsctlsetbridgeovs-brprotocols=OpenFlow13

支持OpenFlowVersion1.31.2

ovs-vsctlsetbridgeovs-brprotocols=OpenFlow12,OpenFlow13

移除OpenFlow支持设置

ovs-vsctlclearbridgeovs-brprotocols

7.6关于VLAN

设置VLANtag

ovs-vsctladd-portovs-brvlan3tag=3--setinterfacevlan3type=internal

移除VLAN

ovs-vsctldel-portovs-brvlan3

查询VLAN

ovs-vsctlshow

ifconfigvlan3

设置Vlantrunk

ovs-vsctladd-portovs-breth0trunk=3,4,5,6

设置已add的port为accessport,vlanid9

ovs-vsctlsetporteth0tag=9

ovs-ofctladd-flow设置vlan100

ovs-ofctladd-flowovs-brin_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:

100,output:

3

ovs-ofctladd-flowovs-brin_port=1,dl_vlan=0xffff,actions=push_vlan:

0x8100,set_field:

100-\>vlan_vid,output:

3

ovs-ofctladd-flow拿掉vlantag

ovs-ofctladd-flowovs1in_port=3,dl_vlan=100,actions=strip_vlan,output:

1

two_vlanexample

ovs-ofctladd-flowpop-vlan

ovs-ofctladd-flowovs-brin_port=3,dl_vlan=0xffff,actions=pop_vlan,output:

1

7.7关于GRETunnel

设置GREtunnel

ovs−vsctladd−portovs-brovs-gre--setinterfaceovs-gretype=greoptions:

remote_ip=1.2.3.4

查询GRETunnel

ovs-vsctlshow

7.8关于Dumpflows

DumpsOpenFlowflows不含hiddenflows(常用)

ovs-ofctldump-flowsovs-br

DumpsOpenFlowflows包含hiddenflows

ovs-appctlbridge/dump-flowsovs-br

Dump特定bridge的datapathflows不論任何type

ovs-appctldpif/dump-flowsovs-br

Dump在Linuxkernel裡的datapathflowtable(常用)

ovs-dpctldump-flows[dp]

Toplikebehaviorforovs-dpctldump-flows

ovs-dpctl-top

7.9XenServer开启OpenvSwitch方式

检查是否启动openvswitch服务:

serviceopenvswitchstatus

启动服务

xe-switch-network-backendopenvswitch

关闭服务

xe-switch-network-backendbridge

7.10关于Log

查询loglevellist

ovs-appctlvlog/list

设置loglevel(以stp设置file为dbglevel为例)

ovs-appctlvlog/setstp:

file:

dbg

ovs-appctlvlog/set{modulename}:

{console,syslog,file}:

{off,emer,err,warn,info,dbg}

7.11关于Fallback

Controllerconnection:

false的时候,会自动调成legacyswitchmode

ovs-vsctls

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1