openvswitch基本配置.docx
《openvswitch基本配置.docx》由会员分享,可在线阅读,更多相关《openvswitch基本配置.docx(10页珍藏版)》请在冰豆网上搜索。
openvswitch基本配置
OpenVswitch基础配置手册
一、OpenVswitch基本介绍
OpenvSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由NiciraNetworks开发,主要实现代码为可移植的C代码。
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
二、OpenVswitchrpm打包与安装
1、安装基础包
#yuminstallgccmakepython-developenssl-develkernel-develgraphvizkernel-debug-develautoconfautomakerpm-buildredhat-rpm-configlibtoolselinux-policy-develpython-sphinx
2、下载OpenVswitch源码包,并打包成rpm包
#wgethttp:
//openvswitch.org/releases/openvswitch-2.9.2.tar.gz
#tarxfzopenvswitch-2.9.2.tar.gz
#mkdir-p~/rpmbuild/SOURCES
#cpopenvswitch-2.9.2.tar.gzrpmbuild/SOURCES
#sed's/openvswitch-kmod,//g'openvswitch-2.9.2/rhel/openvswitch.spec>openvswitch-2.9.2/rhel/openvswitch_no_kmod.spec
#rpmbuild-bb--withoutcheck~/openvswitch-2.9.2/rhel/openvswitch.spec
3、通过yum安装OpenVswith的rpm包
#yumlocalinstall/root/rpmbuild/RPMS/x86_64/openvswitch-2.9.2-1.x86_64.rpm
4、启动OpenVswith服务
#systemctlstartopenvswitch
三、OpenVswitch基础配置:
构建物理机和物理机相连
在安装openvswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到openvswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。
拓扑图如下:
执行命令如下:
#ovs-vsctladd-brbr0//建立一个名为br0的openvswitch网桥
#ovs-vsctladd-portbr0eth0//把eth0挂接到br0中
#ovs-vsctladd-portbr0eth1//把eth1挂接到br0中
Host1主机如下:
Host2主机如下:
四、OpenVswitch数据镜像配置
OpenVswith上实现端口镜像的基本流程如下:
创建 mirror ,在 mirror 中指定镜像数据源及镜像目的地
将创建的 mirror 应用到 bridge 中
镜像数据源可以通过下面几个选项来指定:
select_all :
布尔值,设置为 true 时,进出该 mirror 所生效的 bridge 上的每个数据包都将被镜像
select_dst_port :
从该 port 离开虚拟交换机的数据包将会被镜像,从Guest角度看是Guest网络接口的流入方向
select_src_port :
从该 port 进入虚拟交换机的数据包将会被镜像,从Guest角度看是Guest网络接口的流出方向
select_vlan :
指定特定VLAN做为数据源,整个VLAN的数据包都会镜像到目的地
镜像目的地可以用下面选项来指定:
output_port :
将数据包镜像到特定的 port
output_vlan :
将数据包镜像到指定VLAN,原始数据的VLANtag会被剥掉。
若镜像多个VLAN到同一个VLAN,没有办法区分镜像后的数据包来源于哪个VLAN。
在安装openvswitch的主机上有三块网卡,分别为eth0、eth1、eth3,把两块网卡挂接到openvswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。
然后eth3接收数据镜像,拓扑图如下:
执行命令如下:
#ovs-vsctladd-brbr0//建立一个名为br0的openvswitch网桥
#ovs-vsctladd-portbr0eth0//把eth0挂接到br0中
#ovs-vsctladd-portbr0eth1//把eth1挂接到br0中
#ovs-vsctladd-portbr0eth3–setinterfacevx1type=internal//把eth3挂接到br0中
#ifconfigeth3up//eth3接口收OVS创建,需要up后才可以接收数据包
#ovs-vsctl--setbridgebr0mirrors=@m----id=@eth0getPorteth0----id=@eth3getPorteth3----id=@mcreateMirrorname=m0select-all=trueoutput-port=@eth3//把eth0接口数据包,镜像到eth3接口
五、OpenVswitchVlan基础配置
OVS的端口支持四种VLAN模式,分别是trunk、access、native-tagged、native-untagged,刚创建的端口默认是不设置任何的VLAN模式。
对这几个VLAN模式的介绍如下:
模式
说明
默认
在默认模式下(VLAN_mode没被设置),如果指定了端口的tag属性,那么这个端口就工作在access模式,并且其trunk属性的值应该保持为空。
否则,这个port就工作在trunk模式下,如果trunk被指定,则使用指定的trunk值。
trunk
trunk模式的端口允许传输所有在其trunk属性中指定的那些VLAN对应的数据包。
其他VLAN的数据包就会被丢弃。
从trunk模式的端口中进入的数据包其VLANID不会发生变化。
如果进入的数据包不含有VLANID,则该数据包进入交换机后的VLAN为0。
从trunk模式的端口出去的数据包,如果VLANID不为空,则依然保持该VLANID,如果VLANID为空,则出去后不再包含802.1Q头部
access
access模式的端口只允许不带VLAN的数据包进入,不管数据包的VLANID是否与其tag相同,只要含有VLANID,这个数据包都会被端口drop。
数据包进入access端口后会被打上和端口tag相同的VLAN,而再从access端口出去时,数据包的VLAN会被删除,也就是说从access的端口出去的数据包和进来时一样是不带VLAN的。
native-tagged
native-tagged端口类似于trunk端口,它们之间的区别是如果进入native-tagged端口的数据包不含有802.1Q头部,即没有指定VLAN,那么该数据包会被当作nativeVLAN,其VLANID由端口的tag指定。
native-untagged
native-untagged端口类似于native-tagged端口,不同点是nativeVLAN中的数据包从native-untagged端口出去时,会被去掉802.1Q头部。
在安装openvswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到openvswitch的网桥上,并对eth0与eth1打上vlan标签,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。
拓扑图如下:
#ovs-vsctladd-brbr0//建立一个名为br0的openvswitch网桥
#ovs-vsctladd-portbr0eth0 tag=100//把eth0挂接到br0中,并的vlan100标签
#ovs-vsctladd-portbr0eth1 tag=100//把eth1挂接到br0中,并的vlan100标签
通过抓包如下:
六、OpenVswitchVxlan基础配置
VxLAN是VirtualeXtensibleLANs的缩写,它是对VLAN的一个扩展,是非常新的一个tunnel技术,在OpenvSwitch中应用也非常多。
Linux内核的upstream中也刚刚加入VXLAN的实现。
从数量上讲,它把12bit的VLANtag扩展成了24bit。
从实现上讲,它是L2overUDP,它利用了UDP同时也是IPv4的单播和多播,可以跨L3边界,很巧妙地解决了GREtunnel和VLAN存在的不足,让组网变得更加灵活。
#ovs-vsctladd-brbr0 #数据层面
#ovs-vsctladd-brbr1 #控制层面
#ovs-vsctladd-portbr1eth0 //把eth0挂接到br0中,
#ovs-vsctladd-portbr0eth2 //把eth2挂接到br0中,
OVS1需配置:
#ifconfigbr110.10.10.1/24up//对br1设置IP地址
#ifconfigbr011.11.11.1/24up//对br0设置IP地址
#ovs-vsctladd-portbr1vx1--setinterfacevx1type=vxlanoptions:
remote_ip=10.10.10.2//设置Vxlan,remote_ip为对端ip
#routeadd-net22.22.22.0netmask255.255.255.0gw11.11.11.1devbr1//增加路由
#ifconfigvxlan_sys_4789up//激活Vxlan的接口,此接口由OVS创造
OVS2需配置:
#ifconfigbr110.10.10.2/24up//对br1设置IP地址
#ifconfigbr022.22.22.1/24up//对br0设置IP地址
#ovs-vsctladd-portbr1vx1--setinterfacevx1type=vxlanoptions:
remote_ip=10.10.10.1//设置Vxlan,remote_ip为对端ip
#routeadd-net11.11.11.0netmask255.255.255.0gw22.22.22.1devbr1//增加路由
#ifconfigvxlan_sys_4789up//激活Vxlan的接口,此接口由OVS创造
通过br0进行抓包,可以看到Vxlan数据包