Gestionar Secretos en Kubernetes con HC Vault

¿Quieres mejorar los procesos de desarrollo, la eficiencia, la escalabilidad y seguridad en tu Cloud a la vez que ahorras costes?
Contacta con nuestro equipo de expertos en infraestructura Cloud y lleva tus aplicaciones al siguiente nivel.
Crear secretos en Kubernetes es sencillo, sin embargo, gestionar decenas de aplicaciones y que los desarrolladores puedan gestionar de forma sencilla e independiente sus valores es una tarea que requiere de un proceso un poco más complejo.
Este proceso en Helmcode lo hemos simplificado utilizando Hashicorp Vault. El cual nos permite gestionar todos los secretos y variables de entorno de las aplicaciones que desplegamos en Kubernetes desde una interfaz de una forma muy sencilla.
🛡️ Existen diversas herramientas para gestionar secretos en Kubernetes que solucionan esta misma problemática. Nosotros hemos elegido Vault por lo siguiente:
- Independencia del Cloud: utilizar herramientas como Secrets Manager o similares, atan al uso de un Cloud y su integración con Clusters fuera de este Cloud se vuelve mucho mas compleja. Con Vault puedes tener tu cluster donde quieras, mientras sea Kubernetes, será compatible.
- Coste: los servicios gestionados cuando se usan a escala tienden a ser caros, sin embargo, Vault, lo puedes desplegar en tu propia infraestructura y con un pequeño raft cluster puedes tener HA, escalabilidad y soportar una gran demanda por un coste mínimo.
- Integración nativa con Kubernetes: gracias a sus helm charts oficiales, desplegar y mantener Vault es muy sencillo de mantener por las personas de infraestructura y muy intuitivo de utilizar para los desarrolladores.
- Múltiples Integraciones: Vault expone una API que permite interactuar con él ya sea de forma programática desde las propias aplicaciones, desde la UI o desde su CLI. Esto lo convierte en una herramienta muy versátil tanto para aplicaciones como para procesos de automatización.
- Múltiples usos: Si bien, el uso principal que le damos a nuestros clusters de Vault es el de gestionar secretos en Kubernetes, este no se limita a ello. Nos permite hacer rotación de secretos, SSO, manejar roles, identidades de acceso y muchas cosas más.
En este post no vamos a entrar en la instalación y configuración de Vault, esto lo podemos tratar en un próximo post. Aunque, básicamente todo se resume en estos dos Helm Charts:
- Vault: Nos permite desplegar los clusters de Vault con raft storage sobre Kubernetes.
- Vault Operator: Nos permite gestionar los secretos de Kubernetes desde Vault.
Guía de usuario

🔒 Nuestros clusters de Vault están desplegados de forma privada y por tanto solo son accesibles bajo la red privada del Cloud de turno, por tanto, únicamente son accesibles mediante la VPN.
Gestionar variables de entorno de las aplicaciones

En el path microservices
tenemos múltiples directorios dependiendo de la cantidad de entornos que tenga la infraestructura. En este ejemplo, tenemos staging y producción.
Dentro de estos directorios de entorno, tendremos los diferentes microservicios desplegados. Para gestionar las variable de entorno de uno de ellos podemos seleccionarlo y realizar la operación que necesitemos:

👀 Desde esta pantalla podremos ver, añadir, editar o eliminar nuevas variables de entorno. Hay 3 puntos interesantes en el funcionamiento de Vault.
- Puedes visualizar los secretos como KV (key - value) tal y como se ve en la captura o transformar la vista a JSON. En ocasiones queremos copiar todas las variables de entorno en este formato o incluso es especialmente útil este tipo de salida cuando se quiere acceder a un valor mediante API.
- Versiones: cualquier cambio que hagamos sobre las variables de entorno quedará versionado, de esta forma es muy fácil trackear cambios, hacer rollback a configuraciones pasadas o incluso recuperar datos que borramos y que requerimos recuperar.
- Gestionar variables: para realizar cualquier cambio sobre las variables de entorno de las aplicaciones, basta con crear una nueva versión, realizar el cambio que necesitemos y guardar la nueva versión.
Tras realizar lo indicado en este último punto, lo que ocurrirá por detrás es lo siguiente:

🥳 De esta forma tan solo realizando un cambio en la UI de Kubernetes, nuestros microservicios se actualizarán para tomar los nuevos valores de las variables de entorno que le hayamos indicado.
Además, este proceso se realiza de forma completamente automática y en caliente, es decir, no hay perdida de servicio en ningún momento al realizar este proceso.
En este ejemplo, hemos visto la forma más común de gestionar variables de entorno pero dada la versatilidad de Vault también podríamos:
- Leer valores de Vault directamente desde su API, por ejemplo, para leer un valor de ACL en tiempo de runtime para aplicar un permiso de acceso a una sección de la aplicación.
- Actualizar una credencial de forma programática que depende de un tercero y que se consulta vía API.
- Rotan credenciales.
- Y muchas cosas más! 🚀
Si queréis un post para ver cómo desplegar y configurar paso a paso Vault y Vault Operator para conseguir dar libertad a vuestros desarrolladores para gestionar las variables de entorno de sus aplicaciones, ¡déjanos un comentario!