Vault Agent Injector · Admission Webhook
El corazon de la integracion Vault-Kubernetes. Un Mutating Admission Webhook que intercepta la creacion de pods, detecta annotations de Vault y modifica el pod spec para inyectar un init container que recupera secrets antes de que la app arranque.
Que Es y Como Funciona
El Vault Agent Injector es un Mutating Admission Webhook de Kubernetes. Cuando el API Server recibe una solicitud de creacion de pod, antes de persistirla, envia el pod spec al Injector. Si el pod tiene annotations de Vault, el Injector modifica el spec agregando un init container. Si no, lo deja pasar sin cambios.
Las Annotations
Cinco annotations controlan el comportamiento del Injector. Tres son obligatorias: sin ellas, el Injector no interviene.
vault.hashicorp.com/agent-inject true obligatorio vault.hashicorp.com/agent-inject-secret-[name] secret/data/... obligatorio vault.hashicorp.com/role [role-name] obligatorio vault.hashicorp.com/agent-inject-template-[name] [template] opcional vault.hashicorp.com/auth-path auth/kubernetes opcional annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/agent-inject-secret-admin: "secret/data/grafana"
vault.hashicorp.com/role: "grafana"
vault.hashicorp.com/agent-inject-template-admin: |
{{- with secret "secret/data/grafana" -}}
GF_SECURITY_ADMIN_USER={{ .Data.data.admin_user }}
GF_SECURITY_ADMIN_PASSWORD={{ .Data.data.admin_password }}
{{- end }} Componentes del Injector
Seis recursos de Kubernetes forman el Injector. Cada uno tiene una responsabilidad especifica.
serviceaccount.yml clusterrole.yml clusterrolebinding.yml injector-deployment.yml service.yml mutatingwebhook.yml Que Inyecta el Webhook
Cuando el Injector detecta annotations de Vault, modifica el pod spec agregando tres elementos.
emptyDir: vault-secrets vault-agent-init vault-agent Siguiente: Kubernetes Auth
El Injector necesita que Vault confie en los ServiceAccounts de Kubernetes. La pagina siguiente explica como se configura el metodo de autenticacion Kubernetes en Vault.