04-ceph用户管理(mon)

一、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”

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

请登录后发表评论

    没有回复内容