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的网络环境滴。