Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

Uso de una AK/SK personalizada para montar un volumen de OBS

Escenario

Puede resolver este problema con Everest 1.2.8 y las versiones posteriores para usar claves de acceso personalizadas para diferentes usuarios de IAM. Para obtener más información, vea ¿Cómo puedo controlar los permisos de acceso para OBS.

Requisitos previos

  • La versión del complemento más antiguo debe ser 1.2.8 o posterior.
  • La versión del clúster debe ser 1.15.11 o posterior.

Restricciones

Las claves de acceso personalizadas no se pueden configurar para los contenedores seguros.

Desactivación del montaje automático de la llave

La clave que ha cargado se utiliza de forma predeterminada al montar un volumen de OBS. Es decir, todos los usuarios de IAM bajo su cuenta usarán la misma clave para montar bucket de OBS, y tienen los mismos permisos en bucket. Esta configuración no permite configurar permisos diferenciados para diferentes usuarios de IAM.

Si ha cargado la AK/SK, se recomienda desactivar el montaje automático de claves de acceso activando el parámetro disable_auto_mount_secret en el complemento everest para evitar que los usuarios de IAM realicen operaciones no autorizadas. De esta manera, las claves de acceso cargadas en la consola no se usarán al crear volúmenes de OBS.

  • Al habilitar disable-auto-mount-secret, asegúrese de que no existe ningún volumen de OBS en el clúster. Una carga de trabajo montada con un volumen de OBS, cuando se escala o se reinicia, no podrá volver a montar el volumen de OBS porque necesita especificar la clave de acceso, pero disable-auto-mount-secret lo prohíbe.
  • Si disable-auto-mount-secret se establece en true, se debe especificar una clave de acceso cuando se crea un PV o PVC. De lo contrario, el volumen de OBS no se puede montar.

kubectl edit ds everest-csi-driver -nkube-system

Busque disable-auto-mount-secret y configúrelo en true.

Ejecute :wq para guardar la configuración y salir. Espere hasta que se reinicie el pod.

Obtención de una clave de acceso

  1. Inicie sesión en la consola.
  2. Pase el cursor sobre el nombre de usuario en la esquina superior derecha y elija My Credentials en la lista desplegable.
  3. En el panel de navegación, elija Access Keys.
  4. Haga clic en Create Access Key. Aparece el cuadro de diálogo Create Access Key.
  5. Haga clic en OK para descargar la clave de acceso.

Creación de un secreto mediante una clave de acceso

  1. Obtenga una clave de acceso.
  2. Codifique las claves con Base64. (Asume que la AK es xxx y la SK es yyyy.)

    echo -n xxx|base64

    echo -n yyy|base64

    Registre las AK y SK codificadas.

  3. Cree un archivo YAML para el secreto, por ejemplo, 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

    En especial:

    Parámetro

    Descripción

    access.key

    AK codificada en Base64.

    secret.key

    SK codificada en Base64.

    name

    Nombre de secreto.

    namespace

    Espacio de nombres del secreto.

    secret.kubernetes.io/used-by: csi

    Necesita agregar esta etiqueta en el archivo YAML si desea que esté disponible en la consola de CCE cuando cree un PV/PVC de OBS.

    type

    Tipo secreto. El valor debe ser cfe/secure-opaque.

    Cuando se utiliza este tipo, los datos introducidos por los usuarios se cifran automáticamente.

  4. Cree el secreto.

    kubectl create -f test-user.yaml

Montar un secreto al crear estáticamente un volumen de OBS

Después de crear un secreto con la AK/SK, puede asociar el secreto con el PV a crear y luego usar la AK/SK en secreto para montar un volumen de OBS.

  1. Inicie sesión en la consola de OBS, cree un bucket de OBS y registre el nombre del bucket y la clase de almacenamiento. El sistema de archivos paralelo se utiliza como ejemplo.
  2. Cree un archivo YAML para el PV, por ejemplo, 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

    Parámetro

    Descripción

    nodePublishSecretRef

    Secreto especificado durante el montaje.

    • name: nombre del secreto
    • namespace: espacio de nombres del secreto

    fsType

    Tipo de archivo. El valor puede ser obsfs o s3fs. Si el valor es de s3fs, se crea un bucket de OBS y se monta usando s3fs. Si el valor es de obsfs, se crea un sistema de archivos paralelo de OBS y se monta usando obsfs. Se recomienda establecer este campo en obsfs.

    volumeHandle

    Nombre del bucket de OBS.

  3. Cree un PV.

    kubectl create -f pv-example.yaml

    Después de crear un PV, puede crear un PVC y asociarlo con el PV.

  4. Cree un archivo YAML para el PVC, por ejemplo, pvc-example.yaml.

    Ejemplo de archivo YAML para el PVC:

    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

    Parámetro

    Descripción

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

    Nombre del secreto

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

    Espacio de nombres del secreto

  5. Cree un PVC.

    kubectl create -f pvc-example.yaml

    Una vez creado el PVC, puede crear una carga de trabajo y asociarla con el PVC para crear volúmenes.

Montar un secreto al crear dinámicamente un volumen de OBS

Al crear dinámicamente un volumen de OBS, puede utilizar el siguiente método para especificar un secreto:

  1. Cree un archivo YAML para el PVC, por ejemplo, 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

    Parámetro

    Descripción

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

    Nombre del secreto

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

    Espacio de nombres del secreto

  2. Cree un PVC.

    kubectl create -f pvc-example.yaml

    Una vez creado el PVC, puede crear una carga de trabajo y asociarla con el PVC para crear volúmenes.

Verificación

Puede utilizar un secreto de un usuario de IAM para montar un volumen de OBS. Supongamos que se crea una carga de trabajo llamada obs-secret, la ruta de montaje en el contenedor es de /temp y el usuario de IAM tiene los permisos de CCE ReadOnlyAccess y Tenant Guest.
  1. Consulte el nombre del pod de carga de trabajo.

    kubectl get po | grep obs-secret

    Productos previstos:

    obs-secret-5cd558f76f-vxslv          1/1     Running   0          3m22s
  2. Consulte los objetos en la ruta de montaje. En este ejemplo, la consulta se realiza correctamente.

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

  3. Escriba los datos en la ruta de montaje. En este ejemplo, la operación de escritura falló.

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

    Productos previstos:

    touch: setting times of '/temp/test': No such file or directory
    command terminated with exit code 1
  4. Establezca los permisos de lectura/escritura para el usuario de IAM que montó el volumen de OBS haciendo referencia a la configuración de la política de bucket.

  5. Escriba los datos en el camino de la boca de nuevo. En este ejemplo, la operación de escritura se realizó correctamente.

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

  6. Compruebe la ruta de montaje en el contenedor para ver si los datos se escriben correctamente.

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

    Productos previstos:

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