您的位置:首页 > 运维架构

Open vSwitch

2018-07-23 00:50 357 查看
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 portsNIC bonding with or without LACP on upstream switchNetFlow, sFlow(R), and mirroring for increased visibilityQoS (Quality of Service) configuration, plus policingGRE, GRE over IPSEC, VXLAN, and LISP tunneling802.1ag connectivity fault managementOpenFlow 1.0 plus numerous extensionsTransactional configuration database with C and Python bindingsHigh-performance forwarding using a Linux kernel module Open vSwitch组成ovs-vswitchd:守护进程,实现交换功能,和linux内核兼容模块一起,实现基于流的交换flow-based switchingovs-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交换机工作时候的流表内容 OpenFlowOpenFlow是用于管理交换机流表的协议,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 中的 Flowreg<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 1000VVMware 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都隶属于一个BrdigeInterface:连接到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 -ysystemctl restart openvswitch && systemctl enable openvswitchovs-vsctl add-br br-wan 添加网桥ovs-vsctl add-br br-lanovs-vsctl del-br br-lan 删除网桥ovs-vsctl del-br br-wan给网桥配置管理ipip 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=32ovs-vsctl add-port br-wan ens160ovs-vsctl del-port br-wan ens160 添加外网网络节点到计算节点的隧道vtep,请将计算节点IP放置在/tmp/file下,也可以单条逐个添加!cat /tmp/file.txt |while read linedoovs-vsctl add-port br-wan vxlan${line} -- set Interface vxlan${line} type=vxlan option:remote_ip=${line} option:key=flowdone 查表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 portEther SourceEther DstEther TypeVlan idVlan priorityIP srcIP dstIP protoIP ToS bitsTCP/UDP Src PortTCP/UDP Dst Port
http://www.ibm.com/developerworks/cn/cloud/library/1401_zhaoyi_openswitch/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Open vSwitch