SDN在云计算中的应用与实践

近几年随着云计算和数据中心建设的高速发展,传统网络协议为了适应各种需求场景,组网方式也越来越复杂。SDN在云计算中可以使整个计算网络垂直开放,让网络具有软件编程能力,能够有效解决网络系统所面临的资源规模扩展受限、组网灵活性差的问题。

那什么是SDN呢,SDN全称为(Software?Defined?Network),就是软件定义网络,用软件编排网络,API开发,云平台租户组网,支持原生云编排,适合多种应用程序。

SDN在云计算中的应用与实践
SDN在云计算中的应用与实践

三个常见应用场景

SDN在云计算中的应用与实践

租户网络

每个租户都有独立的私有网络和子网,在这种场景中,不同租户间的资源设备相互隔离。一个租户可以在自己的私有网络内创建多个子网。租户可以创建虚拟路由器,将虚拟网络和外部网络 连接起来。

跨数据中心网络

在大二层网络中,采用SDN技术可以将分布在不同数据中心的设备资源,跨中心整合在同一个网络内,多用于跨数据中心业务容灾,或用于跨数据中心灵活调配资源。

网络虚拟化

通过SDN的可编程方式,实现交换机、路由器、防火墙、Qos、负载均衡等网络设备的整合,在很短的时间内,即可生成独立虚拟网络。

经过上面对SDN理论的讲解,相信大家已经对SDN技术有所了解,由于SDN应用场景较多,限于篇幅,本次只用软件编排来完成SDN流量的出入方向的改变。下面介绍用Mininet来模拟SDN在云计算中实际应用场景。

SDN在云计算中的应用与实践
SDN在云计算中的应用与实践

Mininet介绍

SDN在云计算中的应用与实践

Mininet可以创建一个真实的虚拟网络,支持OpenFlow、OpenvSwith等多种网络协议在宿主机上运行真实的设备内核、交换机和应用程序代码。

特性

  • 支持OpenFlow、OpenvSwitch等软定义网路

  • 支持系统级还原测试

  • 支持复杂的自定义拓扑

  • 提供Python API ,方便多人协作开发

  • 硬件移植性好

  • 高扩展性

  • 支持上千台主机的网络结构

SDN在云计算中的应用与实践
SDN在云计算中的应用与实践

SDN实践部分

SDN在云计算中的应用与实践

mininet的安装

01

╱ 下载Mininet的镜像文件 ╱

https://github.com/mininet/mininet/releases

02

╱ 本次测试环境 ╱

操作系统:Ubuntu 20.04.1 LTS(需安装系统图形界面,可支持Mininet图形操作)

内存:4G(如果想模拟更多设备和场景,可适当增加内存)

用户名:EBCloud

系统环境详见下图:

SDN在云计算中的应用与实践

03

╱ 账户登录 ╱

建立用户EBCloud登录,2.2.0以后版本支持可视化,在 ../mininet/mininet/examples 目录下提供 miniedit.py 脚本,切换到相应目录下,在终端中执行:

sudo ~/mininet/mininet/examples/miniedit.py

即打开了MiniEdit可视化操作界面,左边从上到下分别是主机、OpenvSwitch 交换机、传统交换机、 传统路由器、链路、控制器。点击后在屏幕上点击可将设备放置到界面中。

SDN在云计算中的应用与实践

mininet常用命令

01

创建网络拓扑常用参数:

-c            # 释放之前创建拓扑时占用的未释放的资源

-h            # 查看帮助

–topo      # 在mininet启动时通过命令行定义拓扑

–custom  # 用于创建自定义拓扑

–switch   # 定义要使用的交换机,默认使用oVSK交换机

–controller # 定义要使用的控制器,如果没有指定则使用mininet中默认的控制器

–mac         # 自动设置设备的MAC地址从而使MAC地址更易读

02

Mininet 内部交互常用命令:

help         # 获取帮助列表

nodes      # 查看网络拓扑中结点的状态

links        # 显示链路健壮性信息

net          # 显示网络拓扑

dump      # 显示每个节点的接口设置和表示每个节点的进程的PID 

pingall     # 在网络中的所有主机之间执行ping测试

pingpair   # 只测试前两个主机的连通性

iperf        # 两个节点之间进行iperftcp带宽测试(iperf h1 n2) 

iperfudp  # 两节点之间进行iperfudp带宽测试(iperfudp bw h1 h2)

link         # 禁用或启用节点间链路(link s1 s2 up启用,link s1 s2own禁用s1和s2之间的链路)

h1 ping h2   # h1和h2节点之间执行ping测试

h1 ifconfig   # 查看host1的IP等信息

xterm h1     # 打开host1的终端

exit         # 退出mininet登录

建立SDN网络拓扑

SDN在云计算中的应用与实践

从左边拖拽出来设备即可组成拓扑,后台会自动生成配置,可拖动左侧边栏的主机 Host、交换机 Switch、路由器 Router、网络链路 NetLink、控制器Controller等组件到右侧空白处,实现拓扑的可视化仿真。

将4台主机、2台 Switch 和1台Controller 拖出,并用网线连接,形成下图所示的网络拓扑
右键点击主机和Controller,选择设置Properties:主机部分主要是设置ip,每台主机都需要操作;Controller 部分主要是设置控制器类型,此处可保留默认设置,如果是外部控制器,要选择RemoteController,之后填上Controller的ip,如果是本机则按照默认127.0.0.1 即可。点击左上角的Edit,进行全局设置,此时在默认设置的基础上,勾选“Start CLI”,将OpenFlow 1.1 1.2 1.3全部勾选。

net命令查看拓扑

SDN在云计算中的应用与实践

可以看到h1和h2主机与EBCLOUD_s1连接,h3和h4主机与EBCLOUD_s2连接

现在已经对网络可以实现命令编排了,例如:

link EBCLOUD_s2 h1 down   #禁用 EBCLOUD_s2 和 h1 之间的链路。

link EBCLOUD_s2 h1 up     #连接 EBCLOUD_s2 和 h1 之间的链路。

流表的操作

SDN在云计算中的应用与实践

h1如果和h2通信,通信先过s1,s1流表中没有inport=2流表项,就发送packin消息给控制器,控制器收到后下发packout消息给s1,s1根据收到的流表转发数据包给s2,s2流表中也没有匹配项,也需要发packin给控制器,控制器下发packout,s2进行转发给h2.

h2收到消息后给h1发送数据包,先给s2,s2也没有inport=2的流表项,联系控制器packin-packout,s2再转发给s1,s1已经有了inport=2的流表项,直接转发给h1。

流表的常用命令

查看流表

dpctl dump-flows

添加流表(1号端口进,2号端口出的转发流表)

dpctl add-flow in_port=1,actions=output:2

添加丢弃数据包流表(2号端口进,丢弃数据包)

dpctl add-flow in_port=2,actions=drop

删除所有交换机的所有流表

dpctl del-flows

删除所有交换机的特定流表项(输出2号端口进的流表项)

dpctl del-flows in_port=2

删除某个交换机的流表(删除s1中从2号端口进的流表项)

sh ovs-ofctl del-flows s1 in_port=2

输入dpctl dump-flows查看流表项:

SDN在云计算中的应用与实践

可见上图中s1和s2还没有生成流表信息。

SDN在云计算中的应用与实践

执行一下pingall后再查看流表项,就可以看到s1和s2生成了很多流表项:

第一条其中的in_port=\”s1-eth1\”表示从s1的1号端口进,actions=output:\”s1-eth2\”表示从s1的2号端口出的转发动作,dl_src,dl_dst分别为原MAC地址和目的MAC地址。

执行dpctl del-flows即可删除所有流表。

执行手动添加流表

dpctl add-flow in_port=1,actions=output:2

再dpctl dump-flows查询流表可以看到s1和s2都生成了1号端口进2号端口出的流表:

SDN在云计算中的应用与实践

再添加一条从2号端口进1号端口出的流表:

dpctl add-flow in_port=2,actions=output:1

执行h1 ping h2,即可ping通,ctrl+c退出ping。

再执行h1 ping h3,无法ping通,原因是没有s2的3号端口转发的流表。s2根据流表只能1号端口进转发给2号端口出,3号端口连接的h3无法收到数据包。

SDN在云计算中的应用与实践

删除交换机s1中从2号端口进入的所有流表

sh ovs-ofctl del-flows s1 in_port=2

再查看流表可以看到被删除。

删除所有交换机中输入端口为1的流表项

dpctl del-flows in_port=1

删除所有交换机中输入端口为2的流表项

dpctl del-flows in_port=2

再查看流表可见s1和s2中都没有流表项。

添加丢弃从2号端口进的数据包的流表项:dpctl add-flow in_port=2,actions=drop

再执行pingall,发现只有h3和h4之间是互通的。因为2号端口进的数据包都匹配到流表项需要丢弃,h3从3号端口进的和h4从4号端口进的没有流表项匹配,就向控制器申请下发流表。

SDN在云计算中的应用与实践

再dpctl dump-flows查询流表,可以观察到s2中新增加了3号4号端口的流表项。

如果把2号端口和3号端口的进的流表禁用,只保留4号进的,会下发流表发出数据表,所以pingall都不能通

删除所有流表后再执行pingall,控制器此时会下发所有端口流表项。手动添加被丢弃2号和3号端口的流表项,再执行pingall,会发现所有通信任然正常。

因为手动添加的流表项和控制器下发的流表项共同存在,控制器下发的流表优先级最高,所以手动添加的流表项会失败。

到此,SDN的流量编排实践就结束了,要记得mininet只是模拟网络环境,并不是SDN核心部分,但是对SDN的特性部分理解很重要。

SDN在云计算中的应用与实践
SDN在云计算中的应用与实践

总结

SDN在云计算中的应用与实践

最后总结一下SDN在云计算中的几点优势:

  • 网络可编程

  • 网络抽象化

  • 可降低云中心运营成本

  • 设备灵活调度

  • 整网感知管理

  • 支持原生云编排,适合SaaS的多种应用程序

目前数据中心多数已经采用扁平化架构,SDN网络在自动化运维,集中管理以及扩容中有着极大应用空间。本期讨论就到此为止,尽请期待下次分享!

SDN在云计算中的应用与实践

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33218.html

(0)
EBCloud's avatarEBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注