OVS那些事儿之基础功能篇

SDN 兴起

传统网络管理方式发展缓慢,往往通过命令行接口,进行手工配置,运营成本高,网络升级时间长,缺乏灵活性,对需求变化响应速度慢,而且容易发生错误。
OVS那些事儿之基础功能篇_第1张图片

2012年7月,SDN代表厂商Nicira被VMware以12.6亿美元收购,随后Google宣布成功在其全球10个IDC网络中部署SDN,这促使SDN引起业界的强烈关注。

SDN架构

软件定义网络(Software Defined Network, SDN ),是Emulex网络一种新型网络创新架构,是网络虚拟化的一种实现方式,其核心技术OpenFlow通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能。
OVS那些事儿之基础功能篇_第2张图片

SDN特点

  • 控制与转发分离。转发平面由受控转发的设备组成,转发方式以及业务逻辑由运行在分离出去的控制面上的控制应用所控制。
  • 控制平面与转发平面之间的开放接口。为控制平面提供开放可编程接口。控制应用只需要关注自身逻辑,而不需要关注底层更多的实现细节。
  • 逻辑上的集中控制。逻辑上集中的控制平面可以控制多个转发面设备,也就是控制整个物理网络,因而可以获得全局的网络状态视图,并根据该全局网络状态视图实现对网络的优化控制。

SDN优势

  • 硬件只关注转发和存储能力,与业务特性解耦,可以采用相对廉价的商用的架构来实现。
  • 网络设备的种类及功能由软件配置而定,对网络的操作控制和运行由服务器作为网络操作系统(Network OS)来完成。
  • 对业务响应相对更快,可以定制各种网络参数,如路由、安全、策略、QoS等,并实时配置到网络中,开通具体业务的时间将缩短。

OpenFlow

OpenFlow 是SDN 架构中控制平面和转发平面的标准通信接口。OpenFlow 允许网络设备与物理和虚拟的转发平面的直接访问和操作。基于OpenFlow 的SDN架构使IT能够应对今天的高带宽的、动态的应用。适应网络不断变化的业务需求,并显著降低运营和管理的复杂度。
OpenFlow 规范官方地址:https://www.opennetworking.org/sdn-resources/technical-library
OVS那些事儿之基础功能篇_第3张图片

  • 可编程。加速创新,加速新功能和服务的开发。
  • 集中化的智能。简化初始配置,优化性能,细粒度的策略管理。
  • 抽象。包括软硬件的解耦,控制平面和转发平面的解耦,以及物理和逻辑配置的解耦。

OpenDaylight

OpenDaylight是一套以社区为主导的开源框架,旨在推动创新实施以及软件定义网络(简称SDN)透明化。面对SDN型网络,大家需要合适的工具帮助自己管理基础设施,这正是OpenDaylight的专长。作为项目核心,OpenDaylight拥有一套模块化、可插拔且极为灵活的控制器,这使其能够被部署在任何支持Java的平台之上。这款控制器中还包含一套模块合集,能够执行需要快速完成的网络任务。
OVS那些事儿之基础功能篇_第4张图片

  • 性能和扩展性。支持集群模式,支持OpenStack HA,可以使工作负载方便的部署在DPDK加速的虚拟交换机。
  • 易用性。整合功能,以及更加友好的UI。
  • 抽象网络模型。 支持4种方法,NEMO, ALTO,GBP,NIC。
    广泛的用例

Open vSwitch

Open vSwitch 使用Apache 2.0 license 的生产质量级的多层虚拟交换机。设计用来支持大规模的网络自动化,还支持标准的管理接口和协议。包括NetFlow, sFlow, IPFIX,RSPAN, CLI, LACP, 802.1ag。功能类似VMware 的DVS 和Cisco 的1000v。 支持多种虚拟化平台(Xen,KVM, Proxmox VE and VirtualBox)和交换机芯片。支持多种虚拟化管理平台( OpenStack,openQRM, OpenNebula and oVirt)。
OVS那些事儿之基础功能篇_第5张图片
完整的功能列表:
OVS那些事儿之基础功能篇_第6张图片

OVS 部署

这里演示CentOS 7.2 x86_64 平台下 OVS 2.5.0 版本的安装。
准备系统环境

yum update -y
yum groupinstall -y "Development Tools"
yum install -y wget openssl-devel kernel-devel kernel-debug-devel tcpdump net-tools gcc make python-devel openssl-devel graphviz autoconf automake rpm-build redhat-rpm-config libtool

sed -i 's/=enforcing/=disabled/g'  /etc/selinux/config 
systemctl disable firewalld.service
systemctl disable irqbalance.service

reboot

创建ovs 用户,编译RPM包

ovs
adduser ovs
su - ovs
mkdir -p ~/rpmbuild/SOURCES
cd ~/rpmbuild/SOURCES/
wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
tar xvf openvswitch-2.5.0.tar.gz 
rpmbuild -ba ~/rpmbuild/SOURCES/openvswitch-2.5.0/rhel/openvswitch.spec
exit

安装RPM包

yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.x86_64.rpm

验证和启动服务

ovs-vsctl -V

这里写图片描述

systemctl enable openvswitch 
systemctl start openvswitch
systemctl status openvswitch

OVS那些事儿之基础功能篇_第7张图片

至此完成OVS 安装。后面的实验拓扑主要是官方的题图,不同的是:
eno16777728 相对于eth0,用来做管理流量;
eno33554968 相当于eth1,用来做数据流量。

使用VLAN 隔离网络

首先,我们验证一下802.1Q VLAN 的支持。

OVS那些事儿之基础功能篇_第8张图片
实验拓扑如上,本实验中eno16777728 为管理网络,eno33554968 为数据网络。

创建OVS 网桥

ovs-vsctl add-br br0

将网卡eno33554968 添加至网桥 br0

ovs-vsctl add-port br0 eno33554968

创建2个VLAN

ovs-vsctl add-port br0 tap100 tag=100 -- set interface tap100 type=internal
ovs-vsctl add-port br0 tap200 tag=200 -- set interface tap200 type=internal

OVS那些事儿之基础功能篇_第9张图片

由于本实验在VMware Workstation 中,没有物理交换机配置trunk。
* 当host11 上面的虚拟机 vm1 使用tap100(vlan100),host11上面的虚拟机vm2 使用tap200,虽然vm1 和vm2 使用在相同的网段,但是无法ping 通vm1。
* 当vm2 切换到tap100(vlan100),可以正常ping 通 vm1
* 当vm1 切换到br0,host12 上面的虚拟机vm21 也使用br0,即都不配置vlan 的时候,可以正常ping 通vm1。
OVS那些事儿之基础功能篇_第10张图片
OVS那些事儿之基础功能篇_第11张图片
OVS那些事儿之基础功能篇_第12张图片

补充一下,物理接口的trunk 设置
设置trunk 允许VLAN100,VLAN200

ovs-vsctl set port eno33554968 trunk=100,200

删除内部端口VLAN配置

ovs-vsctl remove port tap100 tag 100

OVS那些事儿之基础功能篇_第13张图片

删除trunk 设置

ovs-vsctl remove port eno33554968 trunk 100,200

抓包分析一下,当前的配置是host11 上面的虚拟机vm1 使用vlan100,vm2使用vlan200。
tcpdump -i macvtap0 -w /tmp/vlan2016091600901.pcap

可以看到标准的 802.1Q VLAN tag:
OVS那些事儿之基础功能篇_第14张图片
OVS那些事儿之基础功能篇_第15张图片

由此可以验证,Open vSwitch 支持802.1Q VLAN功能。

使用sFlow 监控流量

sFlow 是一个工业标准,用来监控高速交换网络。它提供网络使用情况的完全的可视性,可以优化网络性能,计量和计费,以及安全防御。官方:
本实验使用sFlowTrend 进行监控。sFlowTrend 是免费的,图形按的网络和服务器监控功能。使用sFlow标准,提供全面用户和应用的网络带宽使用情况。

OVS那些事儿之基础功能篇_第16张图片
配置sFlow

COLLECTOR_IP=10.0.0.2
COLLECTOR_PORT=6343
AGENT_IP=eno16777728
HEADER_BYTES=128
SAMPLING_N=64
POLLING_SECS=10

ovs-vsctl -- --id=@sflow create sflow agent=${AGENT_IP} target=\"${COLLECTOR_IP}:${COLLECTOR_PORT}\"  header=${HEADER_BYTES} sampling=${SAMPLING_N} polling=${POLLING_SECS} -- set bridge br0 sflow=@sflow

查看sFlow 配置
OVS那些事儿之基础功能篇_第17张图片

实验中在Windows 上安装sFlowTrend,关闭防火墙。 OVS的接口如下:
OVS那些事儿之基础功能篇_第18张图片

sFlowTrend 监控到的接口如下:
这里写图片描述

带宽利用率如下:

OVS那些事儿之基础功能篇_第19张图片
我们在网卡eno16777728抓包进行分析,

tcpdump -ni eno16777728 -w /tmp/sflow-201609160950.pcap

OVS那些事儿之基础功能篇_第20张图片

实验完成之后,删除sFlow 设置

ovs-vsctl remove bridge br0 sflow uuid

OVS那些事儿之基础功能篇_第21张图片

由此可以验证,Open vSwitch 支持sFlow监控功能。

使用Qos 策略限速

限速是我们在VM 或者container 环境中,经常要用到的功能。我们可以修改接口表配置的入口策略规则。有两个值设置:
ingress_policing_rate :允许发送的最大速率(Kbps)。
ingress_policing_burst :该接口发送可以超越最大速率的最大浮动值(Kbps)。
OVS那些事儿之基础功能篇_第22张图片
这里我们创建两个端口tap0 和 tap1

设置vm1 限速到 1 Mbps

ovs-vsctl add-port br0 tap0  -- set interface tap0 type=internal
ovs-vsctl set interface tap0 ingress_policing_rate=1000
ovs-vsctl set interface tap0 ingress_policing_burst=100

设置vm2 限速到 10Mbps

ovs-vsctl add-port br0 tap1  -- set interface tap1 type=internal
ovs-vsctl set interface tap1 ingress_policing_rate=10000
ovs-vsctl set interface tap1 ingress_policing_burst=1000

查看限速配置
OVS那些事儿之基础功能篇_第23张图片
测试工具 netperf :开源的网络性能测试工具。可以在AIX和LINUX平台上安装,支持跨平台使用。netperf可以进行的测试TCP网络性能、UDP网络性能,并且可以模拟Client/Server长连接或短连接场景,因此能更接近实际网络的使用环境进行测试和评估。

vm1 IP 地址为10.0.1.11 ,vm2 IP 地址为10.0.1.12, 在vm1 和vm2 上启动netserver

netserver -D -p 8888

在vm21 上启动netperf
测vm1

netperf -H 10.0.1.11 -p 8888 -l 60

测vm2

netperf -H 10.0.1.12 -p 8888 -l 60

测试结果如下,跟设置的带宽比较吻合。
没有限速的Throughput如下:
OVS那些事儿之基础功能篇_第24张图片
限速之后的Throughput 如下:
OVS那些事儿之基础功能篇_第25张图片
抓包分析

tcpdump -i macvtap0 -w /tmp/201609161130.pcap

可以看到,超过限制之后,会出现大量的丢包。
OVS那些事儿之基础功能篇_第26张图片
系统丢包后,会对应用产生严重的影响,使用限速之前,需要做好合理的规划。

基础功能篇,主要介绍了SDN软件定义网络的基础,开源的项目,还有OVS的基础功能配置和验证。下一篇将介绍OVS的GRE和VXLAN 隧道协议配置。

你可能感兴趣的:(OVS那些事儿之基础功能篇)