一、ceph集群用户管理
1.用户格式及权限说明
1.1 用户格式
- ceph的用户格式”TYPEID.USERID”
- TYPEID:
- 指定的是用户类型,括内置组件用户(mon,mds,rgw,osd,mgr)和普通用户(client)
- USERID:
- 就是用户名,可以是数字,比如表示ods的第0块磁盘,对应的是”ods.0″;
- 也可以是字符串,比如管理员用户,对应的是”client.admin”;
- 当然,用户可以自定义USERID,比如”client.dezyan”,”client.dingzhiyan”
- TYPEID:
1.2 常用的权限
每个用户都可以授权,使用caps字段关联。授权的格式”allow 权限”
- r:
读权限
- w:
写权限
- x:
执行权限,可以调用方法(这些方法可能存在读写等操作),还可以执行mon的auth等相关命令。
- *:
拥有rwx等权限。
- class-read:
拥有x能力的子集,授予用户调用类读取方法的能力。
- class-write:
拥有x能力的子集,授予用户调用类写入方法的能力。
- profile osd:
授予用户一某个OSD身份连接到其他OSD或监视器的权限,可以获取OSD的状态信息。
- profile mds:
授予用户以某个MDS身份连接到其他MDS或监视器的权限,可以获取mds的状态信息。
- profile bootstrap-osd:
授予用于引导OSD的权限,在部署时候产生。
- profile bootstrap-mds:
授予用于引导元数据服务器的权限,在部署时候产生。
示例
[root@ceph141 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAkRepnl8QHDhAAajK/aMH1KaCoVJWt5H2NOQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
1.3 权限配置的官方文档
https://docs.ceph.com/en/latest/rados/operations/user-management/#authorization-capabilities
https://docs.ceph.com/en/nautilus/rados/operations/user-management/
2.查看内置的用户
官方文档:
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#get-a-user
2.1 查看指定用户
[root@ceph141 ~]# ceph auth get client.admin
[client.admin]
key = AQBHnepnUo4UHhAAahGjcxqpUtjlfKtRhkR0WA==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
2.2 查看所有用户
[root@ceph141 ~]# ceph auth ls
[root@ceph141 ~]# ceph auth list
osd.0
key: AQBOoepnzdEYJRAAmVCPxN0EjwlETAZh+CU4CQ==
caps: [mgr] allow profile osd
caps: [mon] allow profile osd
caps: [osd] allow *
………………
client.admin
key: AQBHnepnUo4UHhAAahGjcxqpUtjlfKtRhkR0WA==
caps: [mds] allow *
caps: [mgr] allow *
caps: [mon] allow *
caps: [osd] allow *
client.bootstrap-mds
key: AQBKnepnP7nkAhAAINAfNUhJq0zY3OVeTchD6w==
caps: [mon] allow profile bootstrap-mds
………………
client.ceph-exporter.ceph141
key: AQClnepnDI1OMxAAWzlaly7fXT8waigczh8PHw==
caps: [mgr] allow r
caps: [mon] profile ceph-exporter
caps: [osd] allow r
………………
client.crash.ceph141
key: AQCnnepnRZxhDxAAhGtFaEDgiaCOF1jPbBb7MA==
caps: [mgr] profile crash
caps: [mon] profile crash
………………
mgr.ceph141.nlpdhr
key: AQBHnepnSTvbJRAA2lnN0tnHTkhLA+vWgaunGQ==
caps: [mds] allow *
caps: [mon] profile mgr
caps: [osd] allow *
…………
3.三种方式自定义普通用户
官方文档
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#add-a-user
3.1 “ceph auth add” 创建用户
[root@ceph141 ~]# ceph auth add client.dezyan mon 'allow r' osd 'allow rwx pool=mysql'
added key for client.dezyan
3.2 “ceph auth get-or-create”创建用户
若某个用户不存在,直接使用get查看是查询不到的
[root@ceph141 ~]# ceph auth get client.ding
Error ENOENT: failed to find client.ding in keyring
使用ceph auth get-or-create
后,
如果该用户不存在,则会根据命令配置的权限信息创建新用户,并返回key
[root@ceph141 ~]# ceph auth get-or-create client.dzy mon 'allow r' osd 'allow rwx'
[client.dzy]
key = AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
如果用户已经存在,不会创建,会直接返回key
注意:早期版本会报错,但19.2.1不会报错
[root@ceph141 ~]# ceph auth get-or-create client.dzy mon 'allow r' osd 'allow rwx'
[client.dzy]
key = AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
[root@ceph141 ~]# ceph auth get client.dzy
[client.dzy]
key = AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
caps mon = "allow r"
caps osd = "allow rwx"
3.3 “ceph auth get-or-create-key”创建用户
与ceph auth get-or-create
效果一样
[root@ceph141 ~]# ceph auth get-or-create-key client.k8s mon 'allow r' osd 'allow rwx'
AQBBq+xnMa/1JRAAid00HG0PPQrx3h4MT9x0Dg==
[root@ceph141 ~]# ceph auth get client.k8s
[client.k8s]
key = AQBBq+xnMa/1JRAAid00HG0PPQrx3h4MT9x0Dg==
caps mon = "allow r"
caps osd = "allow rwx"
4 “ceph auth print-key”打印已经存在用户的KEY
#信息全部输出
[root@ceph141 ~]# ceph auth get client.k8s
[client.k8s]
key = AQBBq+xnMa/1JRAAid00HG0PPQrx3h4MT9x0Dg==
caps mon = "allow r"
caps osd = "allow rwx"
#只输出key,注意,用户不存在会报错
[root@ceph141 ~]# ceph auth print-key client.dzy;echo
AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
5.修改用户权限,直接覆盖权限
官方文档
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#modify-user-capabilities
#查看现有权限
[root@ceph141 ~]# ceph auth get client.dzy
[client.dzy]
key = AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
caps mon = "allow r"
caps osd = "allow rwx"
#重新授予权限,覆盖旧权限
[root@ceph141 ~]# ceph auth caps client.dzy mon 'allow rx' osd 'allow r pool=mysql'
[client.dzy]
key = AQBaquxnULQMORAAWtWxuZYLxLksoPFId6vLOQ==
caps mon = "allow rx"
caps osd = "allow r pool=mysql"
updated caps for client.dzy
6.删除用户
参考链接:
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#delete-a-user
[root@ceph141 ~]# ceph auth del client.dzy
二、ceph用户的备份和恢复
参考链接:
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#get-a-user
https://docs.ceph.com/en/nautilus/rados/operations/user-management/#import-a-user-s
1.创建测试用户
[root@ceph141 ~]# ceph auth add client.dzy mon 'allow rwx' osd 'allow r pool=mysql'
added key for client.dzy
[root@ceph141 ~]# ceph auth get client.dzy
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
2.三种导出用户到文件,用于模拟备份
2.1 先创建一个600的权限文件,然后再导入内容
#此命令只是创建了一个普通文件
[root@ceph141 ~]# ceph-authtool --create-keyring ceph.client.dzy.keyring
creating ceph.client.dzy.keyring
#创建的问价权限为600
[root@ceph141 ~]# ll ceph.client.dzy.keyring
-rw------- 1 root root 0 Apr 2 15:12 ceph.client.dzy.keyring
# 将内容导出到指定文件
[root@ceph141 ~]# ceph auth get client.dzy -o ceph.client.dzy.keyring
[root@ceph141 ~]# cat ceph.client.dzy.keyring
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
2.2 直接导出到文件,但是文件的权限是644
[root@ceph141 ~]# ceph auth export client.dzy -o dzy.keyring
[root@ceph141 ~]# cat dzy.keyring
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
#直接导出的权限为644
[root@ceph141 ~]# ll dzy.keyring
-rw-r--r-- 1 root root 118 Apr 2 15:15 dzy.keyring
2.3 直接重定向到文件,权限默认为644
[root@ceph141 ~]# ceph auth get client.dzy > myuser.keyring
[root@ceph141 ~]# ll myuser.keyring
-rw-r--r-- 1 root root 118 Apr 2 15:16 myuser.keyring
[root@ceph141 ~]# cat myuser.keyring
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
3.删除用户
[root@ceph141 ~]# ceph auth del client.dzy
4.导入用户,用于模拟恢复
[root@ceph141 ~]# cat dzy.keyring
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
#使用文件恢复
[root@ceph141 ~]# ceph auth import -i dzy.keyring
#查看用户,恢复成功
[root@ceph141 ~]# ceph auth get client.dzy
[client.dzy]
key = AQB94exnGQFkERAAReV/YFIlcOiNMGp8SrpFpw==
caps mon = "allow rwx"
caps osd = "allow r pool=mysql"
三、导出授权文件并验证用户权限
1.创建用户
[root@ceph141 ~]# ceph auth get-or-create client.k3s mon 'allow r' osd 'allow * pool=harbor'
[client.k3s]
key = AQDU6OxnexytBBAAfNd3T7iXR3beW5SMa5OVpQ==
[root@ceph141 ~]# ceph auth get client.k3s
[client.k3s]
key = AQDU6OxnexytBBAAfNd3T7iXR3beW5SMa5OVpQ==
caps mon = "allow r"
caps osd = "allow * pool=harbor"
2.导出用户授权文件,钥匙环(keyring)
[root@ceph141 ~]# ceph auth export client.k3s -o ceph.client.k3s.keyring
[root@ceph141 ~]# cat ceph.client.k3s.keyring
[client.k3s]
key = AQDU6OxnexytBBAAfNd3T7iXR3beW5SMa5OVpQ==
caps mon = "allow r"
caps osd = "allow * pool=harbor"
3.拷贝授权文件前,观察客户端是否有查看集群的权限
#当前客户端无集群相关的任何权限
[root@test01 ~]# ll /etc/ceph/
total 12
drwxr-xr-x 2 root root 4096 Apr 2 15:56 ./
drwxr-xr-x 130 root root 4096 Apr 2 15:56 ../
-rw-r--r-- 1 root root 92 Dec 18 22:48 rbdmap
4.将授权文件拷贝到客户端
[root@ceph141 ~]# scp ceph.client.k3s.keyring /etc/ceph/ceph.conf 10.0.0.150:/etc/ceph
[root@test01 ~]# ll /etc/ceph
total 20
drwxr-xr-x 2 root root 4096 Apr 2 16:42 ./
drwxr-xr-x 130 root root 4096 Apr 2 15:56 ../
-rw-r--r-- 1 root root 259 Apr 2 15:58 ceph.conf
-rw-r--r-- 1 root root 117 Apr 2 16:42 ceph.k3s.keyring
-rw-r--r-- 1 root root 92 Dec 18 22:48 rbdmap
5.验证权限
[root@test01 ~]# ceph -s --user k3s
cluster:
id: de7264fa-0e36-11f0-8f7b-9771d5b41507
health: HEALTH_WARN
clock skew detected on mon.ceph142
2 pool(s) do not have an application enabled
services:
mon: 3 daemons, quorum ceph141,ceph142,ceph143 (age 9h)
mgr: ceph141.nlpdhr(active, since 23h), standbys: ceph142.yyzyhv
mds: 1/1 daemons up, 1 standby
osd: 9 osds: 9 up (since 6h), 9 in (since 42h)
data:
volumes: 1/1 healthy
pools: 6 pools, 411 pgs
objects: 44 objects, 464 KiB
usage: 702 MiB used, 5.3 TiB / 5.3 TiB avail
pgs: 411 active+clean
#查看该用户所管理的存储池的所有块设备
[root@test01 ~]# rbd -p harbor ls -l --user k3s
NAME SIZE PARENT FMT PROT LOCK
test01 2 GiB 2
rbd: --user is deprecated, use --id
#提示我们--user不建议使用了,建议使用--id
[root@test01 ~]# rbd -p harbor ls -l --id k3s
NAME SIZE PARENT FMT PROT LOCK
test01 2 GiB 2
6.服务端创建rbd块设备
#创建存储池
[root@ceph141 ~]# ceph osd pool create harbor 16 16 --autoscale_mode off --size 3
pool 'user' created
#声明存储作用(将user存储池与rbd关联起来)
[root@ceph141 ~]# ceph osd pool application enable harbor rbd
enabled application 'rbd' on pool 'user'
#创建连个块存储设备
[root@ceph141 ~]# rbd create -s 2G harbor/zhangsan
[root@ceph141 ~]# rbd create -s 2G harbor/lisi
#查看
[root@ceph141 ~]# rbd ls -l user
NAME SIZE PARENT FMT PROT LOCK
lisi 2 GiB 2
zhangsan 2 GiB 2
7.客户端验证
[root@test01 ~]# rbd -p harbor ls -l --id k3s
NAME SIZE PARENT FMT PROT LOCK
lisi 2 GiB 2
test01 2 GiB 2
zhangsan 2 GiB 2
四、授权文件加载顺序总结
1.如果使用”–user k3s”指定用户,则默认去找以下文件,找不到就报错:
- /etc/ceph/ceph.client.k3s.keyring
- /etc/ceph/ceph.keyring
- /etc/ceph/keyring
- /etc/ceph/keyring.bin
2.如果不使用”–user”选项,咱们可以立即为默认为”–user amdin”
- /etc/ceph/ceph.client.admin.keyring
- /etc/ceph/ceph.keyring
- /etc/ceph/keyring
- /etc/ceph/keyring.bin
3.对于认证文件不能随便起名字。
而是需要遵循上述2条的规范文件命名,否则ceph不识别用户的配置文件
4.客户端在连接ceph集群时,仅需要读取keyring文件中的KEY值。
其他caps字段会被忽视。也就是说,对于文件中只要保留key值依旧是有效的。
[root@test01 ~]# /etc/ceph/ceph.client.k3s.keyring
[client.k3s]
key = AQDU6OxnexytBBAAfNd3T7iXR3beW5SMa5OVpQ==
#也就是说,下面两行在客户端可以删除
caps mon = "allow r"
caps osd = "allow * pool=harbor"
来源链接:https://www.cnblogs.com/dezyan/p/18807701
没有回复内容