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配置与认证授权的更多相关文章

  1. 基于.NetCore3.1系列 ——认证授权方案之Swagger加锁

    一.前言 在之前的使用Swagger做Api文档中,我们已经使用Swagger进行开发接口文档,以及更加方便的使用.这一转换,让更多的接口可以以通俗易懂的方式展现给开发人员.而在后续的内容中,为了对a ...

  2. 【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置

    介绍 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 在微服务的应用中,统一的认证授权是必不可少的组件,本文将介绍微服务中网关和子服务如何使用统一的权限认证 主要介绍内容为: 1.子服务如 ...

  3. 使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  4. [2014-11-11]使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  5. AngularJS进阶(十七)在AngularJS应用中实现微信认证授权遇到的坑

    在AngularJS应用中集成微信认证授权遇到的坑 注:请点击此处进行充电! 前言 项目开发过程中,移动端新近增加了一个功能"微信授权登录",由于自己不是负责移动端开发的,但最后他 ...

  6. 手写DotNet Core 认证授权代码

    在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式,使用简单.登录成功后将用户信息写入Cookie:但当我们做WebApi的时候显然Cookie这种方式就有点不适用了. 在dotnet ...

  7. 基于IdentityServer4 实现.NET Core的认证授权

    IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...

  8. angularjs+webapi2 跨域Basic 认证授权(二)

    在上一篇中大概演示了 整个认证授权的过程.今天在这篇博客中将结合上一篇的例子继续在跨域的情况 我们用ionic 写一个简单的页面 值得注意的是 在ionic.bundle.js 里面集成了angula ...

  9. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  10. Spring Cloud下基于OAUTH2认证授权的实现

    GitHub(spring -boot 2.0.0):https://github.com/bigben0123/uaa-zuul 示例(spring -boot 2.0.0): https://gi ...

随机推荐

  1. mybatis复习(二)

    简介 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 statement 等繁杂的 ...

  2. 【直播预告】今晚7点,来HarmonyOS极客松直播间与技术专家聊聊新技术!

     

  3. CentOS6.5安装与配置JDK-7

    系统环境:centos-6.5 安装方式:rpm安装 软件:jdk-7-linux-i586.rpm 下载地址:http://www.oracle.com/technetwork/java/javas ...

  4. Docker安装使用--Centos

    目录 前言 Docker安装使用 安装步骤 卸载旧版本 安装utils 配置utils的存储库 安装Docker 安装指定版本Docker 验证安装 官网安装说明 阿里云镜像加速 Docker使用 帮 ...

  5. ImportError: Cannot load backend 'TkAgg' which requires the 'tk' interactive framework, as 'headless' is currently running

    MMdetection多卡训练常遇到的两个错误,百度无果,没解决,去github里mmdetection的issue模块搜索了一下找到正解. 这里记录一下,方便后者. 1️⃣ ImportError: ...

  6. TypeScript 中泛型的理解?应用场景?

    一.是什么 泛型程序设计(generic programming)是程序设计语言的一种风格或范式 泛型允许我们在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型 ...

  7. 使用pycuda替换字符串,使用cuda替换字符串

    写一个python的cuda程序,实现字符串列表的字符串替换,把所有的123替换成xinyuuliu 以下是一个简单的 Python CUDA 代码示例,用于实现字符串列表的字符串替换.它使用了 NV ...

  8. Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析

    QTransform 用于图形绘制,它定义了如何平移(translate).缩放(scale).切变(shear).旋转(rotate)或投射(project)坐标系.注意:QTransform 是作 ...

  9. 力扣485(java)-最大连续数1的个数(简单)

    题目: 给定一个二进制数组, 计算其中最大连续 1 的个数. 示例: 输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 提示: 输入 ...

  10. 一文读懂容器存储接口 CSI

    简介: 在<一文读懂 K8s 持久化存储流程>一文我们重点介绍了 K8s 内部的存储流程,以及 PV.PVC.StorageClass.Kubelet 等之间的调用关系.接下来本文将将重点 ...