Gestionar información sensible en Kubernetes con secretos

Gisela Torres
Caminos a la nubes
Otro de los objetos que debes utilizar cuando trabajas con Kubernetes es el llamado secret...

Gestionar información sensible en Kubernetes con secretos


Otro de los objetos que debes utilizar cuando trabajas con Kubernetes es el llamado secret. Es la forma recomendada de almacenar contraseñas, tokens, etc. de manera segura en el clúster, para que tus pods utilicen información sensible sin que esté harcodeada. En este artículo te cuento cómo usarlos.

Crear secretos

Siguiendo con el mismo ejemplo del artículo anterior, voy a crear un secreto con el nombre de usuario y la contraseña para nuestro postgres, el cual hasta ahora no tenía definidos ninguno.

Lo primero que vamos a hacer es crear dos archivos: uno contendrá el nombre de usuario y el otro la nueva contraseña:

El siguiente paso es crear el secreto con ambos archivos:

También se puede utilizar –from-literal en lugar de –from-file pero entonces debes tener en cuenta que debes tener cuidado con los caracteres especiales.

Para listar todos los secretos disponibles en tu clúster puedes invocar el siguiente comando:


El resultado será parecido al siguiente:

kubectl get secrets

Este mismo proceso se puede hacer de diferentes maneras tal y como se explica en la documentación oficial, pero creo que lo interesante ahora mismo es que sepas que existe este tipo de objeto y cómo se usa en lineas generales. Un punto que sí que es importante es que estos secretos se almacenan en la base de datos etc con la única protección de estar codificados en base 64.

Cómo usar los secretos

Ahora que ya tienes al menos un secreto creado vamos a ver cómo usarlo. Existen dos maneras de consumir los secretos: montándolos como volumen y accediendo desde el pod como si de un archivo más se tratara o bien a través de las variables de entorno. En este caso vamos a usarlo como variables de entorno para definir durante la creación del pod el nombre de usuario y la contraseña que queremos utilizar para acceder:

Como ves, en el apartado env de la definición del pod utilizo el secreto db-user-pass para especificar tanto el nombre de usuario como la contraseña. ¿Cómo sé la key que debo utilizar dentro de mi secret db-user-pass? Puedes ver todas las claves que tienes dentro de un secreto a través del siguiente comando:

En el apartado Data tienes todas las claves contenidas dentro de este secreto.

kubectl describe secret db-user-pass

Ejecuta este despliegue en tu clúster a través del siguiente comando:

Por último, necesitamos comprobar que puedes acceder sin problemas a tu base de datos con el usuario y contraseña que has almacenado dentro de tu secreto. Para ello debes exponer antes tu despliegue a través del siguiente comando:

En este caso, estoy utilizando Azure Kubernetes Service y necesitaré esperar unos minutos hasta que me dé una IP pública asociada a mi despliegue. Para no tener que comprobarlo manualmente puedes lanzar este otro comando:

Una vez que tengas una IP asignada, puedes utilizar cualquier cliente de posgres, por ejemplo DataGrip, para intentar llevar a cabo la conexión con tu base de datos con el usuario y contraseña especificado a través de tu secreto.

O bien a través de un contenedor de Docker con los siguientes parámetros:


¡Saludos!


Gisela Torres

Gisela Torres trabaja en Microsoft como Cloud Solution Architect. Se trata de un puesto técnico cuya misión es apoyar y asesorar sobre soluciones y arquitecturas cloud utilizando Microsoft Azure como plataforma. Antes de eso trabajo como arquitecta de software y desarrolladora de aplicaciones en varias empresas. Durante esos años recibio varios premios por ejemplo Most Valuable Professional en Microsoft Azure. Le encanta programar y la tecnología en general.

Más artículos de Gisela en su blog - https://www.returngis.net/

Related Posts

Únete a nuestra Newsletter

Lidera la Conversación en la Nube