Ceph rgw multi-tenancy多租户实测

1.简介

1.1 本文解决什么问题?

  • 如何在ceph对象存储创建使用同名用户
  • 如何在ceph对象存储中创建使用同名bucket

1.2问题描述

公司有2个张三,一天北京的张三在使用公司对象存储用自己的名字创建用户时,提示用户已存在,原来上海的张三抢先创建了“张三”的用户,那么现在就存在一个问题:在不重起用户名的情况下怎么创建2个张三呢(即为同名用户)?(此段为做作的引入,,哈哈哈)

1.3multi-tenancy概述

ceph J版本以前,集群中不允许有同名的bucket和user,这可能在实际使用过程中带来某些不便。从J版本开始ceph 引入multi-tenancy功能,将同名user/bucket隔离在不同的tenant下,使同一集群中可创建同名user/bucket。每个user/bucket都位于一个tenant下,相互隔离,各不影响。为了兼容前版本,引入隐式空字符串“”tenant,如果创建用户不显式指定tenant,则默认加入“”tenant中。每当在没有显式tenant的情况下引用user/bucket时,都会从执行操作的用户那里获取隐式tenant"".

2 .实测创建同名用户

测试环境说明:
ceph版本:Nautilus 14.2.8

创建用户时,可选参数“--tenant”可指定用户存在 哪个tenant下,不指定默认为“”
例如创建为北京的张三指定tenant Beijing

[root@node44 ~]#  radosgw-admin user create --tenant=Beijing --uid=zhangsan --display-name="beijing zhangsan" --access-key="beijingzhangsan" --secret-key="daemon"
{
    "user_id": "Beijing$zhangsan",
    "display_name": "beijing zhangsan",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "Beijing$zhangsan",
            "access_key": "beijingzhangsan",
            "secret_key": "daemon"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@node44 ~]# 

为上海的张三指定tenant为上海

[root@node44 ~]#  radosgw-admin user create --tenant=Shanghai --uid=zhangsan --display-name="shanghai zhangsan" --access-key="shanghaizhangsan" --secret-key="123456"
{
    "user_id": "Shanghai$zhangsan",
    "display_name": "shanghai zhangsan",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "Shanghai$zhangsan",
            "access_key": "shanghaizhangsan",
            "secret_key": "123456"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@node44 ~]# 

查看创建结果:

[root@node44 ~]# radosgw-admin user list
[
    "Beijing$zhangsan",
    "test",
    "Shanghai$zhangsan"
]
[root@node44 ~]# 

从创建结果可以看出radosgw-admin 创建用户时指定的--uid均为zhangsan,并未报错uid已存在,实际上创建处理的用户uid为<tenant>$<uid>形式,不指定--tenant情况则为<uid>形式

查看不同tenant下同一用户名命令:

[root@node44 ~]# radosgw-admin user list
[
    "Beijing$zhangsan",
    "test",
    "Shanghai$zhangsan"
]
[root@node44 ~]# radosgw-admin user info --uid=zhangsan
could not fetch user info: no user info saved
[root@node44 ~]# 
[root@node44 ~]# radosgw-admin user info --uid=zhangsan --tenant Beijing
{
    "user_id": "Beijing$zhangsan",
    "display_name": "beijing zhangsan",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "Beijing$zhangsan",
            "access_key": "beijingzhangsan",
            "secret_key": "daemon"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@node44 ~]# radosgw-admin user info --uid=zhangsan --tenant Shanghai
{
    "user_id": "Shanghai$zhangsan",
    "display_name": "shanghai zhangsan",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "Shanghai$zhangsan",
            "access_key": "shanghaizhangsan",
            "secret_key": "123456"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@node44 ~]# 

3.创建同名bucket

创建bucket时,无需指定tenant,rgw会根据ak和sk去隔离用户数据到用户tenant下,如果在创建用户时,指定的ak、sk一样,会报如下错:

[root@node44 ~]# radosgw-admin user create --tenant=Chengdu --uid=zhangsan --display-name="shanghai zhangsan" --access-key="shanghaizhangsan" --secret-key="123456"
could not create user: unable to parse parameters, user id mismatch, operation id: Shanghai$zhangsan does not match: Chengdu$zhangsan
[root@node44 ~]# 

通过s3browser创建同名bucket:



查看创建结果:

[root@node44 ~]# radosgw-admin bucket list
[
    "Shanghai/zhangsan_bucket",
    "Beijing/zhangsan_bucket",
    "testbucket"
]
[root@node44 ~]# radosgw-admin bucket stats --bucket=Shanghai/zhangsan_bucket
{
    "bucket": "zhangsan_bucket",
    "num_shards": 8,
    "tenant": "Shanghai",
    "zonegroup": "14b51936-68ca-446c-81d6-88f3bc33f000",
    "placement_rule": "default-placement",
    "explicit_placement": {
        "data_pool": "",
        "data_extra_pool": "",
        "index_pool": ""
    },
    "id": "68ca434f-cfed-432c-87fe-7e28761c05cb.2101966.2",
    "marker": "68ca434f-cfed-432c-87fe-7e28761c05cb.2101966.2",
    "index_type": "Normal",
    "owner": "Shanghai$zhangsan",
    "ver": "0#1,1#1,2#1,3#1,4#1,5#2,6#1,7#1",
    "master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0",
    "mtime": "2020-12-30 08:20:28.794223Z",
    "max_marker": "0#,1#,2#,3#,4#,5#,6#,7#",
    "usage": {
        "rgw.main": {
            "size": 21084,
            "size_actual": 24576,
            "size_utilized": 21084,
            "size_kb": 21,
            "size_kb_actual": 24,
            "size_kb_utilized": 21,
            "num_objects": 1
        }
    },
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    }
}
[root@node44 ~]# 
[root@node44 ~]# radosgw-admin bucket stats --bucket=Beijing/zhangsan_bucket
{
    "bucket": "zhangsan_bucket",
    "num_shards": 8,
    "tenant": "Beijing",
    "zonegroup": "14b51936-68ca-446c-81d6-88f3bc33f000",
    "placement_rule": "default-placement",
    "explicit_placement": {
        "data_pool": "",
        "data_extra_pool": "",
        "index_pool": ""
    },
    "id": "68ca434f-cfed-432c-87fe-7e28761c05cb.2101966.1",
    "marker": "68ca434f-cfed-432c-87fe-7e28761c05cb.2101966.1",
    "index_type": "Normal",
    "owner": "Beijing$zhangsan",
    "ver": "0#1,1#1,2#1,3#1,4#1,5#2,6#1,7#1",
    "master_ver": "0#0,1#0,2#0,3#0,4#0,5#0,6#0,7#0",
    "mtime": "2020-12-30 08:19:33.146366Z",
    "max_marker": "0#,1#,2#,3#,4#,5#,6#,7#",
    "usage": {
        "rgw.main": {
            "size": 21084,
            "size_actual": 24576,
            "size_utilized": 21084,
            "size_kb": 21,
            "size_kb_actual": 24,
            "size_kb_utilized": 21,
            "num_objects": 1
        }
    },
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    }
}
[root@node44 ~]# 

4.结束

本文只是简单测试了multi-tenancy功能,为policy使用前的简单测试使用了解,后续若有问题,持续更新。
参考链接:
https://docs.ceph.com/en/latest/radosgw/multitenancy/#administering-users-with-explicit-tenants

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容