Ceph对象网关快速入门

  安装Ceph对象网关

  1,在 client-node 上执行预安装步骤。如果你打算使用 Civetweb 的默认端口 7480 ,必须通过 firewall-cmd 或 iptables 来打开它。

  2,从管理节点的工作目录,在client-node上安装对象网关软件包。

ceph-deploy install --rgw <client-node> [<client-node> ...]

   注意:ceph-client为可以连接的主机名或者IP地址,最好设置好ssh免密,否则需要输入密码才能进行安装

      最好在对应节点设置好yum源使用以下命令安装,否则安装很慢或者安装失败

yum -y update && yum -y install ceph-radosgw 

   新建对象网关实例

ceph-deploy rgw create {node_name}

   例如

 ceph-deploy rgw create node1

   查看

[root@admin-node my-cluster]# ceph -s
  cluster:
    id:     8dc0f409-70c1-4499-94a9-466abdf4f30d
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 30m)
    mgr: node1(active, since 35m), standbys: node2
    mds:  1 up:standby
    osd: 3 osds: 3 up (since 19h), 3 in (since 19h)
    rgw: 1 daemon active (node1) #一个对象网关运行在node1上
 
  task status:
 
  data:
    pools:   5 pools, 256 pgs
    objects: 235 objects, 14 MiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     256 active+clean

   一旦网关开始运行,你就可以通过 7480 端口来访问它(比如 http://client-node:7480 )。

  配置 CEPH 对象网关实例

  1,通过修改 Ceph 配置文件可以更改默认端口(比如改成 80 )。增加名为 [client.rgw.<client-node>] 的小节,把 <client-node> 替换成你自己 Ceph 客户端节点的短名称(即 hostname -s 的输出)。例如,你的节点名就是 client-node ,在 [global] 节后增加一个类似于下面的小节:

[client.rgw.client-node]
rgw_frontends = "civetweb port=80"

   例如修改配置文件

[global]
fsid = 8dc0f409-70c1-4499-94a9-466abdf4f30d
mon_initial_members = node1
mon_host = 192.168.1.101
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public network = 192.168.1.0/24
mon_allow_pool_delete = true
#增加以下两行
[client.rgw.node1]
rgw_frontends = "civetweb port=80"

   2,为了使新端口设置生效需要重启Ceph对象网关

  如果是在管理节点修改了配置还需要先同步配置至网关节点

 ceph-deploy --overwrite-conf admin client-node

   重启对象网关

 systemctl restart ceph-radosgw.target

   你应该可以生成一个未授权的请求,并收到应答。例如,一个如下不带参数的请求:

http://<client-node>:80

   应该收到这样的应答:

<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>

   使用网关

  为了使用 REST 接口,首先需要为S3接口创建一个初始 Ceph 对象网关用户。然后,为 Swift 接口创建一个子用户。然后你需要验证创建的用户是否能够访问网关。

  为 S3 访问创建 RADOSGW 用户

  一个``radosgw`` 用户需要被新建并被分配权限。命令 man radosgw-admin 会提供该命令的额外信息。

  为了新建用户,在 gateway host 上执行下面的命令:

sudo radosgw-admin user create --uid="testuser" --display-name="First User"

   命令解析

radosgw-admin 
user create #创建用户     
--uid="testuser"  #用户名为testuser
--display-name="First User" #用户显示名为First User

   删除用户

radosgw-admin user  rm --uid=testuser

   注意:删除用户需要确保没有使用该用户创建的bucket,如果创建了bucket需要先删除bucket才能删除用户,如果bucket内有文件需要先删除文件才能删除bucket

  创建用户输入类似以下内容

[root@admin-node ~]# radosgw-admin user create --uid="testuser" --display-name="First User"
{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "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": []
}

   

Note 其中 keys->access_key 和``keys->secret_key`` 的值在访问的时候需要用来做验证

   注意

Important 请检查输出的 key。有个时候 radosgw-admin 会在生成的JSON 中的 access_key 和和 secret_key 部分包含有转义字符 \ ,并且一些客户端不知道如何处理 JSON 中的这个字符。补救措施包括移除 JSON 中的 \ 字符,将该字符串封装到引号中,重新生成这个 key 并确保不再包含 \ ,或者手动指定``access_key`` 和和 secret_key 。如果 radosgw-admin 生成的 JSON 中的同一个key中包含转义字符 \ 同时包含有正斜杠 / 形如 \/ ,请只移除 JSON 转义字符 \ ,不要删除正斜杠 / ,因为在 key 中它是一个有效字符。

   新建一个Swift子用户

  如果你想要使用这种方式访问集群,你需要新建一个 Swift 子用户。创建 Swift 用户包括两个步骤。第一步是创建用户。第二步是创建 secret key。

  新建swift用户

radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full

   参数解析

radosgw-admin 
subuser create #创建子用户 
--uid=testuser #上层用户是testuser
--subuser=testuser:swift #子用户id
 --access=full #权限是所有

 

  输入类似下面这样

{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "GYDZVA9SejxTIIQlXo19eg0veJSC0dUk33Yk8zpL"
        }
    ],
    "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": []
}

 

 

 

   新建 secret key:

sudo radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret

   输出类似下面这样

{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "LGTP6OUjHgxL7pWLplislHMsSTNr0bZRsgDnLdlT"
        }
    ],
    "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": []
}

   验证访问

  测试s3访问

  为了验证 S3 访问,你需要编写并运行一个 Python 测试脚本。S3 访问测试脚本将连接 radosgw, 新建一个新的 bucket 并列出所有的 buckets。 aws_access_key_id 和 aws_secret_access_key 的值来自于命令``radosgw_admin`` 的返回值 access_key 和 secret_key 。

  执行以下步骤

  1,你需要安装python-boto包

sudo yum install python-boto

   2,新建Python脚本文件

vi s3test.py

   3,将下面的内容添加到文件中:

import boto.s3.connection

access_key = '5YE82KZNJLIINFF3BHJQ'
secret_key = 'Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3'
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='192.168.1.101', port=80,
        is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
       )

bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
    print "{name} {created}".format(
        name=bucket.name,
        created=bucket.creation_date,
    )

   将 {hostname} 替换为你配置了网关服务的节点的主机名。比如 gateway host. 将 {port} 替换为对象网关所使用的端口。

  4,运行脚本

  输出以下内容

  创建新的bucket

[root@admin-node ~]# python s3test.py 
my-new-bucket 2020-08-07T07:47:17.399Z

   使用s3cmd测试访问对象网关

  第一步安装测试工具并编写配置文件

yum install s3cmd

   配置文件,key为用户testuser对应的key

[root@admin-node ~]# cat /root/.s3cfg 
[default]
access_key = 5YE82KZNJLIINFF3BHJQ
secret_key = Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3
host_base = 192.168.1.101:80
host_bucket = 192.168.1.101:80/%(bucket)
cloudfront_host = 192.168.1.101:80
use_https = False

   列出所有bucket

[root@admin-node ~]# s3cmd ls
2020-08-07 07:47  s3://my-new-bucket

   创建bucket

s3cmd mb s3://test_bucket

   创建后在查看

[root@admin-node ~]# s3cmd ls
2020-08-07 07:47  s3://my-new-bucket
2020-08-07 08:05  s3://test_bucket

   上传文件至bucket

[root@admin-node ~]# s3cmd put /etc/fstab s3://test_bucket/

   下载文件至当前目录

 s3cmd get s3://test_bucket/fstab

 

  测试Swift访问

  Swift 访问的验证则可以使用``swift`` 的命令行客户端。可以通过命令 man swift 获取更多命令行选项的更多信息。

   执行下面的命令安装 swift 客户端

sudo yum install python-setuptools
sudo easy_install pip
sudo pip install --upgrade setuptools
sudo pip install --upgrade python-swiftclient

   注意:如果是Python3版本 easy_install命令类似于easy_install-3.6

  执行下面的命令验证 swift 访问:

swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

   使用网关服务器的外网 IP 地址替换其中的 {IP ADDRESS} ,使用新建 swift 用户时执行的命令 radosgw-admin key create 的输出替换其中的 {swift_secret_key} 。使用你的 Civetweb 所使用的端口替换其中 {port} ,比如默认是 7480 。如果你不替换这个端口,它的默认值是 80. 举例如下:

 swift -A http://192.168.1.101:80/auth/1.0 -U testuser:swift -K 'LGTP6OUjHgxL7pWLplislHMsSTNr0bZRsgDnLdlT' list

   输出如下

my-new-bucket

   

  

posted @ 2020-08-07 10:58  minseo  阅读(1218)  评论(0编辑  收藏  举报