Ceph配置与认证授权
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 认证流程
- 客户端携带用户名,cephx密钥向mon发起连接,mon收到这个请求之后验证用户的身份,身份认证通过之后返回一个session key(令牌)给客户端,同时mon将这个session key(令牌)通告给其他的服务
- 客户端收到session key之后进行解密,并向mon申请一个ticket(票据),mon产生ticket返回给客户端
注意:ticket是有有效期的,过期之后流程得重新来一遍,并且mon返回的ticket是使用密钥加密的,防止ticket泄露,客户端拿到之后使用自己的密钥就可以将ticket解密了
- 客户端之后的每次请求就都是使用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种方式
ceph auth add
如果用户不存在,则创建用户并添加对应权限
如果用户存在,且指定的权限与当前权限一致,则不进行任何修改且没有输出
如果用户存在,且指定的权限与当前权限不一致,则提示
ceph auth get-or-create
- 当用户不存在,则创建用户、添加权限并返回用户和keyring
- 当用户存在,且指定的权限和当前权限一致,则不做任何修改,并返回用户和key
- 如果用户存在,且指定的权限和当前的权限不一致,则保持权限不变,并返回报错信息
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 创建用户并授权
- 需求:创建用户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这个资源池上传文件,对其他的资源池上传文件就会报错操作没有权限
- 需求:要求再创建一个超级管理员 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
- 创建一个用户test01,要求:
- 用户能够对test存储池进行读写
- 用户对test01存储池只读
- 用户能够使用文件系统
[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配置与认证授权的更多相关文章
- 基于.NetCore3.1系列 ——认证授权方案之Swagger加锁
一.前言 在之前的使用Swagger做Api文档中,我们已经使用Swagger进行开发接口文档,以及更加方便的使用.这一转换,让更多的接口可以以通俗易懂的方式展现给开发人员.而在后续的内容中,为了对a ...
- 【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置
介绍 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 在微服务的应用中,统一的认证授权是必不可少的组件,本文将介绍微服务中网关和子服务如何使用统一的权限认证 主要介绍内容为: 1.子服务如 ...
- 使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
- [2014-11-11]使用Owin中间件搭建OAuth2.0认证授权服务器
前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...
- AngularJS进阶(十七)在AngularJS应用中实现微信认证授权遇到的坑
在AngularJS应用中集成微信认证授权遇到的坑 注:请点击此处进行充电! 前言 项目开发过程中,移动端新近增加了一个功能"微信授权登录",由于自己不是负责移动端开发的,但最后他 ...
- 手写DotNet Core 认证授权代码
在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式,使用简单.登录成功后将用户信息写入Cookie:但当我们做WebApi的时候显然Cookie这种方式就有点不适用了. 在dotnet ...
- 基于IdentityServer4 实现.NET Core的认证授权
IdentityServer4是什么? IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. OpenID ...
- angularjs+webapi2 跨域Basic 认证授权(二)
在上一篇中大概演示了 整个认证授权的过程.今天在这篇博客中将结合上一篇的例子继续在跨域的情况 我们用ionic 写一个简单的页面 值得注意的是 在ionic.bundle.js 里面集成了angula ...
- springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)
项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖 ...
- Spring Cloud下基于OAUTH2认证授权的实现
GitHub(spring -boot 2.0.0):https://github.com/bigben0123/uaa-zuul 示例(spring -boot 2.0.0): https://gi ...
随机推荐
- JS判断浏览器是否是IE
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 粗心的小红qsnctfwp
将原 apk 安装包后缀名修改为 zip 将其中的 classes3.dex 文件解压 使用 Notepad++ 或其他工具打开 classes3.dex,将第 2 行的 38 修改为 35 或 36 ...
- 重新整理.net core 计1400篇[二] (.net core 改造控制台项目)
前言 为.net core 命令行的基础上写的,如果有兴趣的话,可以去看我的.net core 前文. 下面介绍如何将.net core控制台转换为.net core web应用. 正文 如果我们要实 ...
- python读取文件时,删除重复行并计数
from collections import Counterwith open('a.txt', 'r+') as f: a = f.readlines() for i in range(len(a ...
- 最佳实践|从Producer 到 Consumer,如何有效监控 Kafka
简介: 对于运维人而言,如何安装维护一套监控系统,或如何进行技术选型,从来不是工作重点.如何借助工具对所需的应用.组件进行监控,发现并解决问题才是重中之重.随着 Prometheus 逐渐成为云原生时 ...
- Apsara Stack 技术百科 | 联结良性生态,筑千行百业的数字基石
简介:作为现今IT领域最重要的课题:基础设施云化,离不开与伙伴的携手合作,如何让云上解决方案能充分释放价值的同时形成一个相互依存的自循环生态系统,混合云君来跟你聊聊! 生态系统这个词在维基百科上 ...
- Dubbo-go-Mesh 开启新一代 Go 微服务形态
简介:Proxyless Service Mesh 能力将跟随 Dubbo-go 下一版本发布,稳定的性能需要社区成员们共同的关注与建设.在此基础之上,我们还会进一步探索轻量级 sdk + side ...
- 这是阿里技术专家对 SRE 和稳定性保障的理解
简介: 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解.对于产品研发转做 SRE ,经常会产生是否要「脱离编码工作」的看法,或者认为是否要「偏离对产品/基 ...
- Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS
简介:Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选.不过 Jenkins 存在维护成本高.配置复杂等缺点,云效 Flow 较好地解决了这些问题. 本 ...
- 汽车之家:基于 Flink + Iceberg 的湖仓一体架构实践
简介: 由汽车之家实时计算平台负责人邸星星在 4 月 17 日上海站 Meetup 分享的,基于 Flink + Iceberg 的湖仓一体架构实践. 内容简要: 一.数据仓库架构升级的背景 二.基于 ...