创建 Ceph 对象存储用户

我们允许通过自定义资源定义(CRDs)创建和自定义对象存储用户。

目录

前提条件

  • 对象存储池已创建

操作步骤

创建用户

在集群的控制节点上执行命令。

cat << EOF | kubectl apply -f -
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:
  name: <name>
  namespace: <namespace>
spec:
  store: <ObjectStore>
  displayName: <displayName>
  clusterNamespace: <clusterNamespace>
  quotas:
    maxBuckets: 100
    maxSize: -1
    maxObjects: -1
  capabilities:
    user: "*"
    bucket: "*"
EOF

参数说明

参数描述
name要创建的对象存储用户的名称。
namespace创建对象存储用户的命名空间。
displayName显示名称。
clusterNamespace父级 CephClusterCephObjectStore 所在的命名空间。如果未指定,用户必须与集群和对象存储处于同一命名空间。要启用此功能,CephObjectStore 的 allowUsersInNamespaces 必须包含该用户的命名空间。
ObjectStore用户将被创建的对象存储。这与对象存储池的名称相匹配。
quotas可选

表示可以为用户设置的配额限制。
  • maxBuckets:用户的最大桶数量限制。默认值为 100
  • maxSize:用户所有桶中所有对象的最大总大小限制。设置为 -1 表示无限制。
  • maxObjects:用户所有桶中对象的最大数量限制。设置为 -1 表示无限制。
capabilities可选

Ceph 允许为用户赋予额外权限。此设置目前仅能在创建对象存储用户时使用。如果需要修改用户的权限,必须删除并重新创建该用户。详情请参见 Ceph 文档。我们支持为以下资源添加 readwriteread,write* 权限:
  • user
  • buckets
  • usage
  • metadata
  • zone
  • roles
  • info
  • amz-cache
  • bilog
  • mdlog
  • datalog
  • user-policy
  • odic-provider
  • ratelimit

允许在其他命名空间创建用户

如果在除 Rook 集群命名空间之外的命名空间中创建 CephObjectStoreUser,则必须将该命名空间添加到允许的命名空间列表中,或者指定 "*" 以允许所有命名空间。这对于需要在其自身命名空间中创建对象存储凭据的应用程序非常有用。

在集群的控制节点上执行命令。

kubectl -n rook-ceph patch cephobjectstore <ObjectStore> --type merge -p '{"spec":{"allowUsersInNamespaces":["*"]}}'

获取用户信息

在集群的控制节点上执行命令。

user_secret=$(kubectl -n <namespace> get cephobjectstoreuser <user-name> -o jsonpath='{.status.info.secretName}')

# ACCESS_KEY
kubectl -n <namespace> get secret $user_secret -o jsonpath='{.data.AccessKey}' | base64 --decode

# SECRET_KEY
kubectl -n <namespace> get secret $user_secret -o jsonpath='{.data.SecretKey}' | base64 --decode