传统网络管理方式发展缓慢,往往通过命令行接口,进行手工配置,运营成本高,网络升级时间长,缺乏灵活性,对需求变化响应速度慢,而且容易发生错误。
2012年7月,SDN代表厂商Nicira被VMware以12.6亿美元收购,随后Google宣布成功在其全球10个IDC网络中部署SDN,这促使SDN引起业界的强烈关注。
软件定义网络(Software Defined Network, SDN ),是Emulex网络一种新型网络创新架构,是网络虚拟化的一种实现方式,其核心技术OpenFlow通过将网络设备控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能。
OpenFlow 是SDN 架构中控制平面和转发平面的标准通信接口。OpenFlow 允许网络设备与物理和虚拟的转发平面的直接访问和操作。基于OpenFlow 的SDN架构使IT能够应对今天的高带宽的、动态的应用。适应网络不断变化的业务需求,并显著降低运营和管理的复杂度。
OpenFlow 规范官方地址:https://www.opennetworking.org/sdn-resources/technical-library
OpenDaylight是一套以社区为主导的开源框架,旨在推动创新实施以及软件定义网络(简称SDN)透明化。面对SDN型网络,大家需要合适的工具帮助自己管理基础设施,这正是OpenDaylight的专长。作为项目核心,OpenDaylight拥有一套模块化、可插拔且极为灵活的控制器,这使其能够被部署在任何支持Java的平台之上。这款控制器中还包含一套模块合集,能够执行需要快速完成的网络任务。
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)。
完整的功能列表:
这里演示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 安装。后面的实验拓扑主要是官方的题图,不同的是:
eno16777728 相对于eth0,用来做管理流量;
eno33554968 相当于eth1,用来做数据流量。
首先,我们验证一下802.1Q VLAN 的支持。
实验拓扑如上,本实验中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
由于本实验在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。
补充一下,物理接口的trunk 设置
设置trunk 允许VLAN100,VLAN200
ovs-vsctl set port eno33554968 trunk=100,200
删除内部端口VLAN配置
ovs-vsctl remove port tap100 tag 100
删除trunk 设置
ovs-vsctl remove port eno33554968 trunk 100,200
抓包分析一下,当前的配置是host11 上面的虚拟机vm1 使用vlan100,vm2使用vlan200。
tcpdump -i macvtap0 -w /tmp/vlan2016091600901.pcap
由此可以验证,Open vSwitch 支持802.1Q VLAN功能。
sFlow 是一个工业标准,用来监控高速交换网络。它提供网络使用情况的完全的可视性,可以优化网络性能,计量和计费,以及安全防御。官方:
本实验使用sFlowTrend 进行监控。sFlowTrend 是免费的,图形按的网络和服务器监控功能。使用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
实验中在Windows 上安装sFlowTrend,关闭防火墙。 OVS的接口如下:
带宽利用率如下:
tcpdump -ni eno16777728 -w /tmp/sflow-201609160950.pcap
实验完成之后,删除sFlow 设置
ovs-vsctl remove bridge br0 sflow uuid
由此可以验证,Open vSwitch 支持sFlow监控功能。
限速是我们在VM 或者container 环境中,经常要用到的功能。我们可以修改接口表配置的入口策略规则。有两个值设置:
ingress_policing_rate :允许发送的最大速率(Kbps)。
ingress_policing_burst :该接口发送可以超越最大速率的最大浮动值(Kbps)。
这里我们创建两个端口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
查看限速配置
测试工具 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如下:
限速之后的Throughput 如下:
抓包分析
tcpdump -i macvtap0 -w /tmp/201609161130.pcap
可以看到,超过限制之后,会出现大量的丢包。
系统丢包后,会对应用产生严重的影响,使用限速之前,需要做好合理的规划。
基础功能篇,主要介绍了SDN软件定义网络的基础,开源的项目,还有OVS的基础功能配置和验证。下一篇将介绍OVS的GRE和VXLAN 隧道协议配置。