Рубрики
Uncategorized

Как резервное копирование хранилища Hashicorp с хранением плота на Куберане

Контекст Наша команда экспериментирует с Hashicorp Vault как наши новые полномочия управления … Помечено с Кубернетами, хранилищем, дежопами, Hashicorp.

Контекст

Наша команда экспериментирует с Hashicorp Vault. Как наши новые полномочия управления управлением. Благодаря авторитету Диаграмма Helm Vault Мы можем получить практически готовый кластер хранилища, работающий на наших кластере Kubernetes с минимальными усилиями.

Архитектура

Наш кластер Vault Vault 5-узла очень доступен, используя предоставленные Интегрированное хранилище плода Backend Отказ Кластер хранилища работает как Kubernetes Statefulset И каждый узел имеет собственное хранение данных. Каждое хранилище данных питается от Блок хранения На IBM Облако через PersiStentVolumeclaim Отказ

Эта проблема

К сожалению, Vault с открытым исходным кодом не предоставляет автоматическое резервное копирование автоматизированного резервного копирования. Это только предложение в Световое предприятие Отказ По-видимому, наша команда не имеет глубокого кармана для оплаты лицензионного плата.

Тем не менее, функция резервного копирования все еще доступна с CLI и HTTP API, просто не автоматизирована. Мы используем Снимок Сохранить От Vault CLI для выполнения автоматической резервной копии с помощью Cronjob Бег вместе с развертыванием хранилища Kubernetes. Cronjob будет периодически делать снимок кластера хранилища и загружать на наше хранилище S3.

Как?

Предпосылка

  • У вас есть рабочий кластер хранилища
  • У вас есть достаточный доступ к кластеру
  • У вас есть рабочий экземпляр хранения S3

Настройка политики и аутентификация

Это в основном украдена от Adfinis-Syroup/Vault-Raft-Backup-Agent # Approl-аутентификация

Создайте минимальную политику для нашего агента Snapshot для выполнения работы резервного копирования.

echo '
path "sys/storage/raft/snapshot" {
   capabilities = ["read"]
}' | vault policy write snapshot -

Метод Armole Auth Auth позволяет автоматам или приложениям аутентифицироваться с определенными в хранилищах ролях.

Оснул Метод AUTH идеально подходит для агента Snapshot для аутентификации с нашим кластером хранилища. Примечания Роль-ID и Секретный ID Вам понадобится их позже.

vault auth enable approle
vault write auth/approle/role/snapshot-agent token_ttl=2h token_policies=snapshot
vault read auth/approle/role/snapshot-agent/role-id -format=json | jq -r .data.role_id
vault write -f auth/approle/role/snapshot-agent/secret-id -format=json | jq -r .data.secret_id

Подготовьте секреты

Давайте сохраним всю нашу конфиденциальную информацию, как Секреты . Мы будем использовать их позже.

apiVersion: v1
kind: Secret
metadata:
  name: vault-snapshot-agent-token
type: Opaque
data:
  # we use gotmpl here
  # you can replace them with base64-encoded value
  VAULT_APPROLE_ROLE_ID: {{ .Values.approle.secretId | b64enc | quote }}
  VAULT_APPROLE_SECRET_ID: {{ .Values.approle.secretId | b64enc | quote }}
apiVersion: v1
kind: Secret
metadata:
  name: vault-snapshot-s3
type: Opaque
data:
  # we use gotmpl here
  # you can replace them with base64-encoded value
  AWS_ACCESS_KEY_ID: {{ .Values.backup.accessKeyId | b64enc | quote }}
  AWS_SECRET_ACCESS_KEY: {{ .Values.backup.secretAccesskey | b64enc | quote }}
  AWS_DEFAULT_REGION: {{ .Values.backup.region | b64enc | quote }}

Cronjob.

Давайте создадим Cronjob Это на самом деле делает работу.

Мы настраиваем Vault_addr Переменная среды для http://vault-actactive.vault.svc.cluster.local: 8200 Отказ Использование Hand-Active Сервис Можете убедиться, что запрос на моментальный снимок сделан против Лидер Узел, предполагающий, что вы включили Регистрация услуг , что является по умолчанию Отказ Точный URL может варьироваться в зависимости от имени развертывания развертывания диаграммы Helm Vault и пространства имен Targer, Узнать больше Отказ

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

apiVersion: batch/v1
kind: CronJob
metadata:
  name: vault-snapshot-cronjob
spec:
  schedule: "@every 12h"
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: share
            emptyDir: {}
          containers:
          - name: snapshot
            image: vault:1.7.2
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            args:
            - -ec
            # The offical vault docker image actually doesn't come with `jq`. You can 
            # - install it during runtime (not a good idea and your security team may not like it)
            # - ship `jq` static binary in a standalone image and mount it using a shared volume from `initContainers`
            # - build your custom `vault` image
            - |
              curl -sS https://webinstall.dev/jq | sh
              export VAULT_TOKEN=$(vault write auth/approle/login role_id=$VAULT_APPROLE_ROLE_ID secret_id=$VAULT_APPROLE_SECRET_ID -format=json | /jq/jq -r .auth.client_token);
              vault operator raft snapshot save /share/vault-raft.snap; 
            envFrom:
            - secretRef:
                name: vault-snapshot-agent-token
            env:
            - name: VAULT_ADDR
              valut: http://vault-active.vault.svc.cluster.local:8200
            volumeMounts:
            - mountPath: /share
              name: share
          - name: upload
            image: amazon/aws-cli:2.2.14
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            args:
            - -ec
            # the script wait untill the snapshot file is available
            # then upload to s3
            # for folks using non-aws S3 like IBM Cloud Object Storage service, add a `--endpoint-url` option
            # run `aws --endpoint-url  s3 cp ...`
            # change the s3:// to your desired location
            - |
              until [ -f /share/vault-raft.snap ]; do sleep 5; done;
              aws s3 cp /share/vault-raft.snap s3://vault/vault_raft_$(date +"%Y%m%d_%H%M%S").snap;
            envFrom:
            - secretRef:
                name: vault-snapshot-s3
            volumeMounts:
            - mountPath: /share
              name: share
          restartPolicy: OnFailure

Упаковка

Теперь у вас есть все ресурсы, необходимые для автоматизации резервного копирования хранилища для Backend. Вы можете просто запустить kubectl Apply -F * Или создайте свой собственный график HELM и распределите на своем хранилище частных диаграмм.

Оригинал: «https://dev.to/michael_lin/how-to-backup-for-hashicorp-vault-with-raft-storage-on-kubernetes-21db»