PVC OBS с пользовательскими AK/SK

В этой инструкции описывается процесс по монтированию тома OBS с помощью пользовательских ключей доступа (Access Key и Secret Access Key) для другого IAM-пользователя в рамках одного тенанта.

Отключение автоматического монтирования ключей

Загруженные AK/SK используются по умолчанию при монтировании тома OBS. То есть все IAM-пользователи под учетной записью тенанта будут использовать один и тот же ключ для монтирования бакетов OBS, и у них будут одинаковые права доступа к бакетам.

После загрузки AK/SK необходимо отключить автоматическое монтирование ключей доступа. Для этого в надстройке everest у параметра disable_auto_mount_secret измените значение на «true», чтобы IAM-пользователи не могли выполнять несанкционированные операции. Таким образом, загруженные ключи доступа не будут использоваться при создании томов OBS.

Примечание

Когда меняете значение у параметра disable_auto_mount_secret, проверьте, что в кластере нет тома OBS. Рабочая нагрузка, смонтированная с томом OBS, при масштабировании или перезапуске не сможет повторно смонтировать том OBS, так как для этого необходимо указать ключ доступа, а это запрещено параметром disable-auto-mount-secret.

Если для параметра disable-auto-mount-secret установлено значение «true», при создании PV или PVC необходимо указать ключ доступа. В ином случае том OBS не будет смонтирован.

  1. Чтобы изменить значение у параметра disable_auto_mount_secret, введите команду:

    kubectl edit ds everest-csi-driver -nkube-system
    
  2. Найдите параметр disable-auto-mount-secret и установите для него значение «true».

  3. Чтобы сохранить параметры и выйти, введите :wq.

Подождите пока поды everest перезапустятся.

Создание секрета с помощью ключей доступа

  1. Создайте ключи доступа.

  2. Чтобы закодировать ключи с помощью алгоритма Base64 (в этом примере AK — это xxx, а SK — yyy), введите:

    echo -n xxx|base64
    echo -n yyy|base64
    

    Запишите закодированные AK и SK.

  3. Создайте 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

    AK, закодированный с помощью Base64

    secret.key

    SK, закодированный с помощью Base64

    name

    Название секрета

    namespace

    Пространство имен секрета

    secret.kubernetes.io/used-by: csi

    Эта метка добавляется в YAML-файл для доступа в консоль CCE при создании PV/PVC

    type

    Тип секрета. Значение — cfe/secure-opaque.

    При использовании этого типа данные, вводимые пользователями, автоматически шифруются.

  4. Чтобы создать секрет, введите команду:

    kubectl create -f test-user.yaml
    

Монтирование секрета при статическом создании тома OBS

После создания секрета с помощью AK/SK его можно связать с PV, а затем использовать AK/SK в секрете для монтирования тома OBS.

  1. Войдите в консоль управления Advanced:

  2. Чтобы открыть список сервисов, нажмите Service List.

  3. Выберите Storage → Object Storage Service.

  4. Создайте бакет OBS и запишите его название и класс хранилища. В качестве примера используется параллельная файловая система.

  5. Создайте YAML-файл для PV, например 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: ru-moscow-1
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
        volumeHandle: obs-normal-static-pv
      persistentVolumeReclaimPolicy: Delete
      storageClassName: csi-obs
    
    Описание параметров файла

    Параметр

    Описание

    nodePublishSecretRef

    Секрет, указанный при монтировании.

    • name — название секрета;

    • namespace — пространство имен секрета.

    fsType

    Тип файла. Значение может быть obsfs или s3fs. Если значение s3fs, бакет OBS создается и монтируется с использованием s3fs. Если значение obsfs, параллельная файловая система OBS создается и монтируется с помощью obsfs. Рекомендуется установить значение obsfs.

    volumeHandle

    Название бакета OBS

  6. Чтобы создать PV, введите команду:

    kubectl create -f pv-example.yaml
    

    После создания PV можно создать PVC и связать его с PV.

  7. Создайте YAML-файл для PVC, например pvc-example.yaml.

    Пример YAML-файла для 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
    
    Описание параметров

    Параметр

    Описание

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

    Название секрета

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

    Пространство имен секрета

  8. Чтобы создать PVC, введите команду:

    kubectl create -f pvc-example.yaml
    

    После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов.

Монтирование секрета при динамическом создании тома OBS

При динамическом создании тома OBS можно использовать следующий метод для монтирования секрета:

  1. Создайте YAML-файл для PVC, например 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

    Название секрета

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

    Пространство имен секрета

  2. Чтобы создать PVC, введите команду:

    kubectl create -f pvc-example.yaml
    

    После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов.

Верификация

Ниже приведен манифест рабочей нагрузки с названием obs-secret, путь подключения в контейнере — /temp, а IAM-пользователь имеет минимальные разрешения CCE ReadOnlyAccess и Tenant Guest.

  1. Создайте YAML-файл для рабочей нагрузки с названием obs-secret-deployment.yaml.

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: obs-secret
      namespace: default
    spec:
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 4
      replicas: 1
      selector:
        matchLabels:
          app: obs-secret
      template:
        metadata:
          labels:
            app: obs-secret
        spec:
          containers:
          - name: container-0
            image: nginx
            resources:
              limits:
                cpu: 250m
                memory: 512Mi
              requests:
                cpu: 250m
                memory: 512Mi
            volumeMounts:
            - mountPath: /temp
              name: obs-secret
          restartPolicy: Always
          volumes:
          - name: obs-secret
            persistentVolumeClaim:
              claimName: obs-secret
          imagePullSecrets:
            - name: default-secret
    
  2. Чтобы создать рабочую нагрузку, введите команду:

    kubectl create -f obs-secret-deployment.yaml
    
  3. Чтобы проверить статус рабочей нагрузки, введите команду:

    kubectl get pods | grep obs-secret
    

    При успешном запуске пода в выводе команды отображается:

    obs-secret-5cd558f76f-vxslv          1/1     Running   0          3m22s
    
  4. Просмотрите объекты в пути монтирования. Введите команду:

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

    В выводе команды отображается:

    -rwxrwxrwx 1 root root 0 Jun  7 01:52 test
    
Запустили Evolution free tier
для Dev & Test
Получить