醋醋百科网

Good Luck To You!

云原生技术:虚拟交换机Open vSwitch(OVS)

Switch(交换机)原本指的是按照VLAN+MAC进行桥接转发的二层网络设备。在虚拟化的浪潮中,交换机作为直连主机的网络设备,也被虚拟化了,也就成立虚拟交换机(vSwitch)。在OpenStack中,一般使用Open vSwitch作为虚拟交换机,而VMWare系统中的虚拟交换机的功能由ESXi的内核提供。

Open vSwitch(OVS)是一个具有工业级质量的多层虚拟交换机软件,主要用于虚拟机环境。作为一个虚拟交换机,支持Xen/XenServer、KVM、VirtualBox等多种虚拟化技术。

通过可编程扩展,可以实现大规模网络的自动化配置、管理和维护。它支持现有标准管理接口和协议(比如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag等。

OVS基本概念

数据包(Packet)

网络数据包是网络转发的最小数据单元,数据包总是从一个端口被转发到一个或多个目的端口。

网桥(Bridge)

网桥就是交换机,主要作用就是将一个端口的数据包转发到其他的端口。

端口(Port)

端口是用来收发数据包的基本单元,每个端口都属于某一个网桥。

接口(Interface)

接口对应的就是网卡,即可以是 OVS生成的虚拟网卡,也可能是挂载在 OVS的物理网卡。

流(Flow)

流是端口之间数据包的交换规则,规则分为两部分:

  • 匹配:这个流规则会处理符合什么条件的包。
  • 动作:对匹配命中的包会财务什么样的动作。

OVS架构主要包括三个核心组件:

ovsdb-sever: OVS的数据库服务器,存储了OVS的配置信息,包括接口、流表(flow table)、VLAN等。ovs-vswitchd从其中查询配置信息。

ovs-vswitchd: OVS的核心部件,实现交换功能的守护程序(daemon),和Linux内核模块一起实现基于流的交换。它和上层Controller通信遵从Openflow协议,它与ovsdb-server通信使用OVSDB协议,它和内核模块通信使用通过Netlink协议。

ovs kernel module: OVS的内核模块,处理包交换,并缓存flow。如果在内核缓存中找到规则则转发,否则发向用户空间去处理。

当Flow多了,匹配起来会非常耗时。datapath就是内核中的流的缓存,把流的结果缓存起来,等包来的时候内核模块直接转发。

除了以上核心组件,OVS还提供了一些工具,用于管理和配置。

ovsdb-tool:ovsdb数据库的CLI工具,不需通过ovsdb-server就能直接操控ovsdb数据库。

ovs-vsctl:获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server数据库;

ovs-dpctl:用来配置 switch 内核模块,可以控制转发规则;

ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时的流表内容。

ovs-appctl 主要是向OVS守护进程发送命令,一般很少使用;

ovsdbmonitor:用显示ovsdb-server中数据信息的GUI工具。

ovs-controller:一个简单的OpenFlow控制器

最后我们总结一下OVS对数据包进行转发的过程。

  • 每收到一个包之后,OVS Kernel Module 将检查它是否能能命中内核模块的缓存,如果命中缓存则交由内核处理;如果不能命中缓存则先发送到用户空间(ovs-vswitchd进程)进行转发决策。
  • 基于已经安装配置的规则库(OpenFlow规则);如果没有命中任何一条规则,则将包交给OpenFlow 控制器处理。
  • 一旦做出转发决策,这个包和转发动作将传回 OVS Kernel Module 缓存起来。这条 Flow 接下来的包就将命中缓存并直接由内核转发处理。

我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,欢迎大家关注、转发和评论,谢谢。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言