Cinder 内部租户

https://blueprints.launchpad.net/cinder/+spec/cinder-internal-tenant

本规范提出添加配置选项和内部管道,以支持 cinder 内部租户。然后,Cinder 可以使用此租户作为内部对象的所有者,这些对象我们实际上不希望由任何普通用户拥有。

问题描述

存在几种“内部” cinder 对象的使用场景,在这种情况下,我们希望防止普通用户查看它们。目前看来,获得支持最多的方法是使用 cinder 可以用来拥有这些内部卷/快照/等的特殊租户。

用例

内部租户有几个不同的使用场景。通用场景是 Cinder 中任何我们不想暴露给普通用户,但希望跟踪并将其视为正常卷和快照的对象。

一些功能可以利用这一点

  • 镜像缓存 - 作为镜像缓存一部分的卷(以及可能存在的快照)可以由该租户拥有。

  • 卷迁移 - 在迁移过程中使用的临时卷可以由 cinder-internal 租户拥有。

  • 非破坏性备份 - 临时快照和卷可以由 cinder-internal 租户拥有。

提议的变更

我认为最初实现此功能的最简单方法是添加新的配置选项,以获取该租户的凭据。这将需要管理员手动创建和配置租户,然后将值设置在 cinder.conf 中。这些配置选项将是

  • cinder_internal_tenant_username

  • cinder_internal_tenant_password

这些配置选项将默认设置为“None”。对于镜像缓存等某些功能,这问题不大。如果凭据为 none,并且租户不可用,则缓存将不会实际创建缓存对象,并且一切将回退到原始功能。但是,对于迁移或备份等功能,如果它们无法很好地回退到不需要凭据的行为,则会更加困难。

配额和其他权限等将仅由管理员管理,Cinder 不会自动修改任何内容。将来,可以为配置选项提供默认值,并允许 cinder 管理租户。此功能将超出此初始实现的范围。

对于初始更改,我认为我们不应该将这些信息保存在 cinder 数据库中。所有内容都来自配置文件,并在启动时重新检查。

对租户对象的使用应假定它们可以随时删除或清理。我认为这与今天的情况没有区别,即用户可以在迁移过程中删除第二个卷。因此,这不是一个回归。其背后的想法是,管理员可以定期清理这些对象(如果它们开始累积),但您无需担心哪些是“安全”的。

备选方案

另一种解决此问题的方法是在卷和快照上添加“隐藏”标志。最大的缺点是所有 API 都需要了解这一点并开始过滤,并且客户端和命令可能需要新的“--hidden”或“--show-all”之类的标志。此外,这些隐藏卷可能从真实用户那里获取配额,或者根本不进行统计。

数据模型影响

REST API 影响

安全影响

需要小心确保租户凭据不会暴露给云管理员以外的任何人,并且用户不能以内部租户身份创建卷或其他对象。

通知影响

其他最终用户影响

此更改本身不应产生任何最终用户影响。构建在其之上的内容可能会改变用户在使用 migrate 等命令时看到的内容。

性能影响

其他部署者影响

新的配置选项和配置 cinder 时的设置步骤。

需要阅读的附加文档。

开发人员影响

用于以内部租户身份创建对象的新内部 API。

实现

负责人

主要负责人

patrick-east

其他贡献者

工作项

  • 添加对新配置选项的支持。

  • 添加实用函数以获取租户信息以及使用内部租户进行操作所需的任何其他信息。

  • 可能在 DevStack 中添加支持,以便默认配置此功能,以便在功能之上进行未来的开发。

  • 有关创建和配置租户的文档。

依赖项

测试

实用函数的单元测试。

此更改本身不需要 tempest 测试更改或添加,但使用它的功能需要。

文档影响

参考资料