Tacker 中的多站点 VIM 支持

https://blueprints.launchpad.net/tacker/+spec/multi-site-vim

本提案描述了在 Tacker 中添加多站点 VIM 支持的计划。目前,Tacker 在单个 OpenStack 安装(VIM)上部署 VNFs。通过多站点 VIM 支持,Tacker 可以在多个 OpenStack 安装上部署 VNFs,从而通过 NFV 编排器 (NFVO) 组件提供统一的资源控制和管理视图,如下所示。

                  +----------------------+
                  |   Tacker Service     |
                  | +-------+  +-------+ |
                  | | NFVO  |  | VNFM  | |
                  | +-------+  +-------+ |
                  +----------------------+
       +----------------------------------XXX+------+
       |                     |                      |
+------v------+    +---------------------+     +----v-----+
|             |    |      |---------+    |     |          |
|   +-------+ |    |    +---------+ |    |     | +------+ |
| +------+  | |    |  +---------+ | |    |     | |      | |
| | |    |  | |    |  | | |     | | |    |XXX  | |      | |
| | +-------+ |    |  | | +---------+    |     | +------+ |
| +------+    |    |  | +---------+      |     |          |
| OpenStack   |    |  +---------+        |     | OpenStack|
| Instances   |    | OpenStack Instances |     | Instance |
+-------------+    +---------------------+     +----------+
    Site 1                 Site 2                 Site N

问题描述

电信运营商需要将某些 VNFs 部署在靠近客户的位置,以满足降低网络服务延迟等明显的性能要求。运营商需要一种控制和管理这些远程 VNFs 的方法,而不会显著影响其现有的 OpenStack 安装。

VNF 放置的最佳 VIM 选择的挑战涉及需要由 NFVO 组件处理的几个要求,如下所述

  • NFVO 应将 VNF 放置在能够为客户提供保证 SLA 的最佳 VIM 上

  • VIM 的持续心跳监控和性能统计信息

  • 基于客户要求(如地理冗余)的 VIM 驱动的策略选择

  • VIM 的资源使用信息,用于优化的 VNF 放置

VNFM 组件当前在本地基础设施上部署 VNFs。通过本提案,我们打算采取第一步,通过引入 NFVO 组件来支持多站点 VIM 部署。这将使 Tacker 能够以无缝的方式部署远程 VNFs。

提议的变更

API 更改

将在 Tacker API v1 中引入一个新的 ‘nfvo’ 扩展,该扩展定义了 NFVO 接口层并描述了 VIM REST API。 ‘nfvo-plugin’ 将实现 NFVO 接口层。该插件将支持 ‘openstack’ 作为默认 VIM 驱动程序。初始化新的 VIM 将涉及支持基本的 CRUD 操作,验证和存储 VIM 信息到数据库。工作流程可以可视化如下

+--------+    +------+    +------+
|  NFVO  +---->  VIM +----> VNF  |
+---+----+    +---^--+    +--^---+
    |             |          |
    |         +---+--+       |
    +---------> VNFM +-------+
              +------+

身份更改

Tacker 将使用用户提供的身份验证信息动态构建远程 VIM 的 keystone 客户端。对远程 VIM 验证身份验证信息。如果成功,VIM 的身份验证信息以及 VIM 的区域将在 VIM 注册操作期间存储在 Tacker 数据库中。 vnf-create 操作将检索此 vim 身份验证信息并在远程 VIM 上的特殊 “nfv” tenant 中部署 VNF。

VIM 敏感数据(如密码)将被加密并存储在 ‘vimauth’ 表中。它将在 vnf-create 期间使用为单个 VIM 密码生成的 fernet 密钥进行解密。 fernet 密钥存储在根文件系统路径 /etc/keystone/fernet_keys 中,仅供管理员访问。

VNF 创建中的 VIM ID

用户可以在 VNF 创建工作流程期间提供 VIM id 参数来指定 VIM 选择。如果在 VNF 创建操作期间未指定 VIM id,则 VNF 将默认部署在本地 OpenStack 实例上。区域名称也可以在 VNF 创建操作期间提供,以在选定的 VIM 的特定区域中部署。将继续使用 VNFD placement_policy 属性支持可用区 [1]

python-tackerclient 和 horizon dashboard 更改

将进行客户端更改,以包括 VIM CRUD 操作:tacker vim-register、vim-show、vim-list、vim-update 和 vim-delete 操作,这些操作处理 ‘VIM’ REST API 调用到 Tacker 服务器。典型的 vim-register 命令可以描述如下

tacker vim-register --name VIM3 --config-file ~/vim3.yaml

–config/–config-file 参数将直接作为输入或作为文件获取 VIM 特定信息

auth_url: http://10.10.10.13:5000
username: nfv_user
password: tacker_pw
tenant_name: nfv

tacker vim-update 命令将允许用户更新特定 VIM 的 VIM 信息。

tacker vim-update --vim-id VIM3 --config-file ~/vim_update.yaml

–config/–config-file 参数可以覆盖现有的 VIM 信息或提供其他参数

username: new_user
password: 123456
user_domain_id: default

tacker vnf-create 命令将更新为提供两个新的可选参数 –vim-id 和 –region-name,这些参数将允许用户指定 VIM id 以及区域。

将在 horizon dashboard 上进行类似的更改。一个新的 ‘NFVO’ 选项卡将包括一个 ‘VIM 编排’ 子选项卡来处理新 VIM 的编排。该页面还将显示配置在 Tacker 中的当前 VIM 列表。

devstack 更改

将对 tacker devstack 插件进行更改,以自动配置本地 VIM (VIM0) 作为部署 VNFs 的默认 VIM。

错误处理

  • 如果无法成功配置新的 VIM,应向用户显示适当的错误消息,说明原因。

  • 如果在 vnf-create 期间指定了无效的 vim_id,则应在客户端/horizon dashboard 上显示合适的消息。

  • 如果某个 VIM 无法访问,则应将其优雅地设置为 ‘ERROR’ 状态。确定 VIM 健康状态检查的标准将基于访问远程站点的 keystone 服务和 heat 服务。当为 VNFs 启用监控时,现有的 VNF 监控策略对单站点和多站点具有相同的行为。

假设

假设每个 OpenStack 部署都有其自己的 L2 子域(单个提供商网络)或属于一个大型 L2 域,没有重叠的提供商地址(共享提供商网络)。

每个 VIM 都配置了核心服务(nova、neutron、cinder、glance、horizon、identity)以及编排(heat)服务。此功能允许 VIM 注册与版本无关,并支持从 Kilo 版本开始的版本。

此功能将进一步利用 OpenStack 的多站点功能(如区域、可用区、共享身份服务)在电信基础设施中,将 VIM 请求转换为 VNFs 的精细放置。Tacker 多站点功能旨在与现有的单站点和多站点 OpenStack 部署一起工作,并将它们带入一个编排视图。

未来迭代中将采用以下特定于多站点的增强功能

  • 基于角色的访问控制,允许用户在其自己的租户中创建 VNFs

  • 跨 VIM 的资源利用率和管理

  • 跨多站点 VNFs 的 SFC

  • 对非 OpenStack VIM 类型(如 VMware、Xen、KVM)的支持

使用 AWS、Azure 等公共云的混合云部署超出了本蓝图的范围。

备选方案

解决多站点挑战的替代方法是在每个 OpenStack 实例上部署 Tacker 服务器,并允许它们管理本地部署的 VNFs。在数千个 OpenStack 实例中部署 Tacker 服务器,并在这些实例中执行 VNF 生命周期管理在实践中会让人不知所措。

有诸如 Keystone 联合 [2]、OPNFV 多站点 [3] 和 Tricircle [4] 等项目正在进行工作以解决多站点挑战。随着这些项目在未来迭代中不断发展,Tacker 可以帮助向这些项目添加 NFVO/VNFM 要求。电信基础设施中独特的流程以及不断发展的 NFV 要求给在单个阶段实现 NFVO 提出了挑战。因此,以迭代的方式开发此组件并解决一些直接要求是实用的。

数据模型影响

将向 Tacker 资源模型添加一个新的 ‘vim’ 资源,其属性包括 id、name、description、placement_attr、type 和 tenant_id。一个新的 ‘vimauth’ 资源将包含 VIM 的身份验证信息,并将包括以下属性:id、vim_id、password、auth_url、auth_attr。现有的 ‘device’ 资源将被修改,以包含一个新的属性 ‘vim_id’,该属性映射到部署 VNF 的 ‘vim’ 资源。 ‘vim’ db 表中的每个 ‘vim’ 条目都由一个 UUID 唯一标识。相同的 UUID 将与 ‘device’ 表中相应 VNF 条目中的 vim_id 相关联。

REST API 影响

将在 Tacker API v1 中引入一个新的 ‘nfvo’ 扩展,该扩展实现 ‘vim’ 资源的 REST API 端点,如下所示

/vim

+---------------------------------------------------------------------------+
|Attribute     |Type   |Access  |Default   |Validation/ |Description        |
|Name          |       |        |Value     |Con^ersion  |                   |
+---------------------------------------------------------------------------+
|id            |string |RO, All |generated |N/A         |identity           |
|              |(UUID) |        |          |            |                   |
+---------------------------------------------------------------------------+
|name          |string |RW, All |''        |string      |human+readable     |
|              |       |        |          |            |name               |
+---------------------------------------------------------------------------+
|description   |string |RW, All |''        |string      |description of     |
|              |       |        |          |            |template           |
+---------------------------------------------------------------------------+
|auth_url      |string |RW, All |''        |string      |identity service   |
|              |       |        |          |            |endpoint           |
+---------------------------------------------------------------------------+
|auth_attr     |string |RW, All |None      |string      |tenant_name, user- |
|              |       |        |          |            |name, password, etc|
+---------------------------------------------------------------------------+
|placement_attr|dict   |RO, All |None      |dict        |VIM region and     |
|              |       |        |          |            |availability zones |
+---------------------------------------------------------------------------+
|tenant_id     |string |RO, All |N/A       |string      |project id of VIM  |
+---------------------------------------------------------------------------+
|type          |string |RW, All |openstack |string      |driver implementing|
|              |       |        |          |            |VIM specific logic |
+--------------+-------+--------+----------+--------------------------------+

安全影响

VIM 密码已加密并存储在仅供 db 管理员访问的单独 ‘vimauth’ 表中。fernet 密钥存储在根文件系统中,并将用于解密 vim 密码。

安全的 VNF 间通信将是我们在增强多站点 VIM 功能以支持 SFC 和其他复杂 NFV 用例时需要考虑的一个重要因素。

通知影响

其他最终用户影响

Horizon dashboard 将在 ‘NFV’ 选项卡下包含一个新的 ‘NFVO’ 功能,该功能可用于添加新的 VIM 并列出当前的 VIM。python-tackerclient 将包括必要的更改以支持 VIM CRUD 命令。一个新的可选参数 –vim-id 将提供给 vnf-create 工作流程以及其他可选参数,如 Proposed Changes 部分中已经列出。

操作员必须在 tacker.conf 的 [nfvo] 部分配置默认 VIM 信息:default_vim = <vim_name>。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

sseetha

其他贡献者

工作项

  • 向 tacker v1 添加新的 ‘vim’ 扩展并实现了 ‘vim’ 插件基础。

  • Tacker DB 配置 ‘vim’、‘vimauth’ 和 ‘device’ 表,包括 alembic 迁移脚本。

  • 修改 vnfm 插件和 heat infra 驱动程序以处理 VNF 的 VIM 选项。

  • 针对多站点 VIM 支持更改 tacker-horizon 和 python-tackerclient。

  • 添加多站点 VIM 支持的单元测试用例

  • 修改 devstack tacker 插件以自动配置默认本地 VIM (VIM0)。

  • 添加多站点 VIM 支持的功能测试用例。

  • 提供用户文档和开发人员文档,解释多站点 VIM 支持。

依赖项

测试

单元测试

将为新的扩展编写单元测试用例。此外,现有的 vnfm 测试插件将被扩展,以添加 vim_id 选项的附加测试用例。

功能测试

将添加新的功能测试用例用于 VIM CRUD 操作。将提供新的 VNFM 测试用例来测试 vnf-register 工作流程的 vim_id 选项。

场景测试

此功能需要场景测试用例来验证多站点部署中的操作。截至撰写本文,OpenStack Jenkins gate 尚不支持使用 devstack 进行多区域测试场景 [5]

文档影响

用户文档

多站点 VIM 功能的使用将在 Tacker 使用指南 [6] 中记录,该指南将描述操作员可以用于新的和现有的 OpenStack 部署的 VIM 操作。VNF 部署指南将被修改,以描述 python-tackerclient 和 tacker-horizon 中新可选参数 vim_id 的使用。

开发人员文档

将添加开发人员文档以详细记录 VIM REST API。

参考资料