Ответ
Я интегрировал Vault в Kubernetes для безопасного управления секретами, используя два основных подхода в production-среде.
1. Vault Agent Injector (для статических секретов): Это sidecar-контейнер, который автоматически внедряет секреты в под как файлы или переменные окружения.
- Установка через Helm:
helm install vault hashicorp/vault --set "server.ha.enabled=true" --set "injector.enabled=true" - Конфигурация через аннотации в манифесте пода:
apiVersion: v1 kind: Pod metadata: name: my-app annotations: vault.hashicorp.com/agent-inject: 'true' vault.hashicorp.com/role: 'myapp-role' # Роль Kubernetes для аутентификации vault.hashicorp.com/agent-inject-secret-db-creds: 'database/creds/my-role' vault.hashicorp.com/agent-inject-template-db-creds: | {{- with secret "database/creds/my-role" -}} {{ .Data.username }} {{ .Data.password }} {{- end }} spec: serviceAccountName: my-app-sa # ServiceAccount, привязанный к роли Vault containers: - name: app image: my-app:latest
2. CSI Provider (для динамических секретов): Идеально подходит для баз данных, где нужны кратковременные учетные данные. Секреты монтируются как том и автоматически обновляются.
- Включение CSI Provider:
helm install vault hashicorp/vault --set "csi.enabled=true" - Создание
SecretProviderClass:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: db-dynamic-creds spec: provider: vault parameters: vaultAddress: "http://vault-active.vault.svc.cluster.local:8200" roleName: "db-admin" objects: | - objectPath: "database/creds/my-dynamic-role" secretKey: "password"
Ключевые настройки для продакшена, которые я выполнял:
- Аутентификация через Kubernetes ServiceAccount: Настраивал в Vault
kubernetesauth method, связывая K8s namespaces и service accounts с политиками Vault. - High Availability (HA): Запускал Vault в HA-режиме с Consul или Integrated Storage (Raft).
- TLS и mTLS: Настраивал внутренний и внешний TLS для всего трафика, включая взаимную аутентификацию между Vault и injector/CSI.
- Политики с наименьшими привилегиями: Тщательно прорабатывал политики Vault, выдавая приложениям доступ только к конкретным путям секретов.