Ceph配置与认证授权

ceph · 浏览次数 : 0

小编点评

**用户权限设置** - 创建用户 `test`,使其具有以下权限: ``` allow r allow rw pool=test_pool ``` - 为 `test_pool` 资源池设置只读权限: ``` allow * ``` **文件系统权限设置** - 创建一个名为 `client.test01` 的用户。 - 为 `client.test01` 用户设置以下权限: ``` allow r allow rw pool=test, allow r pool=test01 , allow rw pool=cephfs_metadata, allow rw pool=cephfs_data ``` - 为 `client.test01` 用户设置文件系统只读权限: ``` allow r ``` **用户权限修改的步骤** 1. 获取 `client.test01` 的用户 ID: ``` ceph auth get-or-create client.test01 mon 'allow r' osd 'allow rw pool=test, allow r pool=test01 , allow rw pool=cephfs_metadata, allow rw pool=cephfs_data' ``` 2. 修改 `client.test01` 的权限: ``` ceph auth get-or-create client.test01 mon 'allow r' osd 'allow rw pool=test, allow r pool=test01 , allow rw pool=cephfs_metadata, allow rw pool=cephfs_data'updated caps for client.test01 ``` **其他提示** - 使用 `ceph auth get-or-create` 命令可创建和删除用户权限。 - 使用 `ceph auth ls` 命令可查看用户权限。 - 使用 `ceph health detail` 命令可查看资源池的健康状态。

正文

Ceph配置与认证授权

Ceph的配置了解即可,因为Ceph目前的配置很多都能自动的去调整,而且优化的不错,正常情况下我们不去需要去修改,但是我们得知道怎么去改。

目前我们使用的版本的配置文件里面内容是非常少的

[root@ceph01 ceph]# cat /etc/ceph/ceph.conf 
# minimal ceph.conf for dc6d1544-17ef-11ef-9393-000c297dea16
[global]
	fsid = dc6d1544-17ef-11ef-9393-000c297dea16
	mon_host = [v2:192.168.101.10:3300/0,v1:192.168.101.10:6789/0] [v2:192.168.101.20:3300/0,v1:192.168.101.20:6789/0] [v2:192.168.101.30:3300/0,v1:192.168.101.30:6789/0]

在以前的版本里面是非常多的

Ceph集群配置的来源

  • 编译时设置的值
  • mon集群的集中配置数据库
  • 保存在本地的配置文件
  • 环境变量
  • 命令行输入
  • 管理员配置的临时生效的配置

1. 为什么现在不采用修改配置文件的方式了呢?

因为如果你要修改osd的配置项的话,你改完配置文件之后需要把配置文件分发到所有的osd节点,并且重启osd进程这个配置才会生效,很麻烦。但是现在采用命令行的方式去修改的话是立即生效并且不用每个节点都执行的。这种方式取代了修改配置文件。

2. Ceph元变量

  • $cluster:集群名称,多用于相同硬件上运行多个集群的场景
  • $type:服务或进程的类型,如mds,osd,mon等
  • $id:服务或客户端ID,如osd.0 ,osd为$type的值, 0为$id的值
  • $host:服务所在主机的名称
  • $name:$type+$id
  • $pid:服务的进程ID

可以使用**ceph orch ps **来查看

[root@ceph01 ceph]# ceph orch ps
NAME                  HOST    PORTS        STATUS        REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID  
alertmanager.ceph01   ceph01  *:9093,9094  running (2d)     7m ago   3d    50.0M        -  0.23.0   ba2b418f427c  f549d23bce6e  
crash.ceph01          ceph01               running (2d)     7m ago   3d    17.1M        -  16.2.13  e08a45948779  0785e13fe4ee  
crash.ceph02          ceph02               running (2d)     2s ago   3d    20.1M        -  16.2.13  e08a45948779  11dc05748956  
crash.ceph03          ceph03               running (2d)     8m ago   3d    29.1M        -  16.2.13  e08a45948779  8a19421c0fe1  
grafana.ceph01        ceph01  *:3000       running (2d)     7m ago   3d     149M        -  8.3.5    dad864ee21e9  6c72c1cfe9e2  
mgr.ceph01.luyssm     ceph01  *:9283       running (2d)     7m ago   3d     527M        -  16.2.13  e08a45948779  bb97a49842cd  

3. 使用命令行修改配置

3.1 全部修改(使用服务名)

当我们指定的是某个服务的时候,他会修改这个服务的所有进程配置

[root@ceph01 ceph]# ceph config set osd debug_osd 20
[root@ceph01 ceph]# ceph config show osd.0 debug_osd
20/20
[root@ceph01 ceph]# ceph config show osd.1 debug_osd
20/20
[root@ceph01 ceph]# ceph config show osd.2 debug_osd
20/20

我们可以看到,不管是osd几,都被修改成了20,那我们只想修改一个呢?

3.2 部分修改(修改进程)

修改osd.1 为10,其他的还是20

[root@ceph01 ceph]# ceph config show osd.1 debug_osd
10/10
[root@ceph01 ceph]# ceph config show osd.2 debug_osd
20/20

这样就修改了osd.1这个进程的配置为10,其他的一样还是20

3.3 临时生效

使用命令行去修改大部分配置都是立即生效并且是永久生效的,但还有一些配置是他要求你必须重启进程才会生效的,这种配置我们就可以使用临时生效来代替,临时生效会立即生效。所以我们可以先设置永久生效,然后再设置一个临时生效,那么就可以避免立即重启进程。

[root@ceph01 ceph]# ceph tell osd.3 config set debug_osd 5
{
    "success": ""
}
[root@ceph01 ceph]# ceph config show osd.3 debug_osd
5/5

3.4 配置项

Ceph的配置项非常的多,我们可以去过滤

[root@ceph01 ceph]# ceph config ls |wc -l
2068

总共是有2068个配置项

[root@ceph01 ceph]# ceph config ls |grep mon_allow
mon_allow_pool_delete
mon_allow_pool_size_one
[root@ceph01 ~]# ceph config show osd.1 |grep debug_osd
debug_osd             10/10                                                                                                                                                        mon

我们可以通过grep来过滤出我们想要的配置

3.5 老版本提供的配置文件

老版本提供的配置文件也是存在的,现在被放到了/usr/share/doc/ceph/sample.ceph.conf,想看可以打开看看

3. Ceph网络

客户端来连接ceph的时候,无论是读还写写数据,走的都是一张网卡,这样会导致带宽过大,并且一个pg写入数据之后其他pg也需要同步。所以Ceph推荐每个主机有2张网卡,一张是 public network 用来接受用户的读写请求,另一张网卡为cluster network 用来集群内部同步备份数据,当然,ceph并没有对网卡做强制要求,只有一张网卡的话也是没有问题的。

3.1 对现有集群加入cluster network

每个节点网卡的IP地址自行配置

[root@ceph01 ~]# ceph config set mon public_network 10.104.0.0/16
[root@ceph01 ~]# ceph config set mon cluster_network 192.168.101.0/24
[root@ceph01 ~]# ceph config get mon public_network
10.104.0.0/16
[root@ceph01 ~]# ceph config get mon cluster_network
192.168.101.0/24

4. Cephx(认证授权)

我们之前使用rados命令手动上传文件到存储池内,但是这只是做个测试用的,ceph的功能肯定是对外提供服务,既然是对外提供服务那么就不可能是每个人来了我都给他分配存储,所以这时候就需要用到认证,授权,ceph采用的这种认证方式就是cephx

4.1 认证流程

    1. 客户端携带用户名,cephx密钥向mon发起连接,mon收到这个请求之后验证用户的身份,身份认证通过之后返回一个session key(令牌)给客户端,同时mon将这个session key(令牌)通告给其他的服务
    1. 客户端收到session key之后进行解密,并向mon申请一个ticket(票据),mon产生ticket返回给客户端

    注意:ticket是有有效期的,过期之后流程得重新来一遍,并且mon返回的ticket是使用密钥加密的,防止ticket泄露,客户端拿到之后使用自己的密钥就可以将ticket解密了

    1. 客户端之后的每次请求就都是使用ticket进行(ticket在有效期内),因为客户端,mon,osd,mds都拥有由mon产生的令牌,所以他们都可以认证这个ticket是否合法

4.2 Cephx中的用户

  • Cephx协议对用户的格式有严格的要求,必须使用$type.$id的格式

  • Cephx协议将用户分为两类

    • 客户端:用户客户端访问,$type永久设置为client,如client.admin、client.cinder
    • 服务进程:不止用户需要找mon认证,服务也是需要的,服务的$type为对应的组件名称,如 osd.0 、mgr.ceph01.xxxx

4.2.1 查看用户列表

[root@ceph01 ~]# ceph auth ls
osd.0
	key: AQASi01msk5MJRAAJNFrw1pvhHP3cxhb8eRIWg==
	caps: [mgr] allow profile osd
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.1
	key: AQAri01m0J6QNxAAWIW7gAX8mZ39vh4g6w+e5Q==
	caps: [mgr] allow profile osd
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.2
	key: AQCKi01m7V6TOxAA/dEuaEUIi8TfgHm2nmg2TA==
	caps: [mgr] allow profile osd
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.3
	key: AQBmjE1mRcgVGhAAjeehuD7EUEE9bSacnfQ+kw==
	caps: [mgr] allow profile osd
	caps: [mon] allow profile osd
	caps: [osd] allow *
	……………………
  • key:这里的面显示key就是他的密钥
  • caps:这个就是他的授权信息,授权部分会说

4.3 用户创建

  • 创建用户有3种方式

      1. ceph auth add

        • 如果用户不存在,则创建用户并添加对应权限

        • 如果用户存在,且指定的权限与当前权限一致,则不进行任何修改且没有输出

        • 如果用户存在,且指定的权限与当前权限不一致,则提示

      2. ceph auth get-or-create

        • 当用户不存在,则创建用户、添加权限并返回用户和keyring
        • 当用户存在,且指定的权限和当前权限一致,则不做任何修改,并返回用户和key
        • 如果用户存在,且指定的权限和当前的权限不一致,则保持权限不变,并返回报错信息
      3. ceph auth get-or-create-key

        • 当用户不存在,则创建用户、添加并返回用户和keyring
        • 当用户存在,且指定的权限和当前的权限一致,则不做修改,并返回key
        • 如果用户存在,且指定的权限和当前的权限不一致,则保持权限不变,并返回报错信息

4.3.1 创建用户

[root@ceph01 ~]# ceph auth get-or-create client.test
[client.test]
	key = AQAbw1FmmuEAHhAAI6YeGmQV0RUTsCXme/O3+Q==
[root@ceph01 ~]# ceph auth ls|grep test -A1
installed auth entries:
client.test
	key: AQAbw1FmmuEAHhAAI6YeGmQV0RUTsCXme/O3+Q==

这里显示的跟其他用户不一样,因为我们只创建了用户,并没有给他任何权限,所以这里只显示他的密钥

如果要将文件保存到本地的话,文件名需要注意一下命名规范:$cluster.client.$id.keyring

如果test用户的文件名就应该是 ceph.client.test.keyring

4.3.2 删除用户

[root@ceph01 ~]# ceph auth rm  client.test
updated
[root@ceph01 ~]# ceph auth ls|grep test -A1
installed auth entries:

现在用户已经被删掉了

5. 用户授权

刚刚用户的创建和删除已经可以了,但是现在创建出来的用户是没有任何权限的,所以我们需要授权

在ceph中没有拒绝 这个权限,只有允许,意思就是只要没有给权限,那么就是没有权限

权限 说明
allow 为进程设置权限
r 为用户设置可读权限
w 为用户设置可访问对象权限
x 使用户能够调用类方法(既读和写)以及在mon上执行认证操作
* 全部权限
profile osd (仅限mon) 允许用户以osd的身份连接其他osd或者mon,用于osd心跳和状态报告
profile bootstrap-osd (仅限mon) 允许用户引导osd,用于cephadm或ceph-volume工具
profile mds (仅限mon) 允许用户以mds的身份连接其他mds或mon
profile bootstrap-mds (仅限mon) 允许用户引导mds
profile rbd (mgr,mon,osd) 允许用户使用块设备
profile rbd-read-only 赋予用户对块设备只读权限

下面这些profile 开头的这些都属于x权限里的一种

借用Linux老师的一句话来总结授权:

什么样的用户有什么样的权限,对什么样的服务做什么样的操作

5.1 创建用户并授权

  1. 需求:创建用户test,使其可以查看集群状态,并对资源池test_pool有读写权限
[root@ceph01 ~]# ceph auth get-or-create client.test mon 'allow r' osd 'allow rw pool=test_pool' 
[client.test]
	key = AQAlzFFm+6QnMRAA3lNgtJzN+/GByVWXfXhvrA==
[root@ceph01 ~]# ceph auth get client.test
[client.test]
	key = AQAlzFFm+6QnMRAA3lNgtJzN+/GByVWXfXhvrA==
	caps mon = "allow r"
	caps osd = "allow rw pool=test_pool"
[root@ceph01 ~]# ceph auth get client.test > ./ceph.client.test.keyring

# 使用这个用户访问集群
[root@ceph01 ~]# ceph osd pool ls --name client.test --keyring ./ceph.client.test.keyringdevice_health_metrics
test_pool
test02
# 上传文件
[root@ceph01 ~]# rados --name client.test --keyring ./ceph.client.test.keyring -p test_pool put keyring ./ceph.client.test.keyring 
[root@ceph01 ~]# rados --name client.test --keyring ./ceph.client.test.keyring -p test_pool ls
keyring

# 尝试上传到权限之外的pool
[root@ceph01 ~]# rados --name client.test --keyring ./ceph.client.test.keyring -p test02 put keyring ./ceph.client.test.keyring 
error putting test02/keyring: (1) Operation not permitted

现在test这个用户就仅仅只能对test_pool这个资源池上传文件,对其他的资源池上传文件就会报错操作没有权限

  1. 需求:要求再创建一个超级管理员 root
[root@ceph01 ~]# ceph auth get-or-create client.root mon 'allow *' mgr 'allow *' osd 'allow *' mds 'allow *'
[client.root]
	key = AQCNzlFmeeC6DhAAvmSyiuYXg/qiOp4qCKnZLQ==
[root@ceph01 ~]# ceph auth ls |grep -A5 root
installed auth entries:

client.root
	key: AQCNzlFmeeC6DhAAvmSyiuYXg/qiOp4qCKnZLQ==
	caps: [mds] allow *
	caps: [mgr] allow *
	caps: [mon] allow *
	caps: [osd] allow *
# 将文件导出并使用
[root@ceph01 ~]# ceph health detail --name client.root --keyring ./ceph.client.root.keyring
HEALTH_OK
  1. 创建一个用户test01,要求:
    1. 用户能够对test存储池进行读写
    2. 用户对test01存储池只读
    3. 用户能够使用文件系统
[root@ceph01 ~]# ceph auth get-or-create client.test01 mon 'allow r' osd 'allow rw pool=test, allow r pool=test01 , allow rw pool=cephfs_metadata, allow rw pool=cephfs_data' mds 'allow r'
[client.test01]
	key = AQCP0lFm2HNDAxAA+lJ9p8EYuAT6OQQabNuyYA==
[root@ceph01 ~]# ceph auth get client.test01
[client.test01]
	key = AQCP0lFm2HNDAxAA+lJ9p8EYuAT6OQQabNuyYA==
	caps mds = "allow r"
	caps mon = "allow r"
	caps osd = "allow rw pool=test, allow r pool=test01 , allow rw pool=cephfs_metadata, allow rw pool=cephfs_data"
exported keyring for client.test01

这里的osd里面有2个之前没见过的池,这两个就是文件系统,因为你要使用这个文件系统,就必须对这两个池有权限

5.2 修改用户权限

当权限给错了,或者后期需要修改权限时,并不需要删除用户

# 去掉刚刚创建的test01用户的mds权限,以及文件系统的权限
[root@ceph01 ~]# ceph auth caps client.test01 mon 'allow r' osd 'allow rw pool=test, allow r pool=test01'
updated caps for client.test01

注意,权限是没有删除的,所谓的修改权限只不过就是将你需要的权限重新再给一遍

与Ceph配置与认证授权相似的内容:

Ceph配置与认证授权

目录Ceph配置与认证授权1. 为什么现在不采用修改配置文件的方式了呢?2. Ceph元变量3. 使用命令行修改配置3.1 全部修改(使用服务名)3.2 部分修改(修改进程)3.3 临时生效3.4 配置项3.5 老版本提供的配置文件3. Ceph网络3.1 对现有集群加入cluster networ

ceph客户端配置自动挂载存储服务

1. 安装支持ceph的内核模块 可选: centos/ubuntu: yum install -y ceph-common 或 apt install -y ceph-common 2. 拷贝认证密钥 cephadmin@ceph-deploy:~/ceph-cluster$ sudo scp c

[转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响

测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

[转帖]FIO 存储性能压测

测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

Ceph存储池管理

目录Ceph存储池1. Ceph的存储流程1. 数据写入2. 数据读取2. 资源池的配置2.1 资源池创建pgp是什么 (Placement Group for Placement purpose)2.2 绑定池类型关闭3. 对象的管理3.1 上传对象3.2 查看对象3.3 下载对象3.4 删除对象

Ceph 架构以及部署

目录Ceph架构存储类型为什么用到Ceph?1. NFS2. MooseFSMooseFS瓶颈3. GlusterFS4. CephCeph的组件Ceph部署前期准备1.1 修改主机名1.2 关闭防火墙以及selinux1.3 配置hosts1.4 配置时间同步2. 安装cephadm2.1 安装g

将虚拟机跑在ceph之中

目录openStack对接ceph1. cinder对接ceph1.1 ceph创建存储池1.2 ceph授权1.3 下发ceph文件1.4 修改globals文件1.5 部署cinder1.6 创建卷null2. nova对接ceph2.1 创建卷2.2 更新cinder权限2.3 修改globa

Ceph对象网关,多区域网关

目录Ceph对象网关,多区域网关1. 文件系统与对象存储的区别1.1 对象存储使用场景1.2 对象存储的接口标准1.3 桶(bucket)2. rgw2.1 对象存储认证2.2 对象网关所涉概念2.3 可用区和ceph集群的关系3. 部署对象网关3.1 创建realm3.1.1 列出所有的realm

Ceph提供nfs服务

目录Ceph提供nfs服务1. 前期准备1.1 检查模块1.2 检查是否有nfs-ganesha集群2. 创建nfs服务2.1 ceph提供的nfs的架构3. nfs导出3.1 创建cephfs3.2 导出3.3 客户端尝试挂载3.4 验证4. 高可用nfs-ganesha Ceph提供nfs服务

每天5分钟复习OpenStack(十三)存储缓存技术Bcache

Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘。这样的好处是比较经济实惠。另一种则是全部采用 SSD 或NVME磁盘,其性能更好,但是其价格比较昂贵。在第一种形态中,我们能像中间件那样加上一层缓存层,从而实现给