1.3OpenDaylight SFC项目基础

发布时间 2023-06-08 09:03:16作者: ChuenSan

OpenDaylight SFC项目基础

任务目的

1、了解OpenDaylight SFC项目。
2、掌握手动配置SFC的基本操作。

任务环境
设备名称 软件环境(镜像) 硬件环境
主机 Ubuntu 14.04桌面版 OpenDaylight Carbon CPU:2核 内存:4G 磁盘:20G

注:系统默认的账户为:
管理员权限用户名:root,密码:root@openlab;
普通用户用户名:openlab,密码:user@openlab。
可查看当前实验环境右侧“钥匙”img 按钮获取对应的密码。

任务内容

1、学习SFC项目的安装方法。
2、手动配置SFC的基本操作。

实验原理

在网络通信过程中,包含各式各样的网络服务功能。既可以包含传统的像防火墙,NAT等功能,也有包含特定的网络应用功能(Service Function)。将特定的网络应用功能有序地组合起来,让流量通过这些服务功能就构成了网络服务链(Network Service Chain)。一般在数据中心环境下,往往会有网络服务链(Network Service Chaining)的部署需求,使得报文在数据中心传递的时候,能够经过各种各样的服务节点,保证安全、快速、稳定的网络服务。

一、SDN服务链基本概述

由于Overlay网络的发展,使得虚拟网络和物理网络分离,让数据中心的网络控制变得更加灵活,更具有扩展性。然而,在数据中心中,还存在很多介于虚拟网络和物理网络之间的中间件,如防火墙,QoS,负载均衡器等。这些中间件提供了必要的业务处理功能,即Service Function。灵活、便捷、高效、安全地调配流量到Service Function上处理,形成服务链(Service Function Chaining),这就是SFC项目要解决的问题。服务链可以理解为一种业务形式。
过去也有服务链的概念,但传统的网络服务链往往和网络拓扑紧密耦合、部署复杂,在服务链变更、扩容时,都需要改动网络拓扑,重新进行网络设备的配置。而云计算环境广泛使用虚拟化技术,具有动态性、高流动性、规模易变化、多租户等特点,传统网络的服务链无法满足这些需求,SDN的出现让服务链又焕发了生机。因此,当前再谈及服务链时,默认指的是SDN服务链。
与传统DC中配置的网络服务链相比,基于SDN的SFC具有如下的优势:

  • 传统的网络服务链往往基于手工配置,很大程度上依赖于具体的网络拓扑,以至于网络设备之间的耦合性很大。而基于SDN的配置,可以动态的添加或者删除链表上的服务节点,不仅方便使用,而且解耦了网络设备之间的关联。
  • 在数据流量经过链表的过程中,SFC还支持分类器与服务,服务与服务之间的上下文信息共享。
  • 在传统的数据服务链中,数据包往往要经过过次分类,即多次解包、封包的过程。而在SFC中,这个过程大大缩减,一般只需在分类一次即可,使得整个过程更便捷、更高效。
    blob_1z9cFVt

二、基于OpenDaylight的服务链项目

OpenDaylight的SFC项目是整个控制器平台内部的一个功能模块。用户可以通过控制器提供的北向API来使用的SFC的功能,例如创建、更新或者删除Service Chain,还可以通过配置非透明的metadata数据段用来在Service Function的节点间实现数据共享。同时,项目可以向Controller的DataStore中注册、配置服务节点,并获取拓扑。南向也支持Netconf,Openflow12等协议。Service Function Chaining 的架构如下图所示:
image-20230524154808256
SFC核心组件如下:

  • Classification:根据初始化的(配置好的)policy匹配数据流进行封装,然后转入到Service Function Chain中。
    image-20230524154821927
  • Service Function(SF):负责对收到的数据包进行特定功能的处理。作为一个逻辑上的组件,SF在具体实现的上可以是一个虚拟的元素,或者是嵌入在具体网络设备上的某种功能。常见的SF有:防火墙(firewall),WAN设备加速器,深层报文检测(Deep Packet Inspection,DPI),NAT等等。
  • Service Function Forwarder(SFF):主要负责Service Function Chaining上的流量转发控制。
  • Service Function Chain(SFC):SFC定义了一个抽象的Service Function有序集合。经过分类后的包要依次去遍历集合中的Service Function。比如:用户可以配置firewall->qos->dpi三种服务来构建一条SFC。
  • Rendered Service Path(RSP):数据包实际行走的路径。
  • Service Function Path(Service Function Path):SFP是一个逻辑概念,它是介于SFC和RSP之间的一层抽象,有时候会将SFP与SFC等同。

三、ODL的SFC项目工作流原理

image-20230524154832900
一种基于NSH封装头的机制是,使用ODL配置并下发一条Service Function Chain,每条Chain都有自己的标识。当host1发送数据包给host2,数据包首先会到分类器中进行筛选。分类出需要经过Service Function Chaining的数据包会进行封装,并打上NSH头。头中包含了很多信息,包括走哪一条服务链,服务链有几跳等。接着数据包会依次经过SFF,由SFF将数据包传递给SF或者下一跳的SFF,直到链的最后。
SFC南向REST插件的主要功能是通过REST接口向网络设备下发流表命令。当SFC数据库中的配置信息改变时,将触发流表更新操作,如下图所示。
image-20230524154847666
SFC-OVS插件是针对OVS设备设计的一个控制插件,插件实现了SFC对象(例如SFF)到OVS对象(例如bridge)的映射,这个映射关系是相互的,例如当一个SFC对象被创建的时候,SFC-OVS插件也会创建一个对应的OVS的bridge,反之亦然。在SFC中,用户将OVS作为底层网络交换机时,可以使用该插件来实现SFC的部署。SFC-OVS插件架构如下图所示:
image-20230524154859129

实验步骤

一、实验环境检查

登录主机,查看IP地址,如下图所示。

image-20230524154912247

二、安装SFC项目

步骤1 由于本次实验使用已经安装好的OpenDaylight镜像,在实验之前需要把后台启动的进程切换为前台启动。执行以下命令:

$ su
Password:
# cd /home/openlab/openlab/distribution-karaf-0.6.0-Carbon
# ./bin/stop
# ./bin/karaf

image-20230524154933503

步骤2 安装SFC-UI插件,执行以下命令:

> feature:install odl-sfc-ui

步骤3 打开浏览器,在地址栏中输入http://127.0.0.1:8181/index.html ,使用账户admin/admin登录ODL WEB UI。

如下图所示界面显示了当前的物理资源状况,可以通过其他二级菜单配置查看SFC状态。
image-20230524154954786

步骤4 在Karaf控制台中执行如下命令配置SFC南向REST插件。

> feature:install odl-sfc-sb-rest

如下图所示,在SFC-UI中,SFF配置菜单中的“REST URI”列即为每个SFF的REST接口地址。对这些REST地址进行相应修改即可完成SFC南向REST插件的配置。
image-20230524155016450

步骤5 执行以下命令安装SFC-OVS插件。

> feature:install odl-sfc-ovs

image-20230524155033808
SFC-UI刚开始都是空的,因为什么都没有配置。另外,在ODL中创建SFC有两种方式:第一,用北向的RESTAPI;第二,用UI来创建。本次实验用将基于UI实现,这样看起来比较直观,方便理解。

三、SFC基本操作

  • 场景一 创建Service Function(Application)

    步骤1 单击导航栏的“Service Functions”菜单,再单击”Add Service Function”,填写表格如下图所示。

    image-20230524155148067

    要注意以下两点:

  • 数据平面的通信方式一定要选,这里选vxlan-gpe。要不然Agent收不到请求。

  • SFF1暂时还没有创建,可以先填入SFF1,后面创建SFF的名字要与这里一致。

    步骤2 单击“Save”,SF创建结果如下图所示。

    image-20230524155229699

  • 场景二 创建Service Function Forwarders(switch)

    步骤1 在导航菜单中选择“Service Function Forwarders”,单击”Add Service Function Forwarder”,填写表单信息如下图所示。

    image-20230524155350083

    image-20230524155419774

    步骤2 单击“Save”按钮,SFF创建结果如下图所示。

    image-20230524155436279

  • 场景三 创建Service Function Chain

    步骤1 在导航栏单击“Service Function Chains”菜单,如下图所示。

    image-20230524155454755

    步骤2 单击“Add Service Function Chain”按钮,填入名字“Chain-1”,单击“Save”按钮提交,如下图所示。

    image-20230524155509162

    创建Chain-1结果如下图所示。

    image-20230524155522786

    步骤3 将”firewall”的SF拖拽到右边的Chain-1中,如下图所示。

    image-20230524155535743

    步骤4 单击保存按钮,如下图所示。

    image-20230524155548392

  • 场景四 创建Service Function Path

    步骤1 单击deploy按钮,生成一条Service Function Path,如下图所示。

    image-20230524155603931

    步骤2 命名为“Chain-1-Path-1”,单击OK按钮,成功创建Service Function Path。

    image-20230524155617655

    image-20230524155629779

    步骤3 导航栏中单击”Service Function Paths”按钮,将会看到刚创建的SFP。

    image-20230524155642138

  • 场景五 创建Rendered Service Path

    步骤1 勾选”Force Symmetric path”生成一条对称反向的RSP,保存。如下图所示。

    image-20230524155708533

    步骤2 单击下图中的按钮,生成一条RSP。

    image-20230524155725957

    image-20230524155740865

    到“Rendered Service Path”标签页可以看到创建的RSP,如下图所示。

    image-20230524155756975

    创建后可以看到RSP的两个重要属性“Path-ID”为53,“starting-index”为255。