В этой инструкции описывается процесс по монтированию тома 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 не будет смонтирован.
- Чтобы изменить значение у параметра disable_auto_mount_secret, введите команду: kubectl edit ds everest-csi-driver -nkube-system
- Найдите параметр disable-auto-mount-secret и установите для него значение «true». 
- Чтобы сохранить параметры и выйти, введите :wq. 
Подождите пока поды everest перезапустятся.
Создание секрета с помощью ключей доступа
- Чтобы закодировать ключи с помощью алгоритма Base64 (в этом примере AK — это xxx, а SK — yyy), введите: echo -n xxx|base64echo -n yyy|base64- Запишите закодированные AK и SK. 
- Создайте YAML-файл для секрета, например test-user.yaml. apiVersion: v1data:access.key: WE5WWVhVNU*****secret.key: Nnk4emJyZ0*****kind: Secretmetadata:name: test-usernamespace: defaultlabels:secret.kubernetes.io/used-by: csitype: 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. - При использовании этого типа данные, вводимые пользователями, автоматически шифруются. 
- Чтобы создать секрет, введите команду: kubectl create -f test-user.yaml
Монтирование секрета при статическом создании тома OBS
После создания секрета с помощью AK/SK его можно связать с PV, а затем использовать AK/SK в секрете для монтирования тома OBS.
- Войдите в консоль управления Advanced: 
- В списке сервисов выберите Object Storage Service. 
- Создайте бакет OBS и запишите его название и класс хранилища. В качестве примера используется параллельная файловая система. 
- Создайте YAML-файл для PV, например pv-example.yaml. apiVersion: v1kind: PersistentVolumemetadata:name: pv-obs-exampleannotations:pv.kubernetes.io/provisioned-by: everest-csi-provisionerspec:accessModes:- ReadWriteManycapacity:storage: 1Gicsi:nodePublishSecretRef:name: test-usernamespace: defaultdriver: obs.csi.everest.iofsType: obsfsvolumeAttributes:everest.io/obs-volume-type: STANDARDeverest.io/region: ru-moscow-1storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisionervolumeHandle: obs-normal-static-pvpersistentVolumeReclaimPolicy: DeletestorageClassName: csi-obs- Описание параметров файла - Параметр - Описание - nodePublishSecretRef - Секрет, указанный при монтировании. - name — название секрета; 
- namespace — пространство имен секрета. 
 - fsType - Тип файла. Значение может быть obsfs или s3fs. Если значение s3fs, бакет OBS создается и монтируется с использованием s3fs. Если значение obsfs, параллельная файловая система OBS создается и монтируется с помощью obsfs. Рекомендуется установить значение obsfs. - volumeHandle - Название бакета OBS 
- Чтобы создать PV, введите команду: kubectl create -f pv-example.yaml- После создания PV можно создать PVC и связать его с PV. 
- Создайте YAML-файл для PVC, например pvc-example.yaml. Пример YAML-файла для PVC
- Чтобы создать PVC, введите команду: kubectl create -f pvc-example.yaml- После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов. 
Монтирование секрета при динамическом создании тома OBS
При динамическом создании тома OBS можно использовать следующий метод для монтирования секрета:
- Создайте YAML-файл для PVC, например pvc-example.yaml. apiVersion: v1kind: PersistentVolumeClaimmetadata:annotations:csi.storage.k8s.io/node-publish-secret-name: test-usercsi.storage.k8s.io/node-publish-secret-namespace: defaulteverest.io/obs-volume-type: STANDARDcsi.storage.k8s.io/fstype: obsfsname: obs-secretnamespace: defaultspec:accessModes:- ReadWriteManyresources:requests:storage: 1GistorageClassName: csi-obs- Описание параметров файла - Параметр - Описание - csi.storage.k8s.io/node-publish-secret-name - Название секрета - csi.storage.k8s.io/node-publish-secret-namespace - Пространство имен секрета 
- Чтобы создать PVC, введите команду: kubectl create -f pvc-example.yaml- После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов. 
Верификация
Ниже приведен манифест рабочей нагрузки с названием obs-secret, путь подключения в контейнере — /temp, а IAM-пользователь имеет минимальные разрешения CCE ReadOnlyAccess и Tenant Guest.
- Создайте YAML-файл для рабочей нагрузки с названием obs-secret-deployment.yaml. kind: DeploymentapiVersion: apps/v1metadata:name: obs-secretnamespace: defaultspec:strategy:type: RollingUpdaterollingUpdate:maxSurge: 4replicas: 1selector:matchLabels:app: obs-secrettemplate:metadata:labels:app: obs-secretspec:containers:- name: container-0image: nginxresources:limits:cpu: 250mmemory: 512Mirequests:cpu: 250mmemory: 512MivolumeMounts:- mountPath: /tempname: obs-secretrestartPolicy: Alwaysvolumes:- name: obs-secretpersistentVolumeClaim:claimName: obs-secretimagePullSecrets:- name: default-secret
- Чтобы создать рабочую нагрузку, введите команду: kubectl create -f obs-secret-deployment.yaml
- Чтобы проверить статус рабочей нагрузки, введите команду: kubectl get pods | grep obs-secret- При успешном запуске пода в выводе команды отображается: obs-secret-5cd558f76f-vxslv 1/1 Running 0 3m22s
- Просмотрите объекты в пути монтирования. Введите команду: kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/- В выводе команды отображается: -rwxrwxrwx 1 root root 0 Jun 7 01:52 test
- Отключение автоматического монтирования ключей
- Создание секрета с помощью ключей доступа
- Монтирование секрета при статическом создании тома OBS
- Монтирование секрета при динамическом создании тома OBS
- Верификация