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的头像EBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

  • 服务器托管的优势有哪些?(详解)

    随着互联网的发展,服务器托管已经成为了网络安全加速行业中不可或缺的一部分。但是,你是否真正了解服务器托管的优势?它究竟是如何工作的?又该如何选择合适的服务商?下面让我们一起来探讨一…

    行业资讯 2024年4月13日
    0
  • 企业型网站建设

    企业型网站建设,对于每一家企业来说都是至关重要的。随着互联网的发展,越来越多的企业开始意识到拥有一个专业、高质量的网站对于企业发展的重要性。那么什么是企业型网站?为什么它如此重要?…

    行业资讯 2024年3月20日
    0
  • 网站受攻击怎么办,网站被攻击立案标准

    互联网行业始终是兵家必争之地,每天都有无数网站受到攻击,导致数据泄露、服务中断等严重事件。那么,这些网站遭受攻击的原因到底有哪些呢?在本文中,我们将讲解如何撰写网站攻击原因分析报告…

    行业资讯 2024年5月11日
    0
  • 企业网站开发

    随着互联网的发展,越来越多的企业开始意识到拥有一个专业的企业网站对于企业发展的重要性。但是,在众多云服务器行业中,如何选择合适的云服务器平台成为了一个需要考虑的问题。除此之外,网站…

    行业资讯 2024年4月4日
    0

发表回复

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