Облачная платформаAdvanced

Использование пользовательского ключа доступа (AK/SK) для монтирования тома OBS

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

CCE Container Storage (Everest) поддерживает пользовательские ключи доступа. Таким образом, пользователи IAM могут использовать свои собственные пользовательские ключи доступа для монтирования тома OBS. Вы можете использовать IAM для управления правами доступа к OBS для пользователей IAM.

Требования

  • Версия CCE Container Storage (Everest) должна быть 1.2.8 или новее.
  • Версия кластера должна быть 1.15.11 или новее.

Ограничения

  • При монтировании тома OBS с использованием пользовательских ключей доступа (AK/SK) ключ доступа нельзя удалять или отключать. В противном случае контейнер сервиса не сможет получить доступ к смонтированному тому OBS.
  • Пользовательские ключи доступа нельзя настраивать для защищённых контейнеров.

Отключение ключей доступа

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

Если вы загрузили AK/SK (конкретно, если paas.longaksk существует в пространстве имён kube-system кластера), следует отключить глобальный секрет доступа, чтобы предотвратить выполнение неавторизованных операций пользователями IAM. Это гарантирует, что загруженный в консоли глобальный секрет доступа не будет использоваться при работе с томами OBS. Если вы не загрузили ни один AK/SK, пропустите этот раздел.

Note
  • Перед отключением глобального секрета доступа убедитесь, что текущий кластер не использует том OBS. В противном случае этот том не будет смонтирован при масштабировании или перезапуске нагрузки, в которой том смонтирован, поскольку необходимо указать ключи доступа.
  • После отключения глобального секрета доступа необходимо указывать ключи доступа при создании PV и PVC. В противном случае том OBS не будет смонтирован.

Чтобы отключить глобальный секрет доступа, выполните следующие действия:

  • Отключите автоматическое монтирование секретов доступа в дополнении Everest, установив disable_auto_mount_secret в значение true.
  • В области Settings > Cluster Settings отключите глобальный секрет доступа кластера. Глобальный секрет доступа (paas.longaksk) в пространстве имён kube-system кластера будет удалён.

Получение Access Keys

  1. Откройте My Credentials страницу.
  2. В панели навигации выберите Access Keys.
  3. Нажмите Create Access Key. Появится диалоговое окно Create Access Key.
  4. Нажмите OK, чтобы загрузить ключ доступа.

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

  1. Получите ключи доступа.
  2. Закодируйте ключи доступа с помощью Base64. (Предположим, что AK = xxx и SK = yyy.)

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

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

  3. Создайте YAML‑файл для Secret, например, 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.kubernetes.io/used-by: csi

    Add this label if you want to make it available on the CCE console when you create an OBS PV/PVC.

    type

    Тип секрета. Значение должно быть cfe/secure-opaque.

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

  4. Создайте секрет.

    kubectl create -f test-user.yaml

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

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

  1. Войдите в OBS console, создайте OBS bucket и запишите имя bucket и StorageClass. В качестве примера используется параллельная файловая система.
  2. Создайте 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

    Parameter

    Description

    nodePublishSecretRef

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

    • name: имя секрета
    • namespace: пространство имён секрета

    fsType

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

    volumeHandle

    Имя тома OBS.

  3. Создайте PV.

    kubectl create -f pv-example.yaml

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

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

    Namespace of the secret

  5. Create a 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

    Parameter

    Description

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

    Secret name

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

    Namespace of the secret

  2. Create a PVC.

    kubectl create -f pvc-example.yaml

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

Verification

Вы можете использовать секрет IAM‑пользователя для монтирования OBS‑тома. Предположим, что создан workload с именем obs-secret, путь монтирования в контейнере — /temp, и у IAM‑пользователя есть разрешения CCE ReadOnlyAccess и Tenant Guest.

  1. Запросите имя pod workload.
    kubectl get pod | 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. Установите разрешения чтения/записи для IAM‑пользователя, смонтировавшего OBS‑том, ссылаясь на конфигурацию политики бакета.

  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