更新 VNFFG 的链和分类器

https://blueprints.launchpad.net/tacker/+spec/update-vnffg

本文档描述了通过已创建的 VNFFG 更新转发图或分类器的计划。

问题描述

目前在 Tacker 中已经实现了通过引入的 VNFFG 概念成功创建和删除转发图和分类器的功能。更具体地说,用户有能力描述 VNFs 的转发图和分类标准到 VNFFG 模板,并在 VNFFG 创建时,Tacker 通过 networking-sfc 驱动程序将创建实际的分类规则,流量将匹配这些规则,以及实际的转发图,流量将被转发到这些规则。

当用户希望更新已经创建的 VNFFG 时,问题就出现了。Tacker 目前没有通过其 networking-sfc 驱动程序实现更新转发图或分类器的实际实现。

这里的目标是在 Tacker 服务器和 Tacker 客户端侧实现必要的功能,以便用户能够成功更新已经创建的 VNFFG,这意味着他将能够更新转发图的 VNFs,添加或删除转发图中现有的 VNFs,以及更新与已经创建的 VNFFG 对应的分类器标准。

提议的变更

为了解决上述问题,我们需要在 Tacker 服务器端和 Tacker 客户端侧引入一些更改。

更改包括

  • 为 python-tackerclient vnffg-update 命令添加额外的参数,以便能够更新转发图的一部分 VNFs,添加或删除已创建 VNFFG 中的 VNFs,以及更新 VNFFG 中描述的分类器的标准。

  • Tacker 服务器侧的 NFVO 插件也需要进行特定的更改,该插件位于 VNFFG 更新的核心功能中。更具体地说,用户应该能够更新分类器的标准或转发图中的 VNFs,或者同时更新分类器的标准和转发图中的 VNFs。这意味着我们应该对用户传递的数据运行一些验证检查。例如,可以检查标准是否已经存在于数据库中,或者用户在更新命令中传递的 VNFs 是否已经用于转发图中,并且它们是过去已经创建的 VNFs。除此之外,我们需要更新数据库中的项目。这意味着我们需要用新的标准替换现有分类器中的旧标准,或者在用户在更新命令中传递的标准是新的情况下创建新的分类器。此外,我们需要通过用 vnf-mapping 参数传递的新 VNFs 替换旧 VNFs 来更新转发图。此外,我们需要能够在用户使用对应于添加或删除 VNFFG 中 VNFs 的参数时,添加和删除转发图中的 VNFs。为了使事情简单,我们应该只允许在当此 VNF 来自于现有转发图中未使用的 VNFD 时,才能将其添加到转发图中。作为附加步骤,当通过 Tacker 客户端更新转发图或标准时,我们应该更新已经创建的 VNFFGD 模板中的项目。例如,当向转发图中添加或删除 VNFD 时,我们应该更新 constituent_vnfs 项目。最后,我们需要在整个过程结束时更新数据库中所有项目的状态。

  • 作为最后一步,我们需要在 Tacker 服务器侧的 networking-sfc 驱动程序中实现更新转发图和分类器的功能。networking-sfc 驱动程序是与 networking-sfc openstack 组件交互并负责将调用转发到 networking-sfc API 的 Tacker 组件。更具体地说,当用户想要通过添加另一个分类器或更新现有分类器的标准来更新现有分类器时,应该遵循的程序是首先清除链中的现有分类器,然后删除旧分类器并创建一个包含旧标准和更新标准的新分类器,并且还需要创建一个新的分类器,因为用户想要将新的分类器添加到链中。最后一步是重新将分类器分配给现有的转发图。我们应该遵循这个过程,因为 networking-sfc API 不支持在飞行中更新现有分类器的标准,这意味着如果我们要更新现有分类器,我们需要先删除它并创建一个包含旧标准和新标准的新分类器。如果用户想要替换现有转发图中的 VNFs,我们需要首先从其端口对组中剥离链,为新的 VNF 创建一个新的端口对和新的端口对组,删除被替换的 VNF 的端口对和端口对组,并将所有端口对组重新分配给链。最后,如果用户想要将 VNF 添加或删除到转发图中,我们需要再次从其端口对组中剥离现有的链,为新的或删除的 VNF 创建或删除端口对组,并将 VNFs 重新分配给链。

数据模型影响

REST API 影响

安全影响

通知影响

最终用户影响

Tacker 客户端更改

为了使最终用户能够更新现有的 VNFFG,python-tackerclient 将进行更改。将添加参数“--vnffgd-file”到 tacker 命令。

示例 CLI 调用

tacker vnffg-update --vnffgd-file vnffgd-template.yml <already created VNFFG name>

用户可以使用 vnffg-template 文件来更新 flowclassifier 的标准和 VNFFG 中的路径。参数 --vnffgd-file 的值是 vnffgd-template.yaml,用户可以在其中传递包含更新的分类器将具有的标准和 VNFFG 的新路径的信息。

Tacker 将支持 2 种类型的 VNFFG 更新

  1. 更新 flowclassifier 的标准

  2. 更新路径

一个 vnffgd-template.yaml,它是创建 vnffgd 的原始 vnffgd-file,用户可以添加、删除或更改 flowclassifiers 和路径的标准。

例如,用户可以在 vnffgd-template.yaml 中添加第二个标准(将新标准添加到目标服务器上的端口 443)或将新的 VNF3 添加到路径中。然后运行“tacker update”来更新创建的 VNFFG。

tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0

description: Sample VNFFG template

topology_template:
  description: Sample VNFFG template

  node_templates:
    Forwarding_path1:
      type: tosca.nodes.nfv.FP.Tacker
      description: creates path (CP12->CP22)
      properties:
        id: 51
        policy:
          type: ACL
          criteria:
            - network_src_port_id: 640dfd77-c92b-45a3-b8fc-22712de480e1
              destination_port_range: 80
              ip_proto: 6
              ip_dst_prefix: 192.168.1.2/24
            - network_src_port_id: 640dfd77-c92b-45a3-b8fc-22712de480e1
              destination_port_range: 443
              ip_proto: 6
              ip_dst_prefix: 192.168.1.2/24
        path:
          - forwarder: VNFD1
            capability: CP12
          - forwarder: VNFD2
            capability: CP22
          - forwarder: VNFD3
            capability: CP32
  groups:
    VNFFG1:
      type: tosca.groups.nfv.VNFFG
      description: HTTP to Corporate Net
      properties:
        vendor: tacker
        version: 1.0
        number_of_endpoints: 3
        dependent_virtual_link: [VL12,VL22,VL32]
        connection_point: [CP12,CP22,CP32]
        constituent_vnfs: [VNFD1,VNFD2,VNFD3]
      members: [Forwarding_path1]

Tacker 服务器处理更改

更新 vnffg 时的流程

  1. 首次更新 VNFFG 时

Tacker 将从用户在 tacker update 命令中提供的 vnffgd-template.yml 文件创建一个新的 vnffgd(template_source 是 inline)。

  1. 比较新 vnffgd 和原始 vnffgd 的更改

如果存在更改,Tacker 将运行更新链、flowclassifiers、新路径。Tacker 还将 vnffgd_id 更新到 vnffgs 数据库中的新 vnffgd 的 id。

  1. 如果 VNFFG 更新超过一次

如果最后一个 vnffgd 的 template_source 是 onboarded,Tacker 会保留 vnffgd,因为它就是原始的。如果其 template_source 是 in-line,Tacker 将删除最后一个 vnffgd。

性能影响

其他部署者影响

开发人员影响

备选方案

可以向 tacker 客户端命令传递参数 --criteria-add、--criteria-delete,以便用户能够添加、删除已创建 VNFFG 中分类器的标准。

示例 CLI 调用

tacker vnffg-update
    --criteria-add {ip_protol:6, neutron_src_port:<neutron port id>, etc}
    --forwarding-path Forwarding_path1
    <already created VNFFG name>

tacker vnffg-update
    --criteria-delete {ip_protol:6, neutron_src_port:<neutron port id>, etc}
    --forwarding-path Forwarding_path1
    <already created VNFFG name>

在未来,Tacker 将支持使用参数而不是使用 vnffgd-template.yml 文件来更新 VNFFG。

实现

负责人

主要负责人

Dimitrios Markou <mardim@intracom-telecom.com>

其他贡献者

Hoang Phuoc <phuoc.hc@dcn.ssu.ac.kr>

工作项

  1. 将 update-vnffg 功能扩展到 Tacker 服务器 NFVO 插件

  2. 在 Tacker 服务器侧的 networking-sfc 驱动程序中实现更新功能。

  3. 修改 Tacker 客户端侧的 update vnffg 命令。

  4. 添加单元和功能测试。

依赖项

update-vnffg 功能依赖于 networking-sfc 能够更新 SFC 和分类器。有关更多信息,请查看 [1]

测试

OPNFV/SFC 项目可以解决 VNFFG 更新功能的测试。

文档影响

扩展 API 文档,以包含有关 python-tackerclient 分类器标准更新的新参数。

参考资料