Deploys the foundation for moving k8s secrets out of git, per today's decision:
kubernetes/infrastructure/openbao/ — OpenBao 2.5.x (chart >=0.28.4 <0.29.0), single-node integrated raft on 5Gi ceph-block, UI/API at openbao.k.renner.uno only (deliberately no public renner.uno host — see comment in ingress.yaml). Agent injector disabled (ESO does delivery). disableWait on the HelmRelease because a fresh pod is 0/1 Ready until init+unseal.
kubernetes/infrastructure/external-secrets/ — ESO chart >=2.7.0 <3.0.0, CRDs CreateReplace, major bound deliberately (CRD API moves between majors).
Namespaces openbao + external-secrets (the empty security ns was considered; dedicated per-component namespaces match the existing convention — say the word if you'd rather consolidate).
kubernetes/MIGRATION-sops-openbao.md — the full phased migration draft: init/unseal procedure (keys into the GPG pass store), phase-2 OpenBao config + ClusterSecretStore (deliberately NOT in this PR: it cannot go Ready before manual init, and would freeze the infrastructure-crds wait gate — the 2026-07-13 incident shape), per-file checklist of all 31 sops files in blast-radius order, DR/rebuild runbook, and the rule that the age key is retired only at the very end.
Merging this is safe/no-op for everything running: nothing consumes OpenBao or ESO yet; the OpenBao pod will sit sealed (0/1 Ready) until bao operator init per the doc.
Deploys the foundation for moving k8s secrets out of git, per today's decision:
- **kubernetes/infrastructure/openbao/** — OpenBao 2.5.x (chart >=0.28.4 <0.29.0), single-node integrated raft on 5Gi ceph-block, UI/API at **openbao.k.renner.uno only** (deliberately no public renner.uno host — see comment in ingress.yaml). Agent injector disabled (ESO does delivery). `disableWait` on the HelmRelease because a fresh pod is 0/1 Ready until init+unseal.
- **kubernetes/infrastructure/external-secrets/** — ESO chart >=2.7.0 <3.0.0, CRDs CreateReplace, major bound deliberately (CRD API moves between majors).
- Namespaces `openbao` + `external-secrets` (the empty `security` ns was considered; dedicated per-component namespaces match the existing convention — say the word if you'd rather consolidate).
- **kubernetes/MIGRATION-sops-openbao.md** — the full phased migration draft: init/unseal procedure (keys into the GPG `pass` store), phase-2 OpenBao config + ClusterSecretStore (deliberately NOT in this PR: it cannot go Ready before manual init, and would freeze the infrastructure-crds wait gate — the 2026-07-13 incident shape), per-file checklist of all 31 sops files in blast-radius order, DR/rebuild runbook, and the rule that the age key is retired only at the very end.
**Merging this is safe/no-op for everything running**: nothing consumes OpenBao or ESO yet; the OpenBao pod will sit sealed (0/1 Ready) until `bao operator init` per the doc.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01CRgBFn9m8a2ncFMLusikH6
Single-node raft OpenBao (5Gi ceph-block, UI at openbao.k.renner.uno,
internal-only ingress) and ESO 2.x. No ClusterSecretStore yet — it can
only turn Ready after manual init/unseal, and committing it now would
freeze the infrastructure-crds wait gate (2026-07-13 incident shape).
Full phased plan incl. per-file checklist and DR runbook in
kubernetes/MIGRATION-sops-openbao.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CRgBFn9m8a2ncFMLusikH6
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Deploys the foundation for moving k8s secrets out of git, per today's decision:
disableWaiton the HelmRelease because a fresh pod is 0/1 Ready until init+unseal.openbao+external-secrets(the emptysecurityns was considered; dedicated per-component namespaces match the existing convention — say the word if you'd rather consolidate).passstore), phase-2 OpenBao config + ClusterSecretStore (deliberately NOT in this PR: it cannot go Ready before manual init, and would freeze the infrastructure-crds wait gate — the 2026-07-13 incident shape), per-file checklist of all 31 sops files in blast-radius order, DR/rebuild runbook, and the rule that the age key is retired only at the very end.Merging this is safe/no-op for everything running: nothing consumes OpenBao or ESO yet; the OpenBao pod will sit sealed (0/1 Ready) until
bao operator initper the doc.🤖 Generated with Claude Code
https://claude.ai/code/session_01CRgBFn9m8a2ncFMLusikH6