Files
vault/docs/vault-cluster-helm.md
Vassiliy Yegorov dd1e392213 add vault cluster
2022-08-21 21:47:56 +07:00

2.6 KiB
Raw Permalink Blame History

Разворачиваем vault в k8s

  1. В heml надо отметить:
ha:
  enabled: true
  raft:
    enabled: true
  1. после запуска идем в первый vault-0 и инитим его (и открываем сразу)
vault operator init -key-shares=1 -key-threshold=1
vault operator unseal <key1>
  1. второй и третий вольты подключаем к рафту первого и так же распечатываем
vault operator raft join http://vault-0.vault-internal:8200
vault operator unseal <key1>

3.1 проверяем HA

vault status
vault operator raft list-peers
  1. логинимся в первом вольте, создаем kv-хранилище и пулим в него тестовый секрет
vault secrets enable -path=secret kv-v2
vault kv put secret/k8s/test username="realmanual" password="password"

настроим k8s для работы с вольтом

  1. vault auth enable kubernetes
  2. vault write auth/kubernetes/config kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
  3. создаем политику доступа
vault policy write k8s - <<EOF
path "secret/data/k8s/test" {
  capabilities = ["read"]
}
EOF
  1. создаем роль
vault write auth/kubernetes/role/k8s \
        bound_service_account_names=vault \
        bound_service_account_namespaces=default \
        policies=k8s \
        ttl=24h

запускаем тест

  1. создаем в NS default сервисного юзера k create sa vault

  2. демлоим тестовое приложение

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testapp
  labels:
    app: testapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testapp
  template:
    metadata:
      labels:
        app: testapp
    spec:
      serviceAccountName: vault
      containers:
        - name: app
          image: hub.realmanual.ru/pub/vault-example-app:latest
          imagePullPolicy: Always
          env:
            - name: VAULT_ADDR
              value: 'http://vault-internal.vault:8200'
            - name: JWT_PATH
              value: '/var/run/secrets/kubernetes.io/serviceaccount/token'
            - name: SERVICE_PORT
              value: '8080'
            - name: SECRETS_PATH
              value: 'secret/data/k8s/test'
            - name: ROLE_NAME
              value: "k8s"
  1. идем в созданный под, курлим результат нашего токена
curl http://localhost:8080