Descripción de los secretos de Kubernetes

Completado

Una de las mayores consideraciones al trabajar con aplicaciones distribuidas es cómo administrar información confidencial, como contraseñas, conexiones y datos similares. Kubernetes permite proteger estos datos con un recurso denominado Secreto.

Descripción de los secretos

En Kubernetes, los secretos permiten almacenar información confidencial de forma más segura que el texto sin formato en pods e implementaciones. Los secretos están diseñados para almacenar contraseñas y otros datos confidenciales.

Los secretos de Kubernetes codifican sus datos en formato Base64. Aunque Base64 no es un algoritmo de cifrado, Kubernetes puede ver que la información está codificada y puede ocultar esta información de salidas de comandos como kubectl describe. Este proceso no se produce con la configuración de texto sin formato. Los secretos siempre están en el ámbito de un solo espacio de nombres para evitar la exposición de datos confidenciales adicional a otras cargas de trabajo del clúster.

Tipos de secretos

Existen distintos tipos de secretos. El tipo más común y el predeterminado es Opaque, que contiene datos arbitrarios definidos por el usuario. Entre los otros tipos comunes se incluyen:

  • kubernetes.io/service-account-token: Define un token de cuenta de servicio, y se crea de forma automática al crear una cuenta de servicio.
  • kubernetes.io/basic-auth: credenciales para la autenticación básica.
  • kubernetes.io/tls: datos del cliente o del servidor TLS, que se usan para proporcionar conexiones HTTPS desde un recurso de entrada, por ejemplo.

Sugerencia

Para más información, consulte la documentación oficial sobre secretos de Kubernetes.

Creación y uso de un secreto

Según la documentación oficial de secretos de Kubernetes, puede usar un secreto de tres maneras diferentes:

  • Se puede montar como archivos en un volumen en contenedores dentro de un pod o una implementación.
  • Se le puede hacer referencia como una variable de entorno en la especificación del pod o la implementación.
  • Lo puede usar el Kubelet al extraer imágenes de registros privados a través de la clave imagePullSecret de la especificación del pod.

Puede crear secretos como cualquier otro recurso de Kubernetes mediante un archivo de manifiesto YAML o un comando kubectl. La especificación del secreto es la siguiente:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

Para un secreto con esta especificación, debe codificar los valores antes de crear el secreto. Si quiere crear un secreto con el valor de texto sin formato y permitir que Kubernetes lo codifique automáticamente, use stringData en lugar de data:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

La aplicación recibe la cadena del secreto descodificada como el valor que se le ha pasado en lugar de la codificada.

Actualizaciones de secretos

Todos los secretos que se montan como volúmenes dentro de un pod se actualizan de forma automática cuando cambia su valor. Es posible que este cambio no se produzca inmediatamente debido a la configuración de Kubelet, pero se produce automáticamente, por lo que no es necesario reiniciar el pod.

En los casos en los que los secretos están enlazados a variables de entorno, no se actualizan automáticamente, lo que hace necesario reiniciar el pod para que los cambios surtan efecto.

Comprobar los conocimientos

1.

¿Por qué los secretos de Kubernetes son más seguros que los valores de texto sin formato?

2.

¿Cómo se pueden usar los secretos en una aplicación?

3.

¿Cómo se usa Base64 en los secretos?