首页 > 其他分享 >Ceph配置与认证授权

Ceph配置与认证授权

时间:2024-05-25 20:23:08浏览次数:23  
标签:ceph 认证 Ceph ceph01 mon allow 授权 root osd

目录

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,ceph01,mon,allow,授权,root,osd
From: https://www.cnblogs.com/fsdstudy/p/18212958

相关文章

  • Ceph存储池管理
    目录Ceph存储池1.Ceph的存储流程1.数据写入2.数据读取2.资源池的配置2.1资源池创建pgp是什么(PlacementGroupforPlacementpurpose)2.2绑定池类型关闭3.对象的管理3.1上传对象3.2查看对象3.3下载对象3.4删除对象3.5查询对象所在pg3.6限制资源池配额3.7测试配额3.......
  • Node.js —— 前后端的身份认证 之用 express 实现 JWT 身份认证
    JWT的认识什么是JWT        JWT(英文全称:JSONWebToken)是目前最流行的跨域认证解决方案。JWT的工作原理        总结:用户的信息通过Token字符串的形式,保存在客户端浏览器中。服务器通过还原Token字符串的形式来认证用户的身份。  JWT的组成部分......
  • CCF-CSP认证 2024年3月 4.化学方程式配平
    题解:首先完成数据的读入,然后高斯消元求秩按题意解即可#pragmaGCCoptimize(2,3,"Ofast","inline")#include<bits/stdc++.h>usingnamespacestd;constintmaxn=100;usingmatrix=double[maxn][maxn];usingvect=array<double,maxn>;constdoub......
  • 新修订的《中华人民共和国保守国家秘密法》完善了定密授权制度,明确特殊情况下“()保密
    新修订的《中华人民共和国保守国家秘密法》完善了定密授权制度,明确特殊情况下“()保密行政管理部门或者()保密行政管理部门可以授予机关、单位定密权限”。试题答案查看A.中央地方B.国家市 C.国家省、自治区、直辖市D.省、自治区、直辖市县为进一步强化保密工作的组织领......
  • XXL-JOB executor 未授权访问漏洞
    XXL-JOBexecutor未授权访问漏洞XXL-JOB是一个分布式任务调度平台,其核心设计目标是开放迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。XXL-JOB分为admin和executor两端,前者为后台管理页面,后者是任务执行的客户端。executor默认没有配置认证......
  • K8S认证|CKA题库+答案| 16. 升级集群
    16、升级集群CKAv1.29.0模拟系统免费下载试用:百度网盘:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwd=wbki 题目:您必须在以下Cluster/Node上完成此考题:   Cluster                    Masternode   ......
  • 【DRF-04】rest-framework之认证
    1.认证基本使用1.1:问题:有些API(订单信息)需要用户登录成功之后,才能访问;有些无需登录就能访问。1.2:解决思路:用户登录后,生成token--保存在数据库中,前端带token,允许访问,不带token,不允许访问。1.3:modelsfromdjango.dbimportmodelsclassUserInfo(models.Model):......
  • CCF/CSP认证-第一次-命令行选项
    1.问题1.1命令行选项请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后......
  • 微服务下认证授权框架的探讨
    前言市面上关于认证授权的框架已经比较丰富了,大都是关于单体应用的认证授权,在分布式架构下,使用比较多的方案是--<应用网关>,网关里集中认证,将认证通过的请求再转发给代理的服务,这种中心化的方式并不适用于微服务,这里讨论另一种方案--<认证中心>,利用jwt去中心化的特性,减轻......
  • pycharm学生邮箱认证
    进入JetBrains官网点击申请接着填写申请信息提交后,它会向你的edu验证邮箱发送邮件点击邮件中的链接,跳转到登录注册界面,按需进行登录或注册注册完成后登陆进去,就可以获取到LicenseID了打开pycharm,登录JetBrains账户登陆后会自动关联到JetBrains账户的许可信息,就可以......