Защита пользовательских данных с помощью модуля 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.
-
Сохраните полученный манифест и установите его в кластер Kubernetes с помощью Nova Console или kubectl.
Пример
kubectl apply -f nova-release-cluster-backup-velero.yaml kustomization.kustomize.toolkit.fluxcd.io/nova-release-velero-main created -
Проверьте статус кастомизации:
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.0.0@sha1:86f53cb7e4dbacb29fa42f2c1c9814fa6aec7a07 -
Проверьте состояние запущенных компонентов 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. -
У вас подготовлена учетная запись для доступа к объектному хранилищу.
-
Создайте на локальной машине файл, например,
cloud-credentials. В данном файле необходимо указать учетную запись по умолчанию для подключения к объектному хранилищу.Пример
cat << EOF > ./cloud-credentials [default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> EOF -
Создайте секрет по умолчанию:
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 с помощью команды:
|
Необходимые условия
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Kubernetes. -
У вас есть токен доступа к хранилищу секретов StarVault с привилегиями
root. -
У вас подготовлена учетная запись для доступа к объектному хранилищу.
-
Подключитесь к StarVault следуя процедуре, описанной в разделе Подключение к StarVault.
-
Перейдите в раздел Secrets, выберете секрет
nova-secrets. -
В секрете
nova-secretsперейдите вcredentials, далее вnova-velero. -
Создайте новую версию секрета, используя кнопку “Create new version” измените значение ключа
repository_passwordна новое.
2.3. Настройка BackupStorageLocation
Для регистрации объектного хранилища в Velero вам необходимо создать CR BackupStorageLocation.
-
Подготовьте манифест 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: cloud1 Имя CR BackupStorageLocation. 2 Пространство имен, где регистрируется объектное хранилище. 3 (Опционально) регион для подключения к объектному хранилищу. 4 Точка подключения к объектному хранилищу. 5 Установить объектное хранилище по умолчанию. 6 Имя бакета для хранения резервных копий. 7 Имя провайдера для подключения к объектному хранилищу. 8 Имя секрета доступа к объектному хранилищу. Пример
kubectl create -f backup-storage-location.yaml backupstoragelocation.velero.io/default created -
Проверьте статус регистрации объектного хранилища:
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 trueVelero 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.
-
Получите список резервных копий и выберете копию для восстановления:
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 25mVelero 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 -
Восстановите выбранную резервную копию в кластер 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.
-
-
Проверьте статус задания на восстановление резервной копии:
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> -
Получите список 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 -
Скопируйте резервные копии мастер-узлов с каждого из 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Файлы резервной копии будут сохранены в текущую директорию на локальной машине пользователя.
-
Проверьте список полученных файлов:
Пример
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.0.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.0.0_2024-06-11_050616.db -
После восстановления резервной копии сервиса 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.
-
У вас есть ключ шифрования резервных копий.
-
У вас есть доступ к бакету в объектном хранилище, где сохранены резервные копии.
-
Подключитесь к хранилищу резервных копий с помощью 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.
-
-
Получите список идентификаторов снапшотов в хранилище резервных копий:
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
-
-
Восстановите необходимую резервную копию:
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). -
Проверьте восстановленные данные:
Пример
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.0.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.0.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.
-
-
Повторите действия по восстановлению для оставшихся Pod’ов сервиса Nova Backup Daemon.
-
Отключитесь от хранилища резервных копий:
kopia repository disconnect
|
В настоящее время в Velero используется общий статический ключ шифрования для всех создаваемых репозиториев резервного копирования. Это означает, что любой, кто имеет доступ к вашему хранилищу резервных копий, может расшифровать ваши резервные копии. Обязательно ограничьте доступ к хранилищу резервных копий соответствующим образом. |