openvswitch简介

现在虚机大行其道,以kvm和docker为代表,极大地利用了机器的硬件资源,模拟了操作系统,但是,如何更好的利用网络,用软件交换机替代传统的交换机呢?

一个物理交换机基本支持flows, VLANs, trunking, QoS, port aggregation, firewalling, 还有一些具备3层交换的功能,而虚拟环境kvm或者docker下的网络层就贫乏多了,没什么像样的东西。ovs就恰恰补充了这方面的功能。Open vSwitch 支持flows,VLANS, trunking和port aggregation,跟其他主流交换机基本一样。

说到ovs,先要说OpenFlow,OpenFlow project的目标是实现路由器和交换机的功能。一个典型的路由器或者交换机一般都有两个功能:

  • 快速包转发(data path)
  • 决定包如何转发和转发到哪里 (control path)

ovs就是openflow的具体实现了,有如下功能,基本和物理交换机差不多了:

  • Fully functional Layer 2 switch
  • NetFlow, sFlow, SPAN, and RSPAN support
  • 802.1Q VLANs with trunking
  • QoS
  • Port aggregation
  • GRE tunneling
  • Compatibility with the Linux bridge code (brctl)
  • Kernel and userspace switch implementation

在 OVS 中, 有几个非常重要的概念:

  • Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
  • Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。
  • Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。ovs Port是一个虚拟端口,而ovs Interface通常是指网卡eth0 eth1之流, Interface可以是虚拟的,也可以是物理网卡,所以如果把主机的物理网卡interface eth0,绑到ovs port上,流量就自然进入ovs了。
  • Controller: OpenFlow 控制器。OVS 可以同时接受一个或者多个 OpenFlow 控制器的管理。
  • datapath: 在 OVS 中,datapath 负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。
  • Flow table: 每个 datapath 都和一个“flow table”关联,当 datapath 接收到数据之后, OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作, 例如转发数据到另外的端口。

port指的是bridge上的口,interface指的是网卡。所以我们可以通过 ovs-vsctl add-port br0 p0在这个br0上添加端口p0,但这个时候linux上没有p0这个虚拟网卡。如果需要有这个虚拟网卡,需要建立interface:ovs-vsctl set Interface p0 type=internal,这个时候ifconfig -a才能看到p0这个口。

而Controller对应就是openflow中的control path,datapath就是openflow中的data path,当需要转发包时,ovs的controller查找Flow table的条目,然后datapath决定转发。

Ok,基本介绍就到这里,我们是要用ovs来搭建kvm和docker的网络环境滴。

comments powered by Disqus