OpenVSwitch介绍

OpenVSwitch介绍


1、概述

1.1 OpenVSwitch的定义
OpenvSwitch 是一个生产环境质量级的、开源的虚拟交换机软件。在虚拟化环境中,单个物理机上的不同虚拟机、多个物理机上的不同虚拟机之间通过它进行网络通信。OpenvSwitch 被设计为可以与当下流行的交换机芯片兼容,这意味着它可以与物理交换机协同工作,并提供自由、灵活的管理手段。OpenvSwitch 支持运行在 Linux上的虚拟化平台包括:KVM,VirtualBox,Xen,Xen Cloud Platform,XenServer。相比于简单的 Linux Bridge,OpenvSwitch可以实现网络隔离、QoS配置、流量监控、数据包分析等物理交换网络所具有的功能。
1.2 OpenvSwitch的运行原理
OVS的核心组件包括ovsdb-server,ovs-vswitchd,ovs kernel module。如下图所示:
这里写图片描述
其运行原理是:内核模块实现了多个“数据路径”(datapath,类似于网桥),每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表中的流都是用户空间(userspace)在报文头和元数据的基础上映射的关键信息。一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息,并在流表中查找这些关键信息。当有一个匹配的流时,便执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流,用于以后碰到相同类型的数据包时,可以在内核中执行某操作)。细节如下图所示:
这里写图片描述
OpenvSwitch实现的严密流量控制,大多是通过OpenFlow交换协议实现的。OpenFlow使网络控制器软件能够通过网络,访问交换机或路由器的数据路径。网络管理员可以使用这个技术在一台PC上远程控制数据管理,这样他们就能够进行精细的路由和交换控制,并实现复杂的网络策略。有了OpenvSwitch中的这些远程管理功能,多租赁云计算的集成商和供应商就能够向客户提供在一台PC上持续管理各自虚拟网络、应用和策略的功能。
OVS的核心组件及其管理工具,详细介绍如下:
ovs-vswitchd:OVS的守护进程,它是OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。ovs-vswitchd与上层controller通信遵从OpenFlow协议,与ovsdb-server通信使用OVSDB协议,与内核模块通过netlink通信。支持多个独立的datapath(网桥),它通过更改flow table实现了绑定和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守护进程(ovs-vswitchd)发送命令的。
ovsdbmonitor:GUI工具,用来显示ovsdb-server中的数据信息(可以远程获取OVS数据库和OpenFlow的流表)。
ovs-controller:一个简单的OpenFlow控制器。
ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。
ovs-pki:OpenFlow交换机创建和管理公钥框架。
ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息。

在Newton版本之前,neutron-openvswitch-agent默认使用“ovs-ofctl”和“ovsdb”接口驱动。而自Newton版本开始,改为“native”接口驱动,提高了性能。
ovs-ofctl驱动:即调用ovs-ofctl命令进行openflow流表下发,启动ovs-ofctl命令需要花很多时间,而“native”驱动是通过调用ryu控制器接口,通过openflow协议下发openflow流表。
ovs-vsctl驱动:即调用ovs-vsctl命令进行端口、bridge的增删,启动ovs-vsctl命令需要花很多时间,而“native”驱动是通过调用ovs提供的python api接口,通过ovsdb协议来操作。


2 启用OpenvSwitch

2.1 设置mechanism driver
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
[ml2]
……
mechanism_drivers = openvswitch

注:控制节点和计算机点均需配置

2.2 重启服务
重启neutron和openvswitch服务:
systemctl restart neutron-server.service neutron-openvswitch.service

检测状态(注意控制节点和计算节点均需正常启动):
这里写图片描述


3 命令行

OpenvSwitch常用命令如下:

ovs-vsctl add-br br-test #创建网桥
ovs-vsctl add-port br-test enp4s0 #为网桥添加物理接口
ovs-vsctl set port enp4s0 tag=10 #将端口设置为access口
ovs-vsctl add-port br-test enp4s0 tag=10 #为网桥添加access口(等价于上两条命令)
ovs-vsctl add-port br-test enp4s0 trunk=3,4,5,6 #为网桥添加trunk口
ovs-vsctl del-br br-test #删除网桥
ovs-vsctl del-port br-test enp4s0 #删除网桥接口
ovs-vsctl show #查看所有网桥
ovs-vsctl list-br #列出所有网桥
ifconfig br-test #查看网桥
ovs-vsctl port-to-br enp4s0 #列出挂载网络接口enp4s0的所有网桥
ovs-vsctl set interface enp4s0 type=internal #设置enp4s0的类型
ovs-vsctl set interface enp4s0 type=gre options:remote_ip=1.2.3.4 #设置GRE tunnel
ovs-vsctl set interface enp4s0 ofport_request=9 #设置OpenFlow port number为9
ovs-vsctl set interface enp4s0 type=vxlan option:remote_ip=1.2.3.4 option:key=66 #设置VXLAN(VNI为66)端口
ovs-vsctl set interface enp4s0 type=vxlan option:remote_ip=1.2.3.4 option:key=flow #设置VNI flow
#以下两条命令针对网络接口enp4s0作QoS流量限速1000±100kbps
ovs-vsctl set interface enp4s0 ingress_policing_rate=1000
ovs-vsctl set interface enp4s0 ingress_policing_burst=100

ovs-ofctl show br-test #查看网桥
ovs-ofctl dump-ports br-test #查看网桥上所有端口的状态
ovs-ofctl dump-flows br-test #查看网桥上面的流表规则
ovs-ofctl add-flow br-test idle_timeout=120,in_port=2,actions=drop #添加一条流表规则,丢弃从port 2上发来的所有数据表
ovs-ofctl add-flow br-test table=0,dl_src=01:00:00:00:00:00/01:00:00:00:00:00,actions=drop #屏蔽所有进入 OVS 的以太网广播数据包
ovs-ofctl add-flow br-dp table=0,dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0,actions=drop #屏蔽STP协议的广播数据包

4 OVS问题总结

4.1 物理网卡无法设置IP
问题现象:在将物理网卡设置为网桥的端口之后,网卡便宕了。
解决办法:一块物理以太网卡,如果作为OpenvSwitch bridge的一部分,则它不能拥有IP地址。如果有,也会完全不起作用。但我们可以将IP地址绑定至某OpenvSwitch internal设备来恢复网络访问功能。
例如,假设你的enp4s0 IP地址为1.2.3.4,在执行上文所述的添加网桥(add-br)和端口(add-port)的命令后,可以使用如下方法来将IP地址绑定至enp4s0上:
ifconfig enp4s0 0.0.0.0
ifconfig br-test 1.2.3.4
4.2 网桥绑定两块物理网卡
问题现象:创建了bridge之后,将两块物理网卡绑定在该网桥上,如下:
ovs-vsctl add-br br-test
ovs-vsctl add-port br-test eth0
ovs-vsctl add-port br-test eth1

此时,网络便崩溃了,CPU利用率也非常高。
问题分析:这是形成环路造成的。在上面的设置下,OpenvSwitch在eth0上收到一个广播包后会将其发给eth1,然后eth1上的物理交换机又将这个广播包发还给eth0,如此往复。当有多个 switch时,还会产生更复杂的情况。
解决方案1:如果你想将eth0与eth1都绑定至同一个bridge,从而获得更大的带宽、更高的可靠性,可以像下面这样做:

ovs-vsctl add-br br-test
ovs-vsctl add-bond br-test bond0 eth0 eth1

解决方案2:如果你已经拥有了一个复杂或冗余的网络拓扑结构,但你想预防结环,就需要打开生成树协议(spanning tree protocol,STP)。
按照下面的命令,依序创建br0,打开STP,然后将eth0与eth1绑定至 br-test:

ovs-vsctl add-br br-test
ovs-vsctl set bridge br-test stp_enable=true
ovs-vsctl add-port br-test eth0
ovs-vsctl add-port br-test eth1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Open vSwitch(OVS)是一个开源的多层虚拟交换机,用于提供虚拟机和容器之间的网络连接。OVS可以在操作系统内核态或用户态运行,并支持多种协议,如VLAN、GRE、VXLAN、STT等。OVS还支持OpenFlow协议,使其可以与SDN控制器集成,实现网络流量控制和管理。 OVS作为一个虚拟交换机,可以在数据中心中提供灵活的网络连接,实现网络的隔离、负载均衡、流量监控等功能。在云计算环境中,OVS还可以与虚拟化平台(如KVM、Xen等)和容器管理平台(如Docker、Kubernetes等)集成,提供完整的网络虚拟化解决方案。 OVS的架构比较灵活,可以根据不同的需求进行定制和扩展。OVS的核心组件包括OVS内核模块、ovs-vswitchd守护进程、ovsdb-server数据库服务和ovs-vsctl命令行工具。OVS内核模块负责在内核中实现虚拟交换机的功能;ovs-vswitchd守护进程负责管理虚拟交换机和物理网络之间的连接;ovsdb-server数据库服务负责管理OVS的配置信息;ovs-vsctl命令行工具则提供了一个简单的接口,用于管理OVS的配置信息和状态。 总之,Open vSwitch是一个功能强大的开源虚拟交换机,用于实现虚拟化环境中的网络连接和管理。 ### 回答2: Open vSwitch(OVS)是一个开源软件交换机,用于构建和管理虚拟化的网络。它具有高性能、可扩展性和灵活性,成为了云计算和数据中心网络中的重要组件。 OVS支持标准的网络协议,如Ethernet、VLAN、TCP/IP和UDP,并且能够与其他网络设备无缝集成,如物理交换机和虚拟交换机。它可以用于构建虚拟网络,将虚拟机和物理服务器连接在一起,实现虚拟机之间和虚拟机与物理网络之间的通信。 OVS具有可编程性,可以通过使用OpenFlow协议来配置和控制流量转发规则。这使得OVS在网络中实现流量控制、负载均衡、流量监控和安全策略等功能变得可能。 OVS是可扩展的,可以与其他网络技术和工具集成,如QEMU/KVM虚拟化平台、Docker容器平台、OpenStack云计算平台等。它可以与这些组件配合使用,实现灵活的网络虚拟化和管理。 除了基本的网络功能,OVS还提供了其他高级功能,如VXLAN隧道协议支持、多路径转发、流量统计和监测等。这些功能提升了网络的可用性、性能和安全性。 总之,Open vSwitch是一个功能强大且灵活的开源软件交换机,适用于构建和管理虚拟化网络。它在云计算和数据中心网络中被广泛使用,并且可与其他网络技术和工具集成,提供了丰富的网络功能和性能优化选项。 ### 回答3: Open vSwitch(简称OVS)是一个开源的虚拟交换机软件,用于构建和管理虚拟化和云计算环境中的软件定义网络(SDN)。它提供了一种高级的网络虚拟化解决方案,可以在物理网络和虚拟网络之间建立连接和通信。 OVS支持多种虚拟交换机技术,包括Ethernet交换、VLAN隔离、流量镜像和流量过滤等。它可以被用作虚拟交换机来连接虚拟机,也可以替代物理交换机进行网络路由和转发,从而创建一个高度灵活和可扩展的网络环境。 OVS的核心特点是其可编程性和可扩展性。它支持OpenFlow协议,该协议允许控制器对网络流量进行动态编程。通过将数据平面和控制平面分离,OVS可以实现网络流的灵活管理和控制。此外,它还支持多种控制器和管理接口,如OpenDaylight和ODPi,以适应不同的应用场景和需求。 OVS的开放源代码和活跃的社区使其成为广泛采用的SDN解决方案。它被广泛用于云服务提供商、数据中心以及虚拟化环境中,用于管理和优化网络流量,提供网络隔离和安全性,实现弹性和自动化的网络管理。 总之,Open vSwitch是一个强大而灵活的软件定义网络交换机软件,通过分离数据平面和控制平面以及支持多种虚拟交换机技术,它为构建和管理虚拟化和云计算环境中的网络提供了高度可编程和可扩展的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值