End-to-end cluster-internal rotation of the shared server<->agent gRPC secret, no per-rotation human step: - rotate-agent-secret.yaml: quarterly CronJob (+ on-demand) logs into OpenBao via k8s-auth role 'rotator', generates a random value, bao kv patch's homelab/apps/woodpecker (Gitea OAuth fields untouched). - infrastructure/reloader: Stakater Reloader restarts annotated workloads on Secret change. - server.yaml/agent.yaml: reloader annotation for woodpecker-secret. - externalsecret.yaml: refreshInterval 1h -> 10m so a rotation propagates within ~10m. - openbao/policies/rotator.hcl: least-privilege policy (patch on the one path only); NOT Flux-applied, one-time manual bootstrap documented in-file (eso-read.hcl convention). PoC scope: woodpecker only. Requires a one-time OpenBao bootstrap (rotator policy + role) before the CronJob succeeds. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
5 lines
96 B
YAML
5 lines
96 B
YAML
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
resources:
|
|
- helmrelease.yaml
|