OVS简介什么是OpenvSwitch?OpenvSwitch(以下简称OVS)是用C语言开发的多层虚拟交换机,使用Apcahe2开源许可证,基本成为开源SDN(软件定义网络)基础设施层的事实标准。OVS支持哪些功能?支持NetFlow、sFlow(R)、IPFIX、SPAN、RSPAN、GRE隧道镜像等多种流量监控协议支持LACP(IEEE802.1AX-2008)支持标准802.1QVLAN协议,允许端口配置为trunk模式支持组播支持BFD和802.1ag链路监控支持STP(IEEE802.1D-1998)和RSTP(IEEE802.1D-2004)支持细粒度QoS(服务质量)配置支持HFSCqdisc支持接管各虚拟机流量支持负载基于源MAC均衡、主备模式和L4哈希端口绑定支持OpenFlow协议(包括许多虚拟化扩展)支持IPv6支持多种隧道协议(GRE、VXLAN、STT、Geneve和IPsec)支持C和Python远程配置协议支持内核和用户空间中的转发引擎选项。带有流缓存引擎的多表转发管道。转发层抽象,简化移植到新的软硬件平台(Switch),一台主机中可以创建一个或多个Bridge,Bridge可以将某个端口收到的数据包按照一定的规则转发到另一个或多个端口,并且还可以修改或丢弃数据包艺术。港口是中文名港口。需要注意的是,它和TCP中的端口不是同一个概念。它更像是物理开关上的插座,可以接水晶头。Port属于Bridge,必须先添加Bridge,Port才能添加到Bridge。Port有以下几种类型:普通用户可以将操作系统中已有的网卡添加到OpenvSwicth中,OpenvSwitct会自动生成一个同名的Port来处理这个网卡进出的数据包。但是需要注意的是,这种方式添加的Port是不支持分配IP地址的。如果之前在网卡上配置了IP,挂载到OVS上后就无法访问了。此类端口常用于VLAN方式连接多台物理主机的端口,交换机的一端属于Trunk方式。Internal当Porttype为Internal时,OVS会自动创建一个虚拟网卡(Interface),这个端口收到的数据包会转发给这个网卡,从这个网卡发出的数据包也会被转发给港口。OVS处理。OVS在新建网桥的时候,会自动创建一个与网桥同名的InternalPort,同时也会创建一个与网桥同名的Interface,所以可以在操作系统中通过ip查看这个虚拟网卡命令。但是状态下降了。PatchPatchPort和vethpair功能相同,总是成对出现,一端收到的数据包会转发到另一端的PatchPort,就像网线一样。PatchPort常用于连接两个Bridge,使两桥与一桥相同。TunnelOVS支持GRE、VXLAN、STT、Geneve和IPsec隧道协议。这些隧道协议是覆盖网络的基本协议。通过对物理网络的封装和扩展,解决了二层网络数量不足的问题,最小化了对底层物理网络拓扑的依赖,也最大化了对网络的控制。接口(iface/interface)接口是OVS与操作系统交换数据包的一个组件。接口是操作系统上的网卡。这个网卡可能是OVS生成的虚拟网卡,也可能是OVS挂载的物理网卡。网卡,操作系统上的虚拟网卡(TUN/TAP)也可以挂载到OVS上。ControllerOpenFlow控制器,OVS可以接受一个或多个OpenFlow控制器的管理,其功能主要是下发流表和控制转发规则。流表是OVS进行数据转发的核心功能。它定义了在端口之间转发数据包的规则。一个流表规则主要分为两部分:匹配和动作。匹配部分决定了哪些数据包需要处理,动作决定了如何处理匹配到的数据包。OVS常用操作安装yuminstallopenvswitchsystemctlenableopenvswitchsystemctlstartopenvswitcBridge操作添加网桥ovs-vsctladd-brbr0查询网桥列表ovs-vsctllist-br删除网桥ovs-vsctldel-brbr0端口操作NormalPort#将物理网卡eth0添加到网桥br0ovs-vsctladd-portbr0eth0#RemovePortovs-vsctldel-portbr0eth0InternalPort#添加内部端口ovs-vsctladd-portbr0p0--setInterfacep0type=internal#启动网卡p0和configureIPiplinksetp0upipaddradd192.168.0.1/24devp0#SetVLANtagovs-vsctlsetPortp0tag=100#去掉p0上面的VLAN标签Configureovs-vsctlremovePortp0tag100#设置允许的VLAN标签p0tagovs-vsctlsetPortp0trunks=100,200#去掉p0允许的VLAN标签配置ovs-vsctlremovePortp0trunks100,200Patchportovs-vsctladd-brbr0ovs-vsctladd-brbr1ovs-vsctl\--add-portbr0patch0--设置接口patch0type=patchoptions:peer=patch1\--add-portbr1patch1--设置接口patch1type=patchoptions:peer=patch0TunnelPort#Host10.1.7.21Onovs-vsctladd-brbr-tunovs-vsctl添加端口br-tunvxlan-vx01---设置接口vxlan-vx01type=vxlanoptions:remote_ip=10.1.7.22ovs-vsctladd-portbr-tunvxlan-vx02---setInterfacevxlan-vx02type=vxlanoptions:remote_ip=10.1.7.23#主机10.1.7.22上ovs-vsctl添加-brbr-tunovs-vsctl添加端口br-tunvxlan-vx01---设置接口vxlan-vx01类型=vxlan选项:remote_ip=10.1.7.21ovs-vsctl添加端口br-tunvxlan-vx02---setInterfacevxlan-vx02type=vxlanoptions:remote_ip=10.1.7.23#主机10.1.7.23上ovs-vsctladd-brbr-tunovs-vsctladd-portbr-tunvxlan-vx01---设置接口vxlan-vx01类型=vxlanoptions:remote_ip=10.1.7.21ovs-vsctladd-portbr-tunvxlan-vx02---setInterfacevxlan-vx02type=vxlanoptions:remote_ip=10.1.7.22其他基础操作#设置VLANmodeovs-vsctlsetport
