文档首页/ 云容器引擎 CCE_Autopilot集群/ 用户指南/ 存储/ 对象存储(OBS)/ 对象存储卷挂载设置自定义访问密钥(AK/SK)
更新时间:2024-09-30 GMT+08:00

对象存储卷挂载设置自定义访问密钥(AK/SK)

背景信息

CCE提供了设置自定义访问密钥的能力,可以让IAM用户使用自己的访问密钥挂载对象存储卷,从而可以对OBS进行访问权限控制(具体请参见OBS不同权限控制方式的区别)。

约束与限制

对象存储卷使用自定义访问密钥(AK/SK)时,对应的AK/SK不允许删除或禁用,否则业务容器将无法访问已挂载的对象存储。

获取访问密钥

  1. 登录控制台。
  2. 鼠标指向界面右上角的登录用户名,在下拉列表中单击“我的凭证”。
  3. 在左侧导航栏单击“访问密钥”。
  4. 单击“新增访问密钥”,进入“新增访问密钥”页面。
  5. 单击“确定”,下载访问密钥。

使用访问密钥创建Secret

  1. 获取访问密钥。
  2. 对访问密钥进行base64编码(假设上文获取到的ak为“xxx”,sk为“yyy”)。

    echo -n xxx|base64

    echo -n yyy|base64

    记录编码后的AK和SK。

  3. 新建一个secret的yaml,如test-user.yaml。

    apiVersion: v1
    data:
      access.key: WE5WWVhVNU*****
      secret.key: Nnk4emJyZ0*****
    kind: Secret
    metadata:
      name: test-user
      namespace: default
      labels:
        secret.kubernetes.io/used-by: csi
    type: cfe/secure-opaque

    其中:

    参数

    描述

    access.key

    base64编码后的ak。

    secret.key

    base64编码后的sk。

    name

    secret的名称

    namespace

    secret的命名空间

    secret.kubernetes.io/used-by: csi

    带上这个标签才能在控制台上创建OBS PV/PVC时可见。

    type

    密钥类型,该值必须为cfe/secure-opaque

    使用该类型,用户输入的数据会自动加密。

  4. 创建Secret。

    kubectl create -f test-user.yaml

静态创建对象存储卷时指定挂载Secret

使用访问密钥创建Secret后,在创建PV时只需要关联上Secret,就可以使用Secret中的访问密钥(AK/SK)挂载对象存储卷。

  1. 登录OBS控制台,创建对象存储桶,记录桶名称和存储类型,以并行文件系统为例。
  2. 新建一个pv的yaml文件,如pv-example.yaml。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-obs-example
      annotations:
        pv.kubernetes.io/provisioned-by: everest-csi-provisioner
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 1Gi
      csi:
        nodePublishSecretRef:
          name: test-user
          namespace: default
        driver: obs.csi.everest.io
        fsType: obsfs
        volumeAttributes:
          everest.io/obs-volume-type: STANDARD
          everest.io/region: ap-southeast-1
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
        volumeHandle: obs-normal-static-pv
      persistentVolumeReclaimPolicy: Delete
      storageClassName: csi-obs

    参数

    描述

    nodePublishSecretRef

    挂载时指定的密钥,其中

    • name:指定secret的名字
    • namespace:指定secret的命令空间

    fsType

    文件类型,支持“obsfs”与“s3fs”,取值为s3fs时创建是obs对象桶,配套使用s3fs挂载;取值为obsfs时创建的是obs并行文件系统,配套使用obsfs挂载。

    volumeHandle

    对象存储的桶名称。

  3. 创建PV。

    kubectl create -f pv-example.yaml

    PV创建完成后,就可以创建PVC关联PV。

  4. 新建一个PVC的yaml文件,如pvc-example.yaml。

    PVC yaml文件配置示例:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        csi.storage.k8s.io/node-publish-secret-name: test-user
        csi.storage.k8s.io/node-publish-secret-namespace: default
        volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
        everest.io/obs-volume-type: STANDARD
        csi.storage.k8s.io/fstype: obsfs
      name: obs-secret
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-obs
      volumeName: pv-obs-example

    参数

    描述

    csi.storage.k8s.io/node-publish-secret-name

    指定secret的名字

    csi.storage.k8s.io/node-publish-secret-namespace

    指定secret的命令空间

  5. 创建PVC。

    kubectl create -f pvc-example.yaml

    PVC创建后,就可以创建工作负载挂载PVC使用存储。

动态创建对象存储卷时指定挂载密钥

动态创建对象存储卷时,可通过如下方法指定挂载密钥。

  1. 新建一个pvc的yaml文件,如pvc-example.yaml。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        csi.storage.k8s.io/node-publish-secret-name: test-user
        csi.storage.k8s.io/node-publish-secret-namespace: default
        everest.io/obs-volume-type: STANDARD
        csi.storage.k8s.io/fstype: obsfs
      name: obs-secret
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-obs

    参数

    描述

    csi.storage.k8s.io/node-publish-secret-name

    指定secret的名字

    csi.storage.k8s.io/node-publish-secret-namespace

    指定secret的命令空间

  2. 创建PVC。

    kubectl create -f pvc-example.yaml

    PVC创建后,就可以创建工作负载挂载PVC使用存储。

配置验证

根据上述步骤,使用IAM用户的密钥挂载对象存储卷。假设工作负载名称为obs-secret,容器内挂载目录是/temp,IAM用户权限为CCE ReadOnlyAccess和Tenant Guest。
  1. 查询工作负载实例名称。

    kubectl get po | grep obs-secret

    期望输出:

    obs-secret-5cd558f76f-vxslv          1/1     Running   0          3m22s
  2. 查询挂载目录下对象,查询正常。

    kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/

  3. 尝试在挂载目录内写入数据,写入失败。

    kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test

    期望输出:

    touch: setting times of '/temp/test': No such file or directory
    command terminated with exit code 1
  4. 参考桶策略配置,给挂载桶的子用户设置读写权限。

  5. 再次尝试在挂载目录内写入数据,写入成功。

    kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test

  6. 查看容器内挂载目录,验证数据写入成功。

    kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/

    期望输出:

    -rwxrwxrwx 1 root root 0 Jun  7 01:52 test