Open vSwitch
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Open vSwitch相关的知识,希望对你有一定的参考价值。
Open vSwitch 概述
Open vSwitch是由Nicira Networks主导的,运行在虚拟化平台上的虚拟交换机。OVS可以动态变化的端点提供2层交换功能,很好的控制虚拟网络中访问策略、网络隔离、流量监控等等。OVS遵循Apache2.0许可证,能同时支持多种标准的管理接口和协议。OVS也提供对OpenFlow协议的支持,用户可以使用任何OpenFlow协议的控制器对OVS进行远程管理控制。
Bridge:Bridge代表一个以太网交换机(Switch),一个机中可以创建一个或者多个Bridge设备。
Port:端口与物理交换机的端口概念类似,每个Port都隶属于一个Bridge。
Interface:连接到Port的网络接口设备。Port和Interface是一对一关系,只有在配置Port为bond模式,Port和Interface才是一对多关系。
Controller:OpenFlow控制器。OVS可以同时接受一个或多个OpenFlow控制器的管理。
datapath:在OVS中,datapath负责执行数据交换,从接受端口收到的数据包在流标中进行匹配,并执行匹配到的动作。
Flow table:每个datapath都和一个‘flow table’关联,当datapath接收到数据后,OVS会在flow table中查找可以匹配的的flow,并执行对应的操作,例如转发数据到另外的端口。
VMware vNetwork distributed switch 以及思科的Cisco Nexus 1000V这种虚拟交换机提供的是一个集中式的控制方式。而OVS则是一个独立的vswitch,运行在每个实现虚拟化的物理机器上,并提供远程管理。OVS提供两种在虚拟化环境中远程管理的协议,一个是OpenFlow,通过流表来管理交换机行为,一个是OVSDB management protocol,用来暴露sietch的port状态
OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。在虚拟化平台上,OVS可以动态变化的端口提供2层交换功能,很好控制虚拟网络中的访问策略、网络隔离、流量监控等等。
OpenvSwitch功能
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
Open vSwitch组成
ovs-vswitchd:守护进程,实现交换功能,和linux内核兼容模块一起,实现基于流的交换flow-based switching
ovs-server:轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接口,交换内容,VLAN等。ovs-vswitchd会根据数据库中的配置信息工作
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则
ovs-vsctl:主要是获取或更改ovs-vswitchd的配置信息,此工具操作时候会更新ovsdb-server中的数据库
ovs-appctl:GUI工具用来显示ovsdb-server中数据信息
ovs-controller:一个简单的OpenFlow控制器
ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容
OpenFlow
OpenFlow是用于管理交换机流表的协议,ovs-ofctl则是提供命令行工具。在没有配置OpenFlow控制器的模式下,用户可以使用ovs-ofctl命令通过OpenFlow协议去连接OVS,创建、修改或删除OVS中的流标项,并对OVS的运行状况进行动态监控。
所谓流表,可被视作是OpenFlow对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发或者三层IP地址路由表,而OpenFlow交换机使用的流表也是如此,不过在它的表项中整合了整个网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。
在OpenFlow中,Flow被定义为某个特定的网络流量。例如,一个TCP连接就是一个Flow,或者从某个IP地址发出来的数据包,都可以被认为是一个Flow。支持OpenFlow协议的交换机应该包括一个或者多个流表,流表中的条目包含:数据包头信息、匹配成功后要执行的指定和统计信息。
当数据包进入OVS后,会将数据包和流表中的流表项进行匹配,如果发现了匹配的流表项,则执行该流表项中的指令集。相反,如果数据包在流表中没有发现任何匹配,OVS会通过控制通道把数据包发送到OpenFlow控制器中。
流表中常用字段:
in_port=port 传递数据包的端口OpenFlow的端口编号
dl_vlan=valn 数据包的Vlan Tag值,范围是0-4095,0xffff 代表不包含 VLAN Tag 的数据包
dl_src=<MAC> 匹配源或目标的MAC地址
dl_dst=<MAC> 01:00:00:00:00:00/01:00:00:00:00:00 代表广播地址
00:00:00:00:00:00/01:00:00:00:00:00 代表单薄地址
dl_type=ethertype 匹配以太网协议类型
dl_type=0x0800 代表IPv4协议
dl_type=0x086dd 代表IPv6协议
dl_type=0x0806 代表ARP协议
nw_src=ip[/netmask] 当dl_type=0x0800时,匹配源后目标的ipv4地址,可以使ip或者域名
nw_dst=ip[/netmask]
nw_proto=proto 和dl_type字段协同使用,当 dl_type=0x0800 时,匹配 IP 协议编号;当 dl_type=0x086dd 代表 IPv6 协议编号
table=number 指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0。通过使用流表编号,可以创建或者修改多个 Table 中的 Flow
reg<idx>=value[/mask] 交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值
一个流规则中可能有多个动作,按照指定的先后顺序执行。
output:port: 输出数据包到指定的端口。port 是指端口的 OpenFlow 端口编号
mod_vlan_vid: 修改数据包中的 VLAN tag
strip_vlan: 移除数据包中的 VLAN tag
mod_dl_src/ mod_dl_dest: 修改源或者目标的 MAC 地址信息
mod_nw_src/mod_nw_dst: 修改源或者目标的 IPv4 地址信息
resubmit:port: 替换流表的 in_port 字段,并重新进行匹配
load:value?>dst[start..end]: 写数据到指定的字段
OpenvSwitch和其它vswitch
这里其它的vswitch,包括VMware vNetwork distributed switch以及思科的Cisco Nexus 1000V
VMware vNetwork distributed swtich以及思科的Cisco Nexus 1000V这种虚拟交换机提供一个集中式的控制方式。而OVS则是一个独立的vswitch,他运行在每个现实虚拟化的物理机器上,并提供远程管理
OVS提供了两种在虚拟化环境中远程管理的协议:
一个OpenFlow通过流表来管理交换机的行为
一个OVSDB management protocol用来暴露sietch的port状态
vswitch、Bridge、Datapath
在网络中,交换机和桥都是同一个概念,OVS实现了一个虚拟机以太网交换机,OVS也就是实现了一个以太桥。在OVS中,给一个交换机或一个桥叫DataPath
网桥也叫桥接器,连接两个局域网的设备,网桥工作在数据链路层,将两个LAN连接,根据MAC地址转发帧
Bridge:bridge代表一个以太网交换机,一个主机中可以创建多个Bridge设备
Port:端口相当于物理交换机的端口,每个Port都隶属于一个Brdige
Interface:连接到Port为bond模式后,Port和Interface才是已对多关系
Controller:OpenFlow控制器。OVS可以同事接受一个或多个OpenFlow控制器的管理
datapath:在OVS中,datapath负责执行数据交换,也就是把接收端口收到的数据在流表中匹配,并执行匹配到的动作
Flow table:每个datapath都和一个Flow table关联,当datapath接收到数据之后,OVS会在Flow table中查找可以匹配的Flow,执行对应的操作
安装openvswitch,配置外网网桥
yum install openvswitch-2.3.1-2.el7.x86_64.rpm -y
systemctl restart openvswitch && systemctl enable openvswitch
ovs-vsctl add-br br-wan 添加网桥
ovs-vsctl add-br br-lan
ovs-vsctl del-br br-lan 删除网桥
ovs-vsctl del-br br-wan
给网桥配置管理ip
ip address add 192.168.1.1/24 dev br-wan
将br-wan连接到上联(机房外网交换机)网卡设备
ovs-vsctl add-port br-wan ${uploadeth} -- set Port ${uploadeth} trunks=80,140,210,260,300,440,610 -- set Interface ${uploadeth} ofport_request=32
ovs-vsctl add-port br-wan ens160
ovs-vsctl del-port br-wan ens160
添加外网网络节点到计算节点的隧道vtep,请将计算节点IP放置在/tmp/file下,也可以单条逐个添加!
cat /tmp/file.txt |while read line
do
ovs-vsctl add-port br-wan vxlan${line} -- set Interface vxlan${line} type=vxlan option:remote_ip=${line} option:key=flow
done
查表
ovs-vsctl list bridge br-wan
openvswihch组成
每个of交换机(switch)都有一张流表,进行包查找和转发。交换机可以通过of协议经一个安全通道连接到外部控制器(controller),对流表进行查询和管理。
流表包括包头域(header fileds,匹配包头多个域)、活动计数器(counters)、0个或多个执行行动(actions)。对每个包进行查找,如果匹配则执行相关策略,否则通过安全通道将包转发到控制器,控制器来决策相关行为。流表项可以将包转发到一个或者多个接口。
流表
流表是交换机进行转发策略控制的核心数据结构。交换芯片通过查找流表项来决策对进入交换机的网络流量采取合适的行为。
包头域
包头域包括12个域,进入接口、Ethernet源地址、目标地址、类型、vlan id、vlan优先级、ip源地址、目标地址、协议、IP Tos位、TCP/UDP目标端口、源端口。每个域包括一个确定值或者所有值(any),更准确的匹配可以通过掩码实现。
流表包头域
Ingress port | Ether Source | Ether Dst | Ether Type | Vlan id | Vlan priority | IP src | IP dst | IP proto | IP ToS bits | TCP/UDP Src Port | TCP/UDP Dst Port |
http://www.ibm.com/developerworks/cn/cloud/library/1401_zhaoyi_openswitch/
以上是关于Open vSwitch的主要内容,如果未能解决你的问题,请参考以下文章