Gestión de secretos de Kubernetes

Gestión de secretos de Kubernetes
El entorno Kubernetes, como muchos otros sistemas informáticos, requiere el uso de datos confidenciales. Los secretos se relacionan con los datos confidenciales de un grupo (como contraseñas, claves SSH y tokens de seguridad). Observaremos las capacidades de Kubernetes y otros sistemas de gestión secreta en esta publicación y cómo crear y administrar secretos en su entorno de Kubernetes.

¿Qué son los secretos en Kubernetes??

Un secreto es una información privada como una contraseña, clave o token. Dicha información también se puede establecer en una imagen de contenedor o una especificación de Pod. Si emplea un secreto, no tiene que incluir datos secretos en su código de aplicación.

Debido a que los secretos se pueden instalar independientemente de las cápsulas que los usan, puede haber mucha menos amenaza de que se descubra el secreto (y su información) en el flujo de trabajo de generar, examinar y cambiar las vainas. Kubernetes y las aplicaciones que se ejecutan para su clúster también utilizan secretos y técnicas para tomar mayores precauciones, incluido el comienzo de la redacción de información confidencial al almacenamiento no volátil.

Tipos de secretos

Kubernetes proporciona muchos tipos incorporados para algunos escenarios de uso común. Las validaciones logradas y las restricciones aplicadas a través de Kubernetes difieren entre esas categorías.

Secretos opacos

El tipo secreto predeterminado se usa cuando no hay un archivo de configuración secreta. Al crear un secreto de Kubectl, use el subcomando genérico para especificar este tipo.

Secretos de tokens de cuenta de servicio

Este secreto almacena un token con una cuenta de servicio. Necesitas configurar los kubernetes.IO/Servicio-Account.Nombre de anotación a un nombre de cuenta de servicio actual durante el uso de este tipo secreto.

Secretos de configuración de Docker

Este tipo es para almacenar un serializado /.archivo dockerCfg. Es el formato tradicional para configurar la línea de comando Docker. Primero, verifique que el campo de los datos secretos tenga un.clave DockerCFG, y su valor es el contenido de la A /.archivo dockerCfg codificado en formato base64 al utilizar este tipo secreto.

Secreto de autenticación básica

Este tipo se utiliza para almacenar credenciales de autenticación fundamentales. Al utilizar este tipo secreto, una de las dos claves (nombre de usuario y contraseña) debe estar presente en el campo de datos del secreto:

Los valores de estas teclas son ambas cadenas codificadas base64. Puede usar StringData para generación secreta si desea proporcionar contenido de texto claro.

Secretos de autenticación ssh

Esto se usa para manejar los datos de autenticación de SSH. La credencial de SSH debe ser aceptada como un par de valores clave SSH-PrivateKey con el sujeto de datos (o StringData) mientras hace cumplir este tipo secreto.

Secretos TLS

Kubernetes tiene un tipo secreto incorporado Kubernetes.IO/TLS que puede almacenar un certificado y su clave correspondiente, que se usa comúnmente para TLS. Esta información se utiliza con la terminación TLS. Pero también podría emplearse con diferentes activos o sin demora a través de una carga de trabajo. Al imponer este tipo de secreto, el TLS.Key y TLS.Las claves CRT deben suministrarse dentro del área de datos (o stringData) de la configuración secreta, a pesar de que el servidor API ya no examina simplemente los valores para cada clave.

Secretos de token de arranque

Esta forma de secreto se puede crear yendo a Bootstrap.Kubernetes.io/token y elegir el tipo secreto. Este tipo de secreto tiene como objetivo almacenar tokens. Estos tokens se usan principalmente durante el procedimiento de bote de nodo. Realiza un seguimiento de los tokens de firma para configMaps conocidos.

A menudo se crea un token de bootstrap en el espacio de nombres del sistema kube y se llama bootstrap-token-token-id>, donde token-id> es una cadena de seis caracteres que representa la identificación del token.

Cómo crear un secreto en Kubernetes?

Se puede usar un secreto para mantener las credenciales de los usuarios. Las vainas usan estas credenciales para acceder a una base de datos. Una contraseña de ID (nombre de usuario) más, por ejemplo, inventar una cadena de conexión de base de datos. Puedes guardar el nombre de usuario en./nombre de usuario.txt y la contraseña en./contraseña.txt en su PC local.

$ echo -n 'Alex'> ./nombre de usuario.TXT
$ echo -n '01trfg02'> ./contraseña.TXT

La siguiente pieza de código muestra cómo puede crear un secreto con el comando Crear.

$ kubectl crea secreto secreto secreto-mbps \
--de archivo =./nombre de usuario.TXT \
--de archivo =./contraseña.TXT

A continuación, el secreto (llamado Secret-MBPS) se crea con éxito a continuación.

Como se mencionó anteriormente, el parámetro -n en los comandos asegura que no haya un carácter adicional de nueva línea al final del contenido en los archivos de salida. Esto es significativo porque el carácter adicional de Newline se codifica cuando Kubectl lee un archivo y lo convierte en una cadena base64.

Cómo editar un secreto?

El siguiente comando se usa para hacer cambios en un secreto existente:

$ kubectl editar secrets secret-mbps

Esto abrirá el editor con la configuración predeterminada. Le permitirá ajustar los valores secretos codificados de Base64 del campo de datos:

Cómo verificar si existe un secreto?

Para verificar un secreto, escriba el comando Get Secret.

$ kubectl obtener secretos

La captura de pantalla adjunta muestra los detalles del secreto especificado.

Cómo decodificar el secreto?

Para decodificar el secreto, puede usar el comando mencionado a continuación.

$ Kubectl Get Secret Secret -Mbps -o jsonpath = '.datos'

A continuación puede ver la captura de pantalla de salida.

Ahora puede decodificar los datos de la contraseña de la siguiente manera:

$ echo 'mwyyzdflmmu2n2rm' | base64 --decode

Aquí está el resultado.

Puede usar el comando (como puede ver a continuación) si no desea almacenar un valor codificado secreto en su historial de shell:

$ Kubectl Get Secret Secret -Mbps -o jsonpath = '.datos.contraseña '| base64 -decódico

Este comando producirá los mismos resultados que el anterior.

Cómo eliminar el secreto?

Para eliminar el secreto, puede usar el comando Eliminar y mencionar el nombre preciso del secreto.

$ kubectl eliminar secreto secreto-mbps

Aquí puede observar que el secreto especificado se elimina con éxito.

Conclusión:

Los secretos son identidades digitales que permiten a los usuarios verificar sus identidades y acceder a cuentas, aplicaciones y servicios privilegiados al autenticar sus identidades. Hemos mencionado la gestión de los secretos de Kubernetes en detalle en este artículo.