第 5 章 用户管理
本节介绍 Ceph 客户端用户,以及他们通过红帽 Ceph 存储集群的身份验证和授权。用户可以是个人或系统执行者,如应用,它们使用 Ceph 客户端与红帽 Ceph 存储集群守护进程交互。
当 Ceph 在运行时启用身份验证和授权(默认为启用)时,您必须指定包含指定用户的 secret key(通常使用命令行)的用户名和密钥环。如果不指定用户名,Ceph 将使用 client.admin
管理用户作为默认用户名。如果没有指定密钥环,Ceph 将使用 Ceph 配置中的 keyring
设置来查找密钥环。例如:如果您在没有指定用户或密钥环的情况下执行 ceph health
命令:
# ceph health
Ceph 将该命令解释如下:
# ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health
另外,您可以使用 CEPH_ARGS
环境变量以避免重新输入用户名和 secret。
有关将红帽 Ceph 存储集群配置为使用身份验证的详细信息,请参阅红帽 Ceph 存储 3 的配置指南。
5.1. 背景信息
无论 Ceph 客户端的类型如何,如块设备、对象存储、文件系统、原生 API 或 Ceph 命令行,Ceph 将所有数据存储为池内的对象。Ceph 用户必须有权访问池,才能读取和写入数据。此外,管理 Ceph 用户必须具有执行 Ceph 管理命令的权限。以下概念将帮助您了解 Ceph 用户管理:
5.1.1. 用户
红帽 Ceph 存储集群的用户是一个或多个个人或系统操作程序,如应用程序。通过创建用户,您可以控制谁(或什么)可以访问存储集群、其池和池中的数据。
Ceph 具有用户 type
的概念。出于用户管理的目的,类型将始终为 client
。Ceph 以句点(.)分隔形式标识用户,其由用户类型和用户 ID 组成:例如 TYPE.ID
、client.admin
或 client.user1
。用户调用的原因在于 Ceph 监视器和 OSD 也使用 Cephx 协议,但它们不是客户端。区分用户类型有助于区分客户端用户和其他用户 - 提取访问控制、用户监控和可追溯性。
有时,Ceph 的用户类型可能会看上去有些混淆,因为 Ceph 命令行允许您根据命令行使用情况来指定包含或不使用类型的用户。如果指定了 --user
或 --id
,您可以省略 类型。因此 client.user1
只需输入为 user1
。如果指定了 --name
或 -n
,您必须指定类型和名称,如 client.user1
。我们建议尽可能将类型和名称用作最佳做法。
红帽 Ceph 存储集群用户与 Ceph 对象存储用户不同。对象网关使用红帽 Ceph 存储集群用户在网关守护进程和存储集群之间进行通信,但该网关对其最终用户有自己的用户管理功能。
5.1.2. 授权(功能)
Ceph 使用术语"功能"(容量)来描述授权经过身份验证的用户来练习 monitor 和 OSD 的功能。功能还可以限制对池中数据或池中命名空间的数据的访问。Ceph 管理用户在创建或更新用户时设置用户的功能。
功能语法采用以下形式:
<daemon_type> 'allow <capability>' [<daemon_type> 'allow <capability>']
monitor Caps: 监控器功能包括
r
、w
、x
、allow profile <cap>
和profile rbd
。例如:mon 'allow rwx` mon 'allow profile osd'
OSDCaps: OSD 功能包括
r
、w
、x
、class-read
、class-write
、profile osd
、profile rbd
和profile rbd-read-only
。此外,OSD 功能也允许对池和命名空间设置。osd 'allow <capability>' [pool=<pool_name>] [namespace=<namespace_name>]
Ceph 对象网关守护进程(radosgw
)是 Ceph 存储集群的客户端,因此它不表示为 Ceph 存储集群守护进程类型。
以下条目描述了每种功能:
| 在守护进程的访问设置之前。 |
| 授予用户读取访问权限。需要使用 monitor 来检索 CRUSH map。 |
| 授予用户对对象的写入访问权限。 |
|
为用户提供调用类方法(即读取和写入)并对 monitor 执行 |
|
赋予用户调用类读取方法的功能。 |
|
赋予用户调用类写入方法的功能。 |
| 授予用户特定守护进程或池的读取、写入和执行权限,以及执行 admin 命令的功能。 |
| 授予用户权限,以 OSD 身份连接到其他 OSD 或 monitor。调用 OSD,使 OSD 能够处理复制心跳流量和状态报告。 |
| 为用户授予引导 OSD 的权限,以便他们在引导 OSD 时具有添加密钥的权限。 |
| 授予用户对 Ceph 块设备的读写访问权限。 |
| 授予用户对 Ceph 块设备的只读访问权限。 |
5.1.3. 池
池为 Ceph 客户端定义存储策略,并充当该策略的逻辑分区。
在 Ceph 部署中,通常要创建一个池来支持不同类型的用例,如云卷/镜像、对象存储、热存储、冷存储等。将 Ceph 部署为 OpenStack 的后端时,典型的部署具有卷、镜像、备份和虚拟机等用户的池,以及 client.glance
、client.cinder
等用户。
5.1.4. 命名空间
池中的对象可以关联到池中的 namespace-a 逻辑对象组。用户对池的访问权限可以与命名空间关联,这样用户的读取和写入只能在命名空间内进行。写入到池中命名空间的对象只能由有权访问命名空间的用户访问。
目前,命名空间仅适用于在 librados
上写入的应用程序。块设备和对象存储等 Ceph 客户端目前不支持此功能。
命名空间的理由是池可以是按用例分隔数据的计算方式,因为每个池都会创建一组映射到 OSD 的 PG。如果多个池使用相同的 CRUSH 层次结构和规则集,OSD 性能可能会随着负载的增加而降级。
例如,池应当为每个 OSD 拥有大约 100 个 PG。因此,具有 1000 个 OSD 的示范集群将具有 100,000 个池的放置组。映射到同一 CRUSH 层次结构和规则集的每个池都会在示例集群中再创建 100,000 个放置组。相比之下,将对象写入命名空间只是将命名空间与对象名称关联,与单独池的计算开销无关。您可以使用命名空间,而不是为用户或一组用户创建单独的池。
目前只能使用 librados
。