Облачная платформа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 отключите глобальный access secret кластера. Глобальный access secret (paas.longaksk) в пространстве имён kube-system кластера будет удалён.

Получение Access Keys

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

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

  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

    Добавьте эту метку, чтобы секрет был доступен для выбора в консоли CCE при создании 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‑бакет и запишите имя бакета и 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: namespace секрета

    fsType

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

    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

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

  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

    Имя секрета

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

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

  2. Create a PVC.

    kubectl create -f pvc-example.yaml

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

Проверка

Вы можете использовать секрет 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