Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Защита пользовательских данных с помощью модуля Data Protection

В данном разделе описана защита пользовательских данных с помощью модуля Data Protection.

1. Установка модуля Nova Data Protection

Для установки модуля Data Protection в Nova Container Platform с настройками по умолчанию используйте представленный далее манифест кастомизации.

Манифест кастомизации
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: nova-release-velero-main
  namespace: nova-gitops
  labels:
    nova-application-group: data-protection
    kustomization.nova-platform.io/cluster: "true"
spec:
  serviceAccountName: kustomize-controller
  commonMetadata:
    labels:
      app.kubernetes.io/managed-by: Nova
  interval: 10m
  retryInterval: 30s
  timeout: 5m
  prune: false
  force: true
  dependsOn:
  - name: nova-release-cluster-crds
  sourceRef:
    kind: GitRepository
    name: nova-release-gitrepo-main
  path: ./resources/velero/main
  postBuild:
    substituteFrom:
    - kind: ConfigMap
      name: nova-gitops-common-substitute-config
  healthChecks:
    - apiVersion: apps/v1
      kind: Deployment
      name: velero
      namespace: nova-cluster-backup
    - apiVersion: apps/v1
      kind: DaemonSet
      name: node-agent
      namespace: nova-cluster-backup

1.1. Установка в Kubernetes

Необходимые условия

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

Порядок действий
  1. Сохраните полученный манифест и установите его в кластер Kubernetes с помощью Nova Console или kubectl.

    Пример

    kubectl apply -f nova-release-cluster-backup-velero.yaml
    
    kustomization.kustomize.toolkit.fluxcd.io/nova-release-velero-main created
  2. Проверьте статус кастомизации:

    kubectl get ks nova-release-velero-main -n nova-gitops

    Пример

    kubectl get ks nova-release-velero-main -n nova-gitops
    
    NAME                       AGE   READY   STATUS
    nova-release-velero-main   55s   True    Applied revision: v1.1.0@sha1:86f53cb7e4dbacb29fa42f2c1c9814fa6aec7a07
  3. Проверьте состояние запущенных компонентов Velero, выполнив команду:

    kubectl get pods -n nova-cluster-backup
    Пример
    kubectl get pods -n nova-cluster-backup
    
    NAME                           READY   STATUS    RESTARTS   AGE
    velero-7877767f4-zkdbh         1/1     Running   0          22s
    node-agent-b4wrh               1/1     Running   0          22s
    node-agent-hpcj5               1/1     Running   0          22s
    node-agent-tmvvp               1/1     Running   0          22s
    node-agent-vhh6b               1/1     Running   0          22s
    node-agent-w2qbb               1/1     Running   0          22s
    node-agent-xk5l4               1/1     Running   0          22s
    node-agent-xlh6k               1/1     Running   0          22s

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

2. Настройка хранилища резервных копий

В модуле Data Protection ПО Velero поставляется с плагином для подключения к объектному хранилищу, совместимому с Amazon Web Services (AWS) S3. Вы также можете использовать любые S3-совместимые хранилища для подключения к Velero.

Для подключения объектного хранилища в Velero вам необходимо настроить в Kubernetes объект Secret, в котором должны быть установлены учетные данные. Как правило, это переменные aws_access_key_id и aws_secret_access_key. Кроме этого, вам потребуется переопределить точку подключения к объектному хранилищу.

Следуйте инструкциям ниже, чтобы настроить хранилище резервных копий.

2.1. Настройка секрета доступа к объектному хранилищу

Секрет доступа к объектному хранилищу должен быть размещен в среде Kubernetes. Для корректной работы Velero должен быть создан секрет по умолчанию, который будет использоваться для доступа к объектному хранилищу в случаях, когда отдельный секрет явно не указан.

При дальнейшей настройке вы можете создать любое дополнительное количество секретов.

Размещение секрета доступа к объектному хранилищу в StarVault не дает явных преимуществ в безопасности платформы. При этом значительно повышается сложность эксплуатации решения по резервному копированию, особенно, когда резервное копирование выполняется в разные бакеты или хранилища, где требуются отдельные учетные записи.

Необходимые условия
  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • У вас подготовлена учетная запись для доступа к объектному хранилищу.

Порядок действий:
  1. Создайте на локальной машине файл, например, cloud-credentials. В данном файле необходимо указать учетную запись по умолчанию для подключения к объектному хранилищу.

    Пример

    cat << EOF > ./cloud-credentials
    [default]
    aws_access_key_id=<AWS_ACCESS_KEY_ID>
    aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
    EOF
  2. Создайте секрет по умолчанию:

    kubectl create secret generic cloud-credentials -n nova-cluster-backup --from-file cloud=cloud-credentials

    Пример

    kubectl create secret generic cloud-credentials -n nova-cluster-backup --from-file cloud=cloud-credentials
    
    secret/cloud-credentials created

2.2. Настройка ключа шифрования данных

Резервные копии персистентных данных (файлов) зашифровываются с помощью ключа, хранимого в StarVault. Данный ключ уникален для каждой инсталляции Nova Container Platform. При необходимости, вы можете сменить ключ шифрования следуя процедуре ниже.

Рекомендуется сменить ключ шифрования до настройки каких-либо планов резервного копирования. После настройки ключа шифрования вам необходимо выполнить перезапуск Velero с помощью команды:

kubectl -n nova-cluster-backup rollout restart deployment/velero

Необходимые условия

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • У вас есть токен доступа к хранилищу секретов StarVault с привилегиями root.

  • У вас подготовлена учетная запись для доступа к объектному хранилищу.

Порядок действий
  1. Подключитесь к StarVault следуя процедуре, описанной в разделе Подключение к StarVault.

  2. Перейдите в раздел Secrets, выберете секрет nova-secrets.

  3. В секрете nova-secrets перейдите в credentials, далее в nova-velero.

  4. Создайте новую версию секрета, используя кнопку “Create new version” измените значение ключа repository_password на новое.

2.3. Настройка BackupStorageLocation

Для регистрации объектного хранилища в Velero вам необходимо создать CR BackupStorageLocation.

Порядок действий
  1. Подготовьте манифест CR BackupStorageLocation и установите его в кластер Kubernetes с помощью Nova Console или kubectl.

    apiVersion: velero.io/v1
    kind: BackupStorageLocation
    metadata:
      labels:
        app.kubernetes.io/managed-by: Nova
      name: default (1)
      namespace: nova-cluster-backup (2)
    spec:
      config:
        region: ru-dc-1 (3)
        s3Url: https://s3.nova.internal (4)
      default: true (5)
      objectStorage:
        bucket: velero-backup-bucket (6)
      provider: aws (7)
      credential:
        name: cloud-credentials (8)
        key: cloud
    1 Имя CR BackupStorageLocation.
    2 Пространство имен, где регистрируется объектное хранилище.
    3 (Опционально) регион для подключения к объектному хранилищу.
    4 Точка подключения к объектному хранилищу.
    5 Установить объектное хранилище по умолчанию.
    6 Имя бакета для хранения резервных копий.
    7 Имя провайдера для подключения к объектному хранилищу.
    8 Имя секрета доступа к объектному хранилищу.

    Пример

    kubectl create -f backup-storage-location.yaml
    
    backupstoragelocation.velero.io/default created
  2. Проверьте статус регистрации объектного хранилища:

    kubectl
    kubectl get backupstoragelocations.velero.io default -n nova-cluster-backup

    Пример

    kubectl get backupstoragelocations.velero.io default -n nova-cluster-backup
    
    NAME      PHASE       LAST VALIDATED   AGE   DEFAULT
    default   Available   47s              47s   true
    Velero CLI
    velero backup-location get

    Пример

    velero backup-location get
    
    NAME      PROVIDER   BUCKET/PREFIX          PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
    default   aws        velero-backup-bucket   Available   2024-06-10 11:42:05 +0000 UTC   ReadWrite     true

    Значение PHASE Available указывает на то, что бакет объектного хранилища доступен для хранения резервных копий.

На данном этапе настройка хранилища резервных копий завершена, и вы можете перейти к настройкам планов резервного копирования.

3. Восстановление резервных копий мастер-узлов

Перед тем, как восстанавливать какой-либо компонент мастер-узла или кластера Kubernetes в Nova Container Platform с помощью резервной копии Velero, необходимо сперва восстановить копию сервиса Nova Backup Daemon, в котором хранится резервная копия мастер-узлов. Кроме этого, поддерживается сценарий восстановления данных из объектного хранилища без доступа к Velero с помощью Kopia.

В разделах ниже описаны обе процедуры восстановления данных.

3.1. Восстановление данных с помощью Velero

При восстановлении данных с помощью Velero в кластер Kubernetes восстанавливается копия сервиса Nova Backup Daemon, в которой находятся резервные копии мастер-узлов. Вы можете перенести данные копии на локальную машину и перейти к восстановлению отдельных компонентов мастер-узлов и среды Kubernetes.

Необходимые условия
  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

  • Вы настроили утилиту velero для работы с резервными копиями Velero.

Порядок действий
  1. Получите список резервных копий и выберете копию для восстановления:

    kubectl
    kubectl get backups.velero.io -n nova-cluster-backup

    Пример

    kubectl get backups.velero.io -n nova-cluster-backup
    
    NAME                                  AGE
    control-plane-backup-20240611101535   145m
    control-plane-backup-20240611111535   85m
    control-plane-backup-20240611121535   25m
    Velero CLI
    velero backup get

    Пример

    velero backup get
    
    NAME                                  STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
    control-plane-backup-20240610141525   Completed   0        0          2024-06-10 14:15:25 +0000 UTC   1h        default            app.kubernetes.io/component=nova-backup-daemon
    control-plane-backup-20240610131525   Completed   0        0          2024-06-10 13:15:25 +0000 UTC   33m       default            app.kubernetes.io/component=nova-backup-daemon
    control-plane-backup-20240610161525   Completed   0        0          2024-06-10 12:15:25 +0000 UTC   26m ago   default            app.kubernetes.io/component=nova-backup-daemon
  2. Восстановите выбранную резервную копию в кластер Kubernetes:

    velero restore create <RESTORE_NAME> \
        --from-backup <BACKUP_NAME> \
        --namespace-mappings nova-cluster-backup:nova-cluster-restore

    Для восстановления резервной копии используйте следующие данные:

    • RESTORE_NAME - имя задания на восстановление резервной копии

    • BACKUP_NAME - имя выбранной резервной копии

      Не изменяйте значение ключа --namespace-mappings при создании задания на восстановление резервной копии. Копия восстанавливается в пространство имен nova-cluster-restore, сохраняя работоспособность сервиса Nova Backup Daemon в пространстве имен nova-cluster-backup.

      Пример

      velero restore create restore-control-plane-backup-20240610161525 \
          --from-backup control-plane-backup-20240610161525 \
          --namespace-mappings nova-cluster-backup:nova-cluster-restore
      
      Restore request "restore-control-plane-backup-20240610161525" submitted successfully.
      Run `velero restore describe restore-control-plane-backup-20240610161525` or `velero restore logs restore-control-plane-backup-20240610161525` for more details.
  3. Проверьте статус задания на восстановление резервной копии:

    velero restore get restore-control-plane-backup-20240610161525

    Пример

    velero restore get restore-control-plane-backup-20240610161525
    
    NAME                                          BACKUP                                STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
    restore-control-plane-backup-20240610161525   control-plane-backup-20240610161525   Completed   2024-06-11 15:33:51 +0000 UTC   2024-06-11 15:33:57 +0000 UTC   0        3          2024-06-11 15:33:51 +0000 UTC   <none>
  4. Получите список Pod’ов сервиса Nova Backup Daemon в пространстве имен nova-cluster-restore:

    kubectl get pods -n nova-cluster-restore

    Пример

    kubectl get pods -n nova-cluster-restore
    
    NAME                       READY   STATUS    RESTARTS   AGE
    nova-backup-daemon-2xf9p   1/1     Running   0          78s
    nova-backup-daemon-s5zws   1/1     Running   0          78s
    nova-backup-daemon-z4lmn   1/1     Running   0          77s
  5. Скопируйте резервные копии мастер-узлов с каждого из Pod:

    PODNAME=<POD_NAME>; \
        for file in $(kubectl exec $PODNAME -n nova-cluster-restore -c backup-daemon -- ls /opt/backup); \
        do kubectl cp -c backup-daemon nova-cluster-restore/$PODNAME:/opt/backup/$file $PWD/$file; done

    В качестве <POD_NAME> укажите имя Pod сервиса Nova Backup Daemon.

    Пример

    PODNAME=nova-backup-daemon-2xf9p; \
        for file in $(kubectl exec $PODNAME -n nova-cluster-restore -c backup-daemon -- ls /opt/backup); \
        do kubectl cp -c backup-daemon nova-cluster-restore/$PODNAME:/opt/backup/$file $PWD/$file; done

    Файлы резервной копии будут сохранены в текущую директорию на локальной машине пользователя.

  6. Проверьте список полученных файлов:

    Пример

    ls -la
    
    drwxr-xr-x. 2 root root     4096 Jun 11 19:09 .
    drwxr-xr-x. 7 root root     4096 Jun 11 18:39 ..
    -rw-r--r--. 1 root root 68989925 Jun 11 19:09 etcd_snapshot_nova-v1.1.0_k8s-v1.27.11_2024-06-11_050616.db.tar.gz
    -rw-r--r--. 1 root root 33970260 Jun 11 19:09 nova-master-1-nova-internal_kuberesources_2024-06-11_050616.tar.gz
    -rw-r--r--. 1 root root 33971757 Jun 11 19:08 nova-master-2-nova-internal_kuberesources_2024-06-11_050535.tar.gz
    -rw-r--r--. 1 root root 33973476 Jun 11 19:08 nova-master-3-nova-internal_kuberesources_2024-06-11_050556.tar.gz
    -rw-r--r--. 1 root root   375225 Jun 11 19:09 starvault_snapshot_nova-v1.1.0_2024-06-11_050616.db
  7. После восстановления резервной копии сервиса Nova Backup Daemon удалите задание на восстановление:

    velero restore delete <RESTORE_NAME>

    В качестве <RESTORE_NAME> укажите имя задания на восстановление резервной копии, которое необходимо удалить.

    Пример

    velero restore delete restore-control-plane-backup-20240610161525
    
    Are you sure you want to continue (Y/N)? y
    Request to delete restore "restore-control-plane-backup-20240610161525" submitted successfully.
    The restore will be fully deleted after all associated data (restore files in object storage) are removed.

    Также удалите восстановленный сервис Nova Backup Daemon:

    Пример

    kubectl delete ds -n nova-cluster-restore nova-backup-daemon

3.2. Восстановление данных c помощью Kopia

Для восстановления данных из объектного хранилища напрямую без участия Velero вам необходимо будет подключиться к репозиторию резервных копий Kopia с помощью утилиты Kopia CLI. Данный репозиторий инициализируется с помощью Velero автоматически в процессе настройки резервного копирования. Вы сможете получить файлы, которые были подготовлены сервисом Nova Backup Daemon. Имея данные файлы, вы сможете перейти к восстановлению отдельных компонентов мастер-узлов и среды Kubernetes.

Необходимые условия

  • Вы установили утилиту Kopia CLI.

  • У вас есть ключ шифрования резервных копий.

  • У вас есть доступ к бакету в объектном хранилище, где сохранены резервные копии.

Порядок действий
  1. Подключитесь к хранилищу резервных копий с помощью Kopia CLI:

    kopia repository connect s3 \
        --access-key=<AWS_ACCESS_KEY_ID> \
        --secret-access-key=<AWS_SECRET_ACCESS_KEY> \
        --bucket=<BUCKET_NAME> \
        --prefix=kopia/nova-cluster-backup/ \
        --endpoint=<S3_ENDPOINT_URL>
    
    Enter password to open repository:
    <ENCRYPTION_PASSWORD>

    Для подключения используйте следующие данные:

    • AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY - учетные данные для подключения к объектному хранилищу

    • BUCKET_NAME - имя бакета для хранения резервных копий.

    • S3_ENDPOINT_URL - точка подключения к объектному хранилищу без указания протокола.

      Пример

      kopia repository connect s3 \
          --access-key="ASIAIOSFODNN7EXAMPLE" \
          --secret-access-key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
          --bucket=velero-backup-bucket \
          --prefix=kopia/nova-cluster-backup/ \
          --endpoint=s3.nova.internal
      
      Enter password to open repository: ********
      
      Connected to repository.
  2. Получите список идентификаторов снапшотов в хранилище резервных копий:

    kopia snapshot list --all -l

    Пример

    kopia snapshot list –all -l
    
    default@default:/host_pods/1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:40 MSK k702d957ec030e814fbc61bcd63d2d316 34 MB drwxrwxrwx files:1 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:40 MSK kf576cc276650d10920e96b48d162ea5a 34 MB drwxrwxrwx files:1 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:40 MSK k2d67a575200c57344846b221c36e9bd6 34 MB drwxrwxrwx files:1 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin
    
    default@default:/host_pods/4f4aaa17-da1a-4c30-a587-535604a991b1/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:57 MSK kfcafeadd427239980e47f4eceeed244a 94.2 MB drwxrwxrwx files:3 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:58 MSK k31d18913f2a147722f292609b987ad15 93.3 MB drwxrwxrwx files:3 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:58 MSK k570cf06adf55dbf2e87b2959f148c3b2 92.3 MB drwxrwxrwx files:3 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin
    
    default@default:/host_pods/fd076d09-d8f6-480e-addf-03f3fa33f633/volumes/kubernetes.io~empty-dir/backup-volume 2024-06-11 12:15:47 MSK kf3872b5f18ef1fd536fe1d75cb2fa160 34 MB drwxrwxrwx files:1 dirs:1 (latest-3,hourly-3) pins:velero-pin 2024-06-11 13:15:47 MSK k7113f38a1b63f03caf4ca1cb179550fb 34 MB drwxrwxrwx files:1 dirs:1 (latest-2,hourly-2) pins:velero-pin 2024-06-11 14:15:47 MSK kc950a4ee5808557fe2c3d01df22ff4e3 34 MB drwxrwxrwx files:1 dirs:1 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin +

    В выводе команды отображен список резервных копий томов backup-volume для трех разных Pod сервиса Nova Backup Daemon, имеющих UID:

    • 1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd

    • 4f4aaa17-da1a-4c30-a587-535604a991b1

    • fd076d09-d8f6-480e-addf-03f3fa33f633

      Для того, чтобы проверить соответствие данных резервных копий узлам в Kubernetes, вы можете выполнить команду:

      kubectl get pod -l app.kubernetes.io/component=nova-backup-daemon -n nova-cluster-backup \
          -o custom-columns=PodName:.metadata.name,UID:.metadata.uid,NODE:.spec.nodeName

      Пример

      kubectl get pod -l app.kubernetes.io/component=nova-backup-daemon -n nova-cluster-backup \
          -o custom-columns=PodName:.metadata.name,UID:.metadata.uid,NODE:.spec.nodeName
      
      PodName                    UID                                    NODE
      nova-backup-daemon-2xf9p   1eeb2ac9-36de-4a9c-a1d1-a0ac4618f6fd   nova-master-2.nova.internal
      nova-backup-daemon-s5zws   fd076d09-d8f6-480e-addf-03f3fa33f633   nova-master-3.nova.internal
      nova-backup-daemon-z4lmn   4f4aaa17-da1a-4c30-a587-535604a991b1   nova-master-1.nova.internal
  3. Восстановите необходимую резервную копию:

    kopia snapshot restore <SNAPSHOT_ID>

    В качестве SNAPSHOT_ID укажите тот идентификатор снапшота, временная метка которого соответствует требуемой точке восстановления.

    Пример

    kopia snapshot restore k570cf06adf55dbf2e87b2959f148c3b2
    
    Restoring to local filesystem (/root/k570cf06adf55dbf2e87b2959f148c3b2) with parallelism=8...
    Processed 4 (92.3 MB) of 3 (92.3 MB) 69.9 MB/s (100.0%) remaining 0s.
    Processed 4 (92.3 MB) of 3 (92.3 MB) 69.9 MB/s (100.0%) remaining 0s.
    Restored 3 files, 1 directories and 0 symbolic links (92.3 MB).
  4. Проверьте восстановленные данные:

    Пример

    ls -la /root/k570cf06adf55dbf2e87b2959f148c3b2/
    итого 90160
    drwxrwxrwx.  2 root root     4096 Jun 11 14:15 .
    dr-xr-x---. 89 root root     4096 Jun 11 14:50 ..
    -rw-r--r--.  1 root root 58044113 Jun 11 14:15 etcd_snapshot_nova-v1.1.0_k8s-v1.27.11_2024-06-11_111549.db.tar.gz
    -rw-------.  1 root root 33970429 Jun 11 14:15 nova-master-1-nova-internal_kuberesources_2024-06-11_111549.tar.gz
    -rw-------.  1 root root   292009 Jun 11 14:15 starvault_snapshot_nova-v1.1.0_2024-06-11_111549.db

    Для архивов резервных копий применяется следующая схема именования:

    • Имя архива резервной копии Etcd имеет формат etcd_snapshot_nova-<Версия Nova>_k8s-<Версия Kubernetes>_<Время создания копии>.db.tar.gz.

    • Имена архивов резервных копий конфигураций мастер-узлов имеют формат <Имя узла в Kubernetes>_kuberesources_<Время создания копии>.tar.gz.

    • Имя архива резервной копии StarVault имеет формат starvault_snapshot_nova-<Версия Nova>_<Время создания копии>1.db.

      Резервная копия только одного из мастер-узлов включает копии Etcd и StarVault.

  5. Повторите действия по восстановлению для оставшихся Pod’ов сервиса Nova Backup Daemon.

  6. Отключитесь от хранилища резервных копий:

    kopia repository disconnect

В настоящее время в Velero используется общий статический ключ шифрования для всех создаваемых репозиториев резервного копирования. Это означает, что любой, кто имеет доступ к вашему хранилищу резервных копий, может расшифровать ваши резервные копии. Обязательно ограничьте доступ к хранилищу резервных копий соответствующим образом.