Todo sobre Apple, Android, Juegos Apks y Sitios de Peliculas

Gestión de secretos en Kubernetes

Kubernetes Secrets le permite almacenar información confidencial de forma segura. El uso de un secreto elimina la necesidad de convertir datos confidenciales en definiciones de manifiesto o imágenes de contenedores simples.

Los secretos son un tipo de recurso de primera clase que existe independientemente de cualquier Pod. Proporcionas a los Pods referencias a tus Secretos. La arquitectura le permite limitar el acceso a los secretos solo a aquellos Pods que realmente necesitan los datos.

Generalmente utiliza Secretos para cualquier constante sensible que sus Pods puedan necesitar. Son ideales para almacenar claves de autenticación, credenciales de bases de datos y tokens API.

Creando un secreto

Los secretos se crean de la misma manera que cualquier otro recurso de la API de Kubernetes. Puede usar comandos de Kubectl o un manifiesto YAML que luego aplica a su clúster. Proporcionaremos archivos YAML de ejemplo en este tutorial.

A continuación se explica cómo definir un secreto creado por el usuario:

apiVersion: v1

kind: Secret

type: Opaque

metadata:

name: demo-secret

data:

SECRET_USERNAME: dXNlcm5hbWUK

SECRET_PASSWORD: cGFzc3dvcmQK

Los secretos consisten en un objeto de datos amable y simple. El secreto de ejemplo define dos campos de datos separados, SECRET_USERNAME y SECRET_PASSWORD. Los valores deben estar codificados en Base64; los valores que se muestran arriba eran originalmente nombre de usuario y contraseña.

Si está trabajando con una plantilla de Helm, puede definir sus valores secretos en un archivo value.yaml. Canalícelos a través de b64enc en su manifiesto para que Helm los codifique como Base64.

apiVersion: v1

kind: Secret

type: Opaque

metadata:

name: demo-secret

data:

SECRET_PASSWORD: {{ .Values.SecretPassword | b64enc }}

Si prefiere no codificar sus valores en Base64, puede usar el campo stringData en su lugar. Al igual que los datos, stringData es un mapa de pares clave-valor, pero los valores se procesarán palabra por palabra, sin ninguna codificación.

Tipos secretos

El tipo de secreto opaco debe usarse para datos arbitrarios que usted mismo defina. Kubernetes define algunas otras funciones integradas tipos secretos Diseñado para escenarios de uso específicos.

Los tipos disponibles incluyen service-account-token (un token de servicio de Kubernetes), dockerconfigjson (un archivo Docker config.json serializado, para proporcionar credenciales de Docker) y ssh-auth (proporcionar credenciales SSH). Además de estos tipos, existen soluciones para la autenticación básica HTTP y los datos de certificados TLS.

Cada tipo de secreto puede definir sus propios campos adicionales y restricciones de validación. Normalmente necesitará establecer anotaciones adicionales en su secreto para proporcionar los datos necesarios para el tipo de secreto.

Puede crear sus propios identificadores de tipo secreto proporcionando su propia cadena en el campo de tipo. El secreto resultante será funcionalmente equivalente al tipo Opaco.

Proporcionar secretos a las cápsulas

Una vez que haya creado un Secreto, deberá ponerlo a disposición de sus Pods. Puede inyectar datos secretos como variables de entorno o como un archivo montado en un volumen.

Aquí hay un manifiesto de Pod que extrae los datos de un secreto en variables de entorno:

apiVersion: v1

kind: Pod

metadata:

name: pod-with-secret

spec:

containers:

- name: demo-container

image: my-image:latest

envFrom:

- secretRef:

name: demo-secret

Al utilizar envFrom, todos los pares clave-valor definidos en los datos del secreto se convertirán en variables de entorno del contenedor. Con el secreto de ejemplo anterior, su contenedor tendría inyectadas las variables de entorno SECRET_USERNAME y SECRET_PASSWORD. Los valores se decodificarán automáticamente en Base64.

A veces querrás trabajar con archivos en lugar de variables de entorno. Aquí se explica cómo montar un secreto en un volumen de Kubernetes.

apiVersion: v1

kind: Pod

metadata:

name: pod-with-secret

spec:

containers:

- name: demo-container

image: my-image:latest

volumeMounts:

- name: secret-volume

mountPath: /secrets

volumes:

- name: secret-volume

secret:

secretName: demo-secret

Acceda al directorio /secrets dentro del contenedor para ver los datos secretos. Cada clave de datos tendrá su propio archivo. El contenido del archivo será el valor decodificado en Base64 de esa clave. Nuestro secreto de ejemplo escribiría los archivos /secrets/SECRET_USERNAME y /secrets/SECRET_PASSWORD.

El enfoque funciona mediante la creación de un volumen de Kubernetes utilizando la fuente secreta. Esta fuente llena el volumen con los datos de un secreto con nombre. Luego, el volumen se monta en el contenedor en la ruta definida en volumeMounts.

Consideraciones de Seguridad

Poner datos en un secreto no los hace seguros automáticamente. La codificación Base64 proporciona oscuridad superficial, pero no se equivoque: esto es codificación y no cifrado. Cualquier cosa que tenga acceso a su clúster, ya sea un usuario humano o una aplicación con los permisos adecuados, puede recuperar valores secretos en texto sin formato.

El objetivo de los secretos es reducir el riesgo de exposición accidental de datos al crear y visualizar Pods. Los secretos solo se proporcionan a los Pods (y a los Nodos) que realmente los requieren. Node destruirá sus copias locales de secretos cuando finalice el Pod que los usó.

El plano de control de Kubernetes almacena valores secretos dentro de su instancia etcd. Este es un almacén de valores clave que respalda los datos del clúster de Kubernetes. Si desea maximizar la seguridad, debe configurar el cifrado en reposo para tu tienda etcd. Esto cifrará sus secretos dentro de etcd.

También debe evaluar cómo su capa de aplicación maneja los secretos. Incluso con el cifrado en reposo habilitado, sus contenedores podrían filtrar secretos sin darse cuenta al emitirlos a registros de trabajos o enviarlos a servicios externos. El uso de secretos de Kubernetes no elimina la necesidad de manejar cuidadosamente los datos confidenciales dentro de su contenedor.

Resumen

Los secretos de Kubernetes le permiten almacenar y acceder a datos confidenciales dentro de su clúster de Kubernetes. El uso de secretos le brinda más control sobre la exposición de la información. También deja explícito que está manejando valores potencialmente confidenciales. Esto puede actuar como una advertencia para los usuarios y administradores del clúster.

Los pods consumen secretos como variables de entorno o archivos montados en volumen. Kubernetes se encarga de la inyección de secretos en contenedores. Sus cargas de trabajo pueden acceder a los datos utilizando sus mecanismos de configuración existentes. Los secretos no son completamente seguros de forma predeterminada, pero puedes aumentar su protección activando el cifrado a nivel de clúster.