创建 Ceph Object Store 用户

我们支持通过自定义资源定义(CRD)创建和自定义 Object Store 用户。

前提条件

  • 已创建对象存储池

操作步骤

创建用户

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

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要创建的 Object Store 用户的名称。
namespace创建 Object Store 用户所在的命名空间。
displayName显示名称。
clusterNamespace父级 CephCluster 和 CephObjectStore 所在的命名空间。如果未指定,则用户必须与集群和 Object Store 位于同一命名空间。要启用此功能,CephObjectStore 的 allowUsersInNamespaces 必须包含此用户所在的命名空间。
ObjectStore要创建用户的 Object Store。此名称与对象存储池的名称一致。
quotas可选

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

Ceph 允许为用户授予其他权限。此设置目前只能在创建 Object Store 用户时使用。如果需要修改用户的权限,则必须删除并重新创建该用户。有关更多信息,请参阅 Ceph 文档。我们支持为以下资源添加 read、write、read,write 或 * 权限:
  • user
  • buckets
  • usage
  • metadata
  • zone
  • roles
  • info
  • amz-cache
  • bilog
  • mdlog
  • datalog
  • user-policy
  • odic-provider
  • ratelimit

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

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

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

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