Administración de secretos de kubernetes
Kubernetes permite almacenar información sensitiva como credenciales o URLs de conexión a bases de datos etc como un kubernetes secret, estos secretos se almacenan en forma de llave valor donde el valor debe estar en base 64. Para el alta y edición de secretos se deben utilizar comandos de kubernetes.
Una vez que un un secreto ha sido creado o modificado, es necesario reiniciar el microservicio que los utiliza para que use el valor actualizado. Si un pod de un microservicio tiene referencias a un secreto que no existe o tiene referencias a una llave que no existe dentro de un secreto, el POD no va levantar y se quedará reintentado hasta que el secreto o llave sean dadas de alta. Es por eso que es muy importante siempre dar de alta los secretos necesarios en TODOS los ambientes. Para ambientes no productivos el desarrollador tiene permisos de alta y modificación, sin embargo, para ambientes productivos debe generarse un ticket de “Cambio despliegue a producción” (ver Alta de ticket de cambio despliegue a Producción )que será ejecutado durante el release de los cambios a producción.
Para el alta o modificación de secretos se debe tener instalado el AWS CLI y configurado los accesos a kubernetes (verBackend - ambientación local | kubectl )
Alta de secretos
Para el alta de un secreto nuevo: crea un archivo YML e.g. my-new-secret.yml
(el nombre del archivo es irrelevante) con el contenido que se muestra abajo y agrega todos los key-values que necesites, los valores debe estar codificados en base64.
Creación del archivo:
vi my-new-secret.yml
Contenido:
apiVersion: v1
kind: Secret
metadata:
name: my-cool-secret --> nombre del secreto (nada que ver con el nombre del archivo)
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
Loggéate al clúster kubernetes del ambiente en el que desees crear el secreto y ejecuta el comando:
kubectl apply -f my-new-secret.yml
El secreto será creado.
Una vez creado, para que pueda ser consumido por el microservicio, debe exponerse en el POD como una variable de ambiente cuyo valor será extraído del secreto de kubernetes. Esto se especifica en el archivo kubernetes.ym
l del microservicio:
Esto hará que el POD al levantar, ponga el valor del secreto en la variable de entorno especificada. Para poder ponerla disponible al servicio es necesario mapearla a una propiedad en el application.yml
.
Modificación de valor de un secreto
Se debe editar el yml del secreto con el comando:
Este comando abrirá un editor VI y ahí puedes editar, añadir o eliminar los pares de llave-valor que necesites.
Comandos para codificar y decodificar en base64: