Secreto

En esta página, se describe el objeto secreto de Kubernetes y su uso en Google Kubernetes Engine.

¿Qué es un objeto secreto?

Los secretos son objetos seguros que almacenan datos sensibles, como contraseñas, tokens OAuth y Llaves SSH en tus clústeres. Almacenar datos sensibles en objetos secretos es más seguro que en el texto sin formato ConfigMaps o en especificaciones de pod. El uso de secretos te permite controlar la manera en que se usan los datos sensibles, y reduce el riesgo de exposición de datos a usuarios no autorizados.

También puedes encriptar secretos en la capa de la aplicación con una clave que administras en Cloud KMS. Para obtener más información, consulta Encriptación de secretos de la capa de la aplicación.

Crea un objeto secreto

Para crear un objeto secreto, ejecuta el comando siguiente:

kubectl create secret [TYPE] [NAME] [DATA]

[TYPE] puede ser uno de los datos siguientes:

  • generic: Crea un objeto secreto a partir de un archivo local, directorio o valor literal.
  • docker-registry: Crea un objeto secreto dockercfg para usar con un registro de Docker. Se usa para autenticar con los registros de Docker.
  • tls: Crea un objeto secreto TLS a partir de un par de claves público/privado determinado. Esta clave debe existir con anticipación. El certificado de clave pública debe estar codificada con PEM y coincidir con la clave privada en cuestión.

En la mayoría de los objetos secretos, se usa el tipo generic.

[DATA] puede ser uno de los datos siguientes:

  • una ruta de acceso a un directorio que contiene uno o más archivos de configuración, indicada mediante las marcas --from-file o --from-env-file
  • pares clave-valor, cada uno especificado con las marcas --from-literal

Para obtener más información sobre kubectl create, consulta la documentación de referencia.

Además, también puedes crear un secreto cuando defines un objeto secreto en un archivo de manifiesto YAML y, luego, implementar el objeto con kubectl create -f [FILE]. Para obtener un ejemplo, consulta Distribuir credenciales de forma segura con objetos secretos.

Desde archivos

Si deseas crear un objeto secreto a partir de uno o más archivos, usa --from-file o --from-env-file. El archivo debe ser de texto sin formato, pero no importa su extensión.

--from-file

Cuando creas el objeto secreto con --from-file, su valor es el contenido completo del archivo. Si el valor de tu objeto secreto contiene varios pares clave-valor, debes usar --from-env-file en su lugar.

Puedes pasar un solo archivo o varios archivos:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/FILE] --from-file [/PATH/TO/FILE2]

También puedes pasar un directorio que contenga varios archivos:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/DIRECTORY]

Por ejemplo, con el comando siguiente, se crea un objeto secreto con el nombre credentials a partir de dos archivos, username.txt y password.txt, y configura las claves para username.txt y password.txt respectivamente:

kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt

Los valores del objeto secreto están codificados en Base 64 en Kubernetes.

Ejecutar kubectl get secret credentials -o yaml muestra el resultado siguiente.

apiVersion: v1
data:
  password.txt: MTIzNAo=
  username.txt: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

De manera predeterminada, la clave es el nombre del archivo. Puedes anular la clave si usas la sintaxis extendida para --from-file:

kubectl create secret [TYPE] [NAME] --from-file=KEY=[/PATH/TO/DIRECTORY]

El ejemplo siguiente es idéntico al anterior, pero configura las claves para username y password, en lugar de usar los nombres de archivos.

kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt

--from-env-file

Para cargar varios pares clave-valor en un objeto secreto, debes almacenar los pares clave-valor en uno o más archivos de texto sin formato y cargarlos con --from-env-file, en lugar de --from-file. Puedes cargar varios archivos si especificas la marca varias veces. Se aplican las mismas limitaciones que para --from-file.

Por ejemplo, con el comando siguiente, se crea un objeto secreto denominado credentials desde un solo archivo, credentials.txt, que contiene varios pares clave-valor:

# Each of these key-value pairs is loaded into the Secret
username=jane
password=d7xnNss7EGCFZusG

Los valores del objeto secreto están codificados en Base 64 en Kubernetes.

kubectl create secret generic credentials --from-env-file ./credentials.txt

Ejecutar kubectl get secret credentials -o yaml muestra el resultado siguiente.

apiVersion: v1
data:
  password: ZDd4bk5zczdFR0NGWnVzRw==
  username: amFuZQ==
kind: Secret
metadata:
  creationTimestamp: 2019-06-04T15:39:27Z
  name: credentials
  namespace: default
  resourceVersion: "14507319"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: efce376b-86de-11e9-9742-42010a80022f
type: Opaque

Limitaciones

kubectl ignora los archivos no regulares, como enlaces simbólicos, dispositivos y barras verticales. Los subdirectorios también se ignoran; kubectl create secret no se clasifica en subdirectorios.

Desde valores literales

Si quieres crear un objeto secreto a partir de valores literales, debes usar --from-literal.

Por ejemplo, con el comando siguiente, se crea un objeto secreto genérico denominado literal-token con dos pares clave-valor:

kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234

Especifica --from-literal para cada par clave-valor. Los valores se codifican de forma automática en base64.

Ejecutar kubectl get secret literal-token -o yaml muestra el resultado siguiente:

apiVersion: v1
data:
  password: MTIzNA==
  user: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: ...
  name: literal-token
  namespace: default
  resourceVersion: "2012831"
  selfLink: /api/v1/namespaces/default/secrets/literal-token
  uid: ...
type: Opaque

En el resultado anterior, observa que password y user están codificados en base64. La codificación en base64 permite que las apps y los servicios que no pueden manejar algunos caracteres resuman la información. Esta codificación no proporciona seguridad.

Cómo usar un objeto secreto

Para usar un objeto secreto con tus cargas de trabajo, puedes especificar variables de entorno que hagan referencia a los valores del objeto secreto o activar un volumen que contenga este objeto.

Para obtener información sobre el uso de los objetos secretos, consulta la sección sobre cómo usar objetos secretos.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Kubernetes Engine