支持 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 包”资源。
- 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 以以下序列发送:- 实例化 - 修复 - 扩展 - 终止
收到带有正文数据的 201 创建后,VNFM 更新授权信息。
后置条件:授权信息可供 VNFM 使用。
2) NFVO 操作条件的判断¶
由于执行 API 传输以连接到 NFVO,因此通过在 Tacker 配置中设置 URI 来启用与 NFVO 的通信。如果未设置 URI,则将抑制所有用于 NFVO 的 API 传输。以下从 VNFM 发送的 API 可以通过 Tacker 配置发送或抑制。
VNF 包信息
授权信息
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_id 是 vnf_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}
实现¶
负责人¶
- 主要负责人
工作项¶
实现获取 VNF 包和授权的过程。
添加新的配置并更改 Tacker 配置文档。
支持 OAuth2.0 和 TLS1.2
支持 CreateVNF API 的增强。
添加新的单元和功能测试。
依赖项¶
“Proposed change” 中提到的“Create VNF” 是 spec [4] 中提出的基于 ETSI SOL 的 API。
测试¶
将为 VNF 包和授权添加单元和功能测试用例。
文档影响¶
将为 NFV 的连接添加新的配置选项到配置参考中。