支持 ETSI NFV SOL003 与第三方 NFVO 互操作

https://blueprints.launchpad.net/tacker/+spec/support-vnfm-operations

使 Tacker 能够作为 VNFM 运行,并与第三方 NFVO 互操作。因此,支持 ETSI NFV SOL003 [2] Or-Vnfm 规范和与 NFVO 互操作的 VNF 生命周期操作。

问题描述

在当前的 Tacker 实现中,VNFM 和 NFVO 的功能紧密耦合。

这种实现的原因是用户可以使用 Tacker 轻松构建 NFV 环境(VNFM + NFVO)进行小规模启动。另一方面,考虑到 Tacker 的实际应用,Tacker 作为 VNFM 与第三方 NFVO 合作也很重要。因此,Tacker 作为 VNFM 将支持 VNF 包并基于 ETSI NFV SOL003 [2] 提供 API。

提议的变更

此功能支持 Tacker 作为 VNFM 连接到 NFVO 的功能。当 Tacker 作为 VNFM 连接到第三方 NFVO(如 NFVO 所指)时,Tacker(VNFM)需要 NFVO 提供以下信息,因此将实现获取它们的操作。

  • VNF 包信息

  • 授权信息

1) NFVO 信息管理

1-1) 获取 VNF 包流程

当作为连接到 NFVO 的 VNFM 运行时,Tacker-VNFM 使用以下 API 从 NFVO 获取 VNF 包信息,并在启动生命周期管理 (LCM) 操作时使用。以下从 VNFM 发送的 API 可以通过 Tacker 配置发送或抑制。

VNF 包使用“vnf_packages” API。

先决条件:已创建一个或多个“单个 VNF 包”资源。

../../_images/0118.png
  • VNF 包 (GET)

    当 VNFM 收到创建 VNF 请求时,VNFM 将请求从 NFVO 获取 vnfPkgInformation。VNFM 设置基于属性筛选的参数以获取 vnfPkgId。NFVO 发送基于 vnfPkgId 的 http 响应 vnfPkgInfo。收到 http 响应后,VNFM 存储收到的 vnfPkgId。

  • VNF 包内容 (GET)

  • 单个 VNF 包中的 VNFD (GET)

  • 单个 VNF 包工件 (GET)

    VNFM 请求获取内容/VNFD/工件的信息。NFVO 向 VNFM 提供这些信息。收到 http 响应后,VNFM 存储收到的内容。

  • 单个 VNF 包 (GET)

    在具有 vnfPkgId 的情况下,VNFM 可以仅获取相关的 vnfPkgInformation。ModifyVNF Information 可以发送此 API。

1-2) 同步响应的授权请求流程

此操作允许 VNFM 请求授权以进行 VNF LCM 操作。此接口支持多种用例,例如

  • NFVO 可以根据策略(例如 VNF 之间的依赖关系)和可用容量批准或拒绝请求。

  • 如果适用,NFVO 可以根据 VNFM 的虚拟化资源请求预留资源。

  • NFVO 可以向 VNFM 提供有关云资源分配的 VIM 的信息。这可以包括其他信息,例如可用区。

Grant API 以以下序列发送:- 实例化 - 修复 - 扩展 - 终止

../../_images/0212.png

收到带有正文数据的 201 创建后,VNFM 更新授权信息。

后置条件:授权信息可供 VNFM 使用。

2) NFVO 操作条件的判断

由于执行 API 传输以连接到 NFVO,因此通过在 Tacker 配置中设置 URI 来启用与 NFVO 的通信。如果未设置 URI,则将抑制所有用于 NFVO 的 API 传输。以下从 VNFM 发送的 API 可以通过 Tacker 配置发送或抑制。

  • VNF 包信息

  • 授权信息

3) API 请求和通知的授权

3-1) OAuth2.0 的支持

SOL013 [3] 规定 ETSI NFV MANO API 调用使用 OAuth2 [3],并且发送通知使用 OAuth2 或 HTTP Basic 身份验证。目前 Tacker 不支持与 OAuth2 对应的操作。Tacker 需要符合 IETF RFC 6749 的授权。

3-2) TLS1.2 的支持

目前 Tacker 支持 SSL。需要传输安全支持以防止传输信息的伪造并确保自由的通信路径。SOL013 [3] 建议使用 TLS1.2 (IETF RFC 5246)。Tacker 也需要符合 TLS1.2 标准。

4) CreateVNF API 的增强

为了增强接收 VNF 包元数据的能力,VNFM 在“Create VNF”请求上支持“metadata”参数。此参数存储在 VNFM 中。此参数覆盖 SOL001 [1] 中的 6.2.35 tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata。但是,元数据不影响基于 SOL003 [2] 5.5.2.2 类型:VnfInstance 的生命周期。因此,Tacker 仅保存元数据。

备选方案

数据模型影响

tacker 数据库中添加一个表。

placement_constraint

id id varchar(36) Not Null
vnf_instance_id vnf_instance_id varchar(36) Not Null
affinity_or_anti_affinity affinity_or_anti_affinity varchar(255) Not Null
scope scope varchar(255) Not Null
server_group_name server_group_name varchar(255) Not Null
resource resource json Not Null
created_at created_at datetime Not Null
updated_at updated_at datetime
deleted_at deleted_at datetime
deleted deleted tinyint(1) Not Null

此表具有 id 作为主键。vnf_instance_idvnf_instances.`id` 的外键。

REST API 影响

安全影响

所有 API 都通过 OAuth2 身份验证并由 TLS1.2 加密。

通知影响

其他最终用户影响

性能影响

VNFM 在实例化期间获取 pkg 数据/镜像执行。此过程可能需要一些时间。

其他部署者影响

开发人员影响

Tacker-VNFM 作为客户端调用以下 API。这些属性基于 ETSI NFV SOL003 [2]

  • 名称:Grants
    描述:请求授权
    方法类型: POST
    资源的 URL:/grant/v1/grants
    请求:

    数据类型

    基数

    描述

    GrantRequest

    1

    请求 Grants 资源的参数。

    属性名称

    数据类型

    基数

    支持

    vnfInstanceId

    标识符

    1

    vnfLcmOpOccId

    标识符

    1

    vnfdId

    标识符

    1

    flavourId

    标识符

    0..1

    operation

    GrantedLcmOperationType

    1

    isAutomaticInvocation

    布尔值

    1

    instantiationLevelId

    标识符

    0..1

    addResources

    ResourceDefinition

    0..N

    tempResources

    ResourceDefinition

    0..N

    removeResources

    ResourceDefinition

    0..N

    updateResources

    ResourceDefinition

    0..N

    placementConstraints

    PlacementConstraint

    0..N

    vimConstraints

    VimConstraint

    0..N

    additionalParams

    KeyValuePairs

    0..1

    _links

    结构 (内联)

    1

    >vnfLcmOpOcc

    链接

    1

    >vnfInstance

    链接

    1

    响应:

    数据类型

    基数

    响应代码

    描述

    Grant

    1

    成功 201
    错误 400 401 403

    授权已成功创建(同步模式)。

    属性名称

    数据类型

    基数

    支持

    id

    标识符

    1

    vnfInstanceId

    标识符

    1

    vnfLcmOpOccId

    标识符

    1

    vimConnections

    VimConnectionInfo

    0..N

    zones

    ZoneInfo

    0..N

    zoneGroups

    ZoneGroupInfo

    0..N

    computeReservationId

    IdentifierInVim

    0..1

    networkReservationId

    IdentifierInVim

    0..1

    storageReservationId

    IdentifierInVim

    0..1

    addResources

    GrantInfo

    0..N

    tempResources

    GrantInfo

    0..N

    removeResources

    GrantInfo

    0..N

    updateResources

    GrantInfo

    0..N

    vimAssets

    结构(内联)

    0..1

    >computeResourceFlavours

    VimComputeResourceFlavour

    0..N

    >softwareImages

    VimSoftwareImage

    0..N

    extVirtualLinks

    ExtVirtualLinkData

    0..N

    extManagedVirtualLinks

    ExtManagedVirtualLinkData

    0..N

    additionalParams

    KeyValuePairs

    0..1

    _links

    结构(内联)

    1

    >self

    链接

    1

    >vnfLcmOpOcc

    链接

    1

    >vnfInstance

    链接

    1

  • 名称:VNF 包
    描述:查询 VNF 包信息
    方法类型: GET
    资源的 URL:/vnf_packages
  • 名称:VNF 包内容
    描述:获取上载的 VNF 包
    方法类型: GET
    资源的 URL:/vnf_packages/{vnfPkgId}/package_content
  • 名称:单个 VNF 包的 VNFD
    描述:读取上载 VNF 包的 VNFD
    方法类型: GET
    资源的 URL:/vnf_packages/{vnfPkgId}/vnfd
  • 名称:单个 VNF 包工件
    描述:获取单个 VNF 包工件
    方法类型: GET
    资源的 URL:/vnf_packages/{vnfPkgId}/artifacts/{artifactPath}
  • 名称:单个 VNF 包
    描述:读取单个 VNF 包的信息
    方法类型: GET
    资源的 URL:/vnf_packages/{vnfPkgId}

实现

负责人

主要负责人

滨田 诚 <makoto.hamada.xu@hco.ntt.co.jp>

工作项

  • 实现获取 VNF 包和授权的过程。

  • 添加新的配置并更改 Tacker 配置文档。

  • 支持 OAuth2.0 和 TLS1.2

  • 支持 CreateVNF API 的增强。

  • 添加新的单元和功能测试。

依赖项

“Proposed change” 中提到的“Create VNF” 是 spec [4] 中提出的基于 ETSI SOL 的 API。

测试

将为 VNF 包和授权添加单元和功能测试用例。

文档影响

将为 NFV 的连接添加新的配置选项到配置参考中。

参考资料