- tocdepth
2
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 не будет смонтирован.
Чтобы изменить значение у параметра 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|base64 echo -n yyy|base64
Запишите закодированные AK и SK.
Создайте 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.
При использовании этого типа данные, вводимые пользователями, автоматически шифруются.
Чтобы создать секрет, введите команду:
kubectl create -f test-user.yaml
Монтирование секрета при статическом создании тома OBS
После создания секрета с помощью AK/SK его можно связать с PV, а затем использовать AK/SK в секрете для монтирования тома OBS.
Войдите в консоль управления Advanced:
В списке сервисов выберите Object Storage Service.
Создайте бакет OBS и запишите его название и класс хранилища. В качестве примера используется параллельная файловая система.
Создайте 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
Чтобы создать PV, введите команду:
kubectl create -f pv-example.yaml
После создания PV можно создать PVC и связать его с PV.
Создайте 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
Пространство имен секрета
Чтобы создать PVC, введите команду:
kubectl create -f pvc-example.yaml
После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов.
Монтирование секрета при динамическом создании тома OBS
При динамическом создании тома OBS можно использовать следующий метод для монтирования секрета:
Создайте 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
Пространство имен секрета
Чтобы создать PVC, введите команду:
kubectl create -f pvc-example.yaml
После создания PVC можно создать рабочую нагрузку и связать ее с PVC для создания томов.
Верификация
Ниже приведен манифест рабочей нагрузки с названием obs-secret, путь подключения в контейнере — /temp, а IAM-пользователь имеет минимальные разрешения CCE ReadOnlyAccess и Tenant Guest.
Создайте 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
Чтобы создать рабочую нагрузку, введите команду:
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
для Dev & Test