HashiCorp Vault · Secrets Management
La Fase 3 introduce secrets management con HashiCorp Vault self-hosted en k3s. Vault centraliza el almacenamiento y acceso a credenciales, elimina secrets hardcodeados de los manifiestos y permite rotación sin redeploy. En el lab corre en modo dev — en Oracle Cloud se reemplaza por OCI Vault.
¿Por qué Vault?
Sin Vault, los secrets viven en ConfigMaps, variables de entorno o — peor — hardcodeados en los manifiestos. Con Vault, los secrets existen en un solo lugar, se acceden con autenticación y autorización, se auditan y se pueden rotar sin tocar los Deployments.
Modo Dev vs Producción
El lab usa Vault en modo dev (vault server -dev).
Es la forma más rápida de tener Vault corriendo, pero no es
apto para producción. La tabla documenta exactamente qué cambia
entre ambos modos — entender estas diferencias es parte del
valor del proyecto.
Vault en k3s
Vault corre como un Deployment de una sola réplica en el
namespace aiops. El binario oficial de HashiCorp se ejecuta con
el flag -dev y expone su API en el puerto 8200 via
un Service ClusterIP.
apiVersion: apps/v1
kind: Deployment
metadata:
name: vault
namespace: aiops
spec:
replicas: 1
template:
spec:
serviceAccountName: vault
containers:
- name: vault
image: hashicorp/vault:1.16.2
command: ["vault", "server", "-dev"]
securityContext:
capabilities:
add: ["IPC_LOCK"] # Previene swap de memoria con secrets
env:
- name: VAULT_DEV_ROOT_TOKEN_ID
value: "dev-root-token"
- name: VAULT_DEV_LISTEN_ADDRESS
value: "0.0.0.0:8200"
ports:
- containerPort: 8200
readinessProbe:
httpGet:
path: /v1/sys/health
port: 8200
El securityContext.capabilities.add: ["IPC_LOCK"]
permite que Vault use mlock() para evitar que el
kernel swapee memoria que contiene secrets a disco. En modo dev
esto está deshabilitado internamente, pero el capability se
mantiene por compatibilidad con el binario.
Dos Agentes, Dos Niveles
El proyecto usa dos mecanismos distintos para que los workloads accedan a Vault. Uno opera dentro de Kubernetes (Agent Injector), el otro a nivel de sistema operativo (Vault Agent via systemd). No compiten — cubren capas diferentes.
Flujo de Inyección de Secrets
El Vault Agent Injector modifica pods en tiempo de creación para que reciban secrets de Vault sin que el desarrollador escriba una sola línea de código de autenticación. Siete pasos desde la annotation hasta el secret en disco.
Métodos de Autenticación
Vault soporta múltiples métodos de autenticación. El proyecto usa Kubernetes Auth para pods y AppRole para procesos del SO. Los tokens directos se evitan por diseño — son el equivalente a passwords hardcodeadas.
Kubernetes Pods en uso AppRole Máquinas/procesos en uso Token Humanos/root Vault Self-Hosted → OCI Vault
Una de las decisiones de arquitectura más importantes del proyecto: en el lab local, Vault es self-hosted. En Oracle Cloud, se reemplaza por OCI Vault — el servicio gestionado.
El valor del proyecto no está en usar un Vault u otro — está en entender la diferencia operacional entre self-hosted y managed. Poder explicar cuándo elegir cada uno y qué implicaciones tiene (disponibilidad, responsabilidad, costo) es fundamental para tomar decisiones de arquitectura informadas.
Siguiente: Vault Agent Injector
La siguiente página profundiza en el mecanismo de inyección de secrets: cómo funciona el Mutating Admission Webhook, qué annotations necesita un pod y cómo se configura el Injector en k3s.