Mon:元数据服务器,维护整个集群的运行图,PG等

OSD:每个磁盘一个OSD进程,管理这个磁盘的存取任务,向Mon报告等。

Mgr:新版本的Ceph、状态统计数据等任务,与Mon通信,无状态服务。

MDS:radows的客户端、接口、提供cephfs文件系统、是个服务。

RBD:库文件,块存储。

RGW:提供对象存储。


CephX Protocol:负责认证和授权检测


CephX认证机制:

Ceph使用cephx协议对客户端进行身份认证:

        每个MON都可以对客户端进行身份验正并分发密钥, 不存在单点故障和性能瓶颈

        MON会返回用于身份验正的数据结构, 其包含获取Ceph服务时用到的session key。

        session key通过客户端密钥进行加密

        客户端使用session key向MON请求所需的服务

        MON向客户端提供一个ticket, 用于向实际处理数据的OSD等验正客户端身份

        MON和OSD共享同一个secret, 因此OSD会信任由MON发放的ticket

        ticket存在有效期限

注意:

        CephX身份验正功能仅限制Ceph的各组件之间, 它不能扩展到其它非Ceph组件;

        它并不解决数据传输加密的问题;


认证与授权:

        无论Ceph客户端是何类型, Ceph都会在存储池中将所有数据存储为对象

        Ceph用户需要拥有存储池访问权限才能读取和写入数据

        Ceph用户必须拥有执行权限才能使用Ceph的管理命令

相关概念:

        用户

        授权

        使能(Capabilities)


用户:

        用户是指个人或系统参与者( 例如应用)

        通过创建用户, 可以控制谁( 或哪个参与者) 能够访问Ceph存储集群、 以及可访问的存储池及存储池中的数据。

        Ceph支持多种类型的用户, 但可管理的用户都属于Client类型

        区分用户类型的原因在于, MON、 OSD和MDS等系统组件也使用cephx协议, 但它们非为客户端

        通过点号来分隔用户类型和用户名, 格式为TYPE.ID, 例如client.admin等


授权和使能:

        Ceph基于“使能(caps)”来描述用户可针对MON、 OSD或MDS使用的权限范围或级别

        通用语法格式: daemon-type 'allow caps' [...]

MON使能:

        包括r、 w、 x和allow profile cap

        例如: mon 'allow rwx', 以及mon 'allow profile osd'等

OSD使能:

        包括r、 w、 x、 class-read、 class-write和profile osd

        此外, OSD 使能还允许进行存储池和名称空间设置

MDS使能:

        只需要allow, 或留空


各项使能的意义:

allow

        需先于守护进程的访问设置指定

        仅对MDS表示rw之意, 其它的表示字面意义

r:读取权限, 访问MON以检索CRUSH时依赖此使能

w:对象写入权限

x:调用类方法( 读取和写入) 的能力, 以及在MON上执行auth操作的能力

class-read: x能力的子集, 授予用户调用类读取方法的能力

class-write: x的子集, 授予用户调用类写入方法的能力

*: 授予用户对特定守护进程/存储池的读取、 写入和执行权限, 以及执行管理命令的能力。


各项使能的意义:

profile osd:

        授予用户以某个OSD身份连接到其他OSD或监视器的权限

        授予OSD权限, 使OSD能够处理复制检测信号流量和状态报告

profile mds:

        授予用户以某个MDS身份连接到其他MDS或监视器的权限

profile bootstrap-osd:

        授予用户引导OSD的权限

        授权给部署工具, 使其在引导OSD时有权添加密钥

profile bootstrap-mds:

        授予用户引导元数据服务器的权限

        授权给部署工具, 使其在引导元数据服务器时有权添加密钥



用户管理


Ceph集群管理员能够直接在Ceph集群中创建、 更新和删除用户

        创建用户时, 可能需要将密钥分发到客户端, 以便将密钥添加到密钥环

列出用户

命令:

ceph auth list

用户标识: TYPE.ID, 因此, osd.0表示OSD类型的用户, 用户ID为0

检索特定用户

命令:

ceph auth get TYPE.ID

或者

ceph auth export TYPE.ID

例:导出为配置文件

ceph auth get client.k8s > ceph.client.k8s.keyring
exported keyring for client.k8s


添加用户:

ceph auth add: 规范方法,它能够创建用户、生成密钥并添加指定的caps。

例:添加用户,并分配权限

]$ ceph auth add client.testuser mon 'allow r' osd 'allow rw pool=rbdpool' 
added key for client.testuser

获取用户信息:

]$ ceph auth get client.testuser
exported keyring for client.testuser
[client.testuser]
	key = AQBFFRheU6QwMhAA6DHO0F4wTOQ+x/r2x5dbpw==
	caps mon = "allow r"
	caps osd = "allow rw pool=rbdpool"

ceph auth get-or-create: 简便方法,创建用户并返回密钥文件格式的密钥信息, 或者在用户存在时返回用户名及密钥文件格式的密钥信息。

例:

]$ ceph auth get-or-create client.testuser
[client.testuser]
	key = AQBFFRheU6QwMhAA6DHO0F4wTOQ+x/r2x5dbpw==

ceph auth get-or-create-key:简便方法,创建用户并返回密钥信息,或者在用户存在时返回密钥信息。

例:

]$ ceph auth get-or-create-key client.testuser
AQBFFRheU6QwMhAA6DHO0F4wTOQ+x/r2x5dbpw==

        注意: 典型的用户至少对 Ceph monitor 具有读取功能, 并对 Ceph OSD 具有读取和写入功能; 另外, 用户的 OSD 权限通常应该限制为只能访问特定的存储池, 否则, 他将具有访问集群中所有存储池的权限。

查看用户key:

ceph auth print-key TYPE.ID

例:

]$ ceph auth print-key client.testuser
AQBFFRheU6QwMhAA6DHO0F4wTOQ+x/r2x5dbpw==[cephadm@ceph01 ceph-cluster]$

导入用户:需要指定密钥环,将其他ceph集群的账户秘钥导入到集群,使其拥有一样的用户和权限。

ceph auth import

修改用户权限:

ceph auth caps

会覆盖用户现有的caps, 因此建立事先使用ceph auth get TYPE.ID命令查看用户的caps

若是为添加caps, 则需要先指定现有的caps

命令格式:

ceph auth caps TYPE.ID daemon 'allow [r|w|x|*|...] [pool=pool-name] [namespace=namespace-name]' ...

例:

]$ ceph auth caps client.testuser mon 'allow rw' osd 'allow rw pool=rbdpool'
updated caps for client.testuser

删除用户:

ceph auth del TYPE.ID

例:

]$ ceph auth del client.testuser
updated


keyring


keyring:秘钥环,同时存储秘钥、密码、key、证书并使某个应用程序可用的一类文件的集合。

        ceph-authtool 管理keyring文件的命令,可以创建、查看、修改keyring文件的内容。ceph auth命令是通过进程来管理用户创建的,ceph-authtool是直接管理文件的。

        client、osd、mds、mgr联系mon时都要本地的keyring文件。

        访问Ceph集群时, 客户端会于本地查找密钥环。默认情况下, Ceph会使用以下四个密钥环名称预设密钥环:

        /etc/ceph/cluster-name.user-name.keyring: 保存单个用户的keyring

        /etc/ceph/cluster.keyring: 保存多个用户的keyring

        /etc/ceph/keyring

        /etc/ceph/keyring.bin

cluster-name是为集群名称, user-name是为用户标识( TYPE.ID)

client.admin用户的在名为ceph的集群上的密钥环文件名为ceph.client.admin.keyring


管理keyring:

创建keyring

ceph auth add等命令添加的用户还需要额外使用ceph-authtool命令为其创建用户密钥

ceph客户端通过keyring文件查找用户名并检索密钥

ceph-authtool --create-keyring /path/to/kerying

注意:

keyring文件一般应该保存于/etc/ceph目录中, 以便客户端能自动查找

创建包含多个用户的keyring文件时, 应该使用cluster-name.keyring作为文件名

创建仅包含单个用户的kerying文件时, 应该使用cluster-name.user-name.keyring作为文件名


将用户添加至keyring:

一、可将某个用户从包含多个用户的keyring中导出, 并保存于一个专用的keyring文件

ceph auth get TYPE.ID -o /etc/ceph/cluster-name.user-name.keyring

例:使用ceph auth创建账号并导出,只要将ceph.client.kube.keyring这个文件导入到k8s集群的每个节点就可读写执行存储池kube了。

]$ ceph auth get-or-create client.kube mon 'allow r' osd 'allow * pool=kube'
[client.kube]
	key = AQAKNRheZ7bbJhAApDS8zchajEOahfRpWGKgWA==

]$ ceph auth get client.kube
exported keyring for client.kube
[client.kube]
	key = AQAKNRheZ7bbJhAApDS8zchajEOahfRpWGKgWA==
	caps mon = "allow r"
	caps osd = "allow * pool=kube"

]$ ceph auth get client.kube -o ceph.client.kube.keyring
exported keyring for client.kube


二、也可将用户的keyring合并至一个统一的keyring文件中

ceph-authtool /etc/ceph/cluster-name.keyring --import-key /etc/ceph/clustername.user-name.keyring

例:将 ceph.client.admin.keyring 和 ceph.client.kube.keyring 导入到 cluster.keyring 文件中。

ceph-authtool --create-keyring cluster.keyring
ceph-authtool cluster.keyring --import-keyring ./ceph.client.kube.keyring
ceph-authtool cluster.keyring --import-keyring ./ceph.client.admin.keyring

]$ cat cluster.keyring 
[client.admin]
	key = AQBLTgtefg4aGBAACNWqns/twcuFgG/ObWO7Og==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"
[client.kube]
	key = AQAKNRheZ7bbJhAApDS8zchajEOahfRpWGKgWA==
	caps mon = "allow r"
	caps osd = "allow * pool=kube"


使用ceph-authtool命令管理用户:

ceph-authtool命令可直接创建用户、 授予caps并创建keyring

ceph-authtool keyringfile [-C | --create-keyring] [-n | --name entityname] [--genkey] [-a | --add-key base64_key] [--cap | --caps capfile]

命令选项:

-C, --create-keyring:will create a new keyring, overwriting any existing keyringfile

--gen-key:will generate a new secret key for the specified entityname

--add-key:will add an encoded key to the keyring

--cap subsystem capability:will set the capability for given subsystem

--caps capsfile:will set all of capabilities associated with a given key, for all subsystems

注意:此种方式添加的用户仅存在于keyring文件中,管理员还需要额外将其添加至Ceph集群上。

ceph auth add TYPE.ID -i /PATH/TO/keyring