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. MogDB企业应用 之 Rust驱动

    引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ...

  2. openGauss中如何管理表空间

    openGauss 中如何管理表空间 在 openGauss 中,表空间是一个目录,在物理数据和逻辑数据间提供了抽象的一层,为所有的数据库对象分配存储空间,里面存储的是它所包含的数据库的各种物理文件. ...

  3. ActiveMQ c# 系列——进阶实例(三)

    前言 前面介绍了基本的消费者和生产者,那么看下他们之间有什么其他的api. 正文 消费者设置等待时间 生产者生产了5条消息 改一下消费者. static void Main(string[] args ...

  4. TaskPool 和 Worker 的对比

    作用: TaskPool(任务池)和 Worker 都为应用程序提供多线程运行环境,用于处理耗时的计算任务或其他密集型任务,避免阻塞主线程,提高系统性能.   实现特点对比: 内存模型:TaskPoo ...

  5. nginx请求头相关漏洞修复(http host&X-XSS-Protection)

    nginx请求头相关漏洞修复(http host&X-XSS-Protection) 参考链接:Nginx常见漏洞处理 - 码农教程 (manongjc.com) Web应用漏洞-NGINX各 ...

  6. Flink 源码 | 自定义 Format 消费 Maxwell CDC 数据

    Flink 1.11 最重要的 Feature -- Hive Streaming 之前已经和大家分享过了,今天就和大家来聊一聊另一个特别重要的功能 -- CDC. CDC概述 何为CDC?Chang ...

  7. Apache Flink 在实时金融数据湖的应用

    简介: 本文由京东搜索算法架构团队分享,主要介绍 Apache Flink 在京东商品搜索排序在线学习中的应用实践 一.背景 在京东的商品搜索排序中,经常会遇到搜索结果多样性不足导致系统非最优解的问题 ...

  8. 阿里云RDS深度定制-XA Crash Safe

    ​简介: 近几年,随着分布式数据库系统的兴起,特别是基于MySQL分布式数据库系统,会用到XA来保证全局事务的一致性.众所周知,MySQL对XA事务的支持是比较弱的,存在很多问题.为了满足分布式数据库 ...

  9. dotnet 使用增量源代码生成技术的 Telescope 库导出程序集类型

    本文将告诉大家在 dotnet 里面使用免费完全开源的基于增量源代码生成技术的 Telescope 库,进行收集导出项目程序集里面指定类型.可以实现性能极高的指定类型收集,方便多模块对接入自己的业务框 ...

  10. WPF 切换主题使用 luna 复古版本

    本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣 ...