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 estos datos sensibles en objetos secretos es más seguro que en ConfigMaps sin formato o en especificaciones de pod. El uso de estos objetos te permite controlar la manera en que se utilizan los datos sensibles, y reduce el riesgo de exposición de datos a usuarios no autorizados.

Cómo crear un objeto secreto

Para crear un objeto secreto, utiliza el siguiente comando:

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

[TYPE] puede ser uno de los siguientes tipos:

  • generic: crea un objeto secreto desde un archivo local, directorio o valor literal.
  • docker-registry: crea un objeto secreto dockercfg para usar con un registro de Docker. Se utiliza para autenticar con los registros de Docker.
  • tls: crea un objeto secreto de TLS desde el par de clave pública/privada determinada. Esta clave debe existir con anticipación. El certificado de clave pública debe tener codificación.PEM y coincidir con la clave privada determinada.

En la mayoría de los objetos secretos, usarás el tipo generic.

[DATA] puede ser uno de los siguientes datos:

  • Una ruta a un directorio que contiene uno o más archivos de configuración, indicados con los marcadores --from-file o --from-env-file
  • Pares clave-valor, especificados con los marcadores --from-literal

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

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

Desde archivos

Para crear un objeto secreto desde uno o más archivos, usa --from-file o --from-env-file. El archivo debe ser 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. Sin embargo, si el valor tiene varios pares clave-valor, utiliza --from-env-file.

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, el siguiente comando crea un objeto secreto denominado credentials desde 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 siguiente resultado:

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 con la sintaxis extendida de --from-file:

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

El siguiente ejemplo es idéntico al anterior, pero establece las claves para username y password, en vez de usar los nombres de usuario.

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, almacena estos pares en uno o más archivos sin formato y cárgalos con --from-env-file, en lugar de --from-file. Puedes cargar varios archivos si especificas el marcador varias veces. Se aplican las mismas limitaciones que para --from-file.

Por ejemplo, el siguiente comando crea un objeto secreto denominado credentials para 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 siguiente resultado:

apiVersion: v1
data:
  credentials.txt:
    username: YWRtaW4K
    password: MTIzNA==
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
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

Para crear un objeto secreto a partir de valores literales, usa --from-literal.

Por ejemplo, el siguiente comando crea un objeto 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 están codificados automáticamente en Base 64.

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

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 Base 64. La codificación en Base 64 permite que las aplicaciones 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 los objetos secretos, consulta Cómo usar objetos secretos.

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...