feat(security): Vault standalone+raft на proxmox-csi, чарт из git
Flate / Flate - Filter (pull_request) Successful in 5s
Flate / Flate (pull_request) Successful in 16s
Flate / Flate - Success (pull_request) Canceled after 0s

This commit is contained in:
2026-09-17 16:53:30 +00:00
parent 0bc8b03df2
commit f7471fb105
7 changed files with 152 additions and 0 deletions
@@ -0,0 +1,15 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: vault-helm
spec:
interval: 12h
# Чарт берём прямо из git, а не из https://helm.releases.hashicorp.com:
# этот Helm-репозиторий отдаётся через CloudFront, который блокирует
# российские адреса (403 Forbidden), и HelmRelease не может получить index.yaml.
url: https://github.com/hashicorp/vault-helm
ref:
# hashicorp/vault-helm: Chart.yaml version 0.34.1 (appVersion Vault 2.0.4),
# чарт лежит в корне репозитория.
tag: v0.34.1
@@ -0,0 +1,70 @@
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: vault
spec:
interval: 1h
chart:
spec:
chart: .
version: 0.34.1
sourceRef:
kind: GitRepository
name: vault-helm
install:
crds: CreateReplace
upgrade:
crds: CreateReplace
cleanupOnFail: true
remediation:
retries: 3
# Упавший первый релиз без этой настройки залипает: Flux пытается
# откатиться, предыдущей ревизии нет и HelmRelease навсегда остаётся False.
strategy: uninstall
values:
global:
enabled: true
tlsDisable: true
# authDelegator включает auth-метод kubernetes (service account -> токен Vault):
# через него External Secrets Operator будет читать секреты без хранения
# пароля/токена Vault в sops.
authDelegator:
enabled: true
# Агент-инжектор не используем — секреты раздаёт ESO.
injector:
enabled: false
csi:
enabled: false
server:
# Один под и один PVC на ZFS-зеркале (rpool через StorageClass
# proxmox-local-zfs) с интегрированным raft-хранилищем — single-node Vault.
standalone:
enabled: true
config: |
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
storage "raft" {
path = "/vault/data"
}
service_registration "kubernetes" {}
dataStorage:
enabled: true
size: 5Gi
storageClass: proxmox-local-zfs
accessMode: ReadWriteOnce
service:
enabled: true
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 1Gi
@@ -0,0 +1,18 @@
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: vault
spec:
parentRefs:
- name: envoy-internal
namespace: network
# https-листенер шлюза принимает маршруты из любых namespace, а http — только
# из network, поэтому цепляемся именно к https.
sectionName: https
hostnames:
- "vault.${SECRET_DOMAIN}"
rules:
- backendRefs:
- name: vault
port: 8200
@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./gitrepository.yaml
- ./helmrelease.yaml
- ./httproute.yaml