Introducción

En Kubernetes, los Secrets (Secretos) son objetos que permiten almacenar y gestionar información sensible, como contraseñas, tokens y claves SSH. A diferencia de los ConfigMaps, que se utilizan para almacenar datos de configuración no sensibles, los Secrets están diseñados para proteger la confidencialidad de la información.

Conceptos Clave

  • Secret: Un objeto de Kubernetes que contiene una pequeña cantidad de datos sensibles, como una contraseña, un token o una clave.
  • Base64: Los datos en un Secret deben estar codificados en Base64.
  • Tipos de Secretos: Kubernetes soporta varios tipos de secretos, como Opaque, kubernetes.io/service-account-token, kubernetes.io/dockercfg, entre otros.

Creación de un Secret

Método 1: Usando un archivo YAML

Puedes definir un Secret en un archivo YAML. Aquí hay un ejemplo de cómo crear un Secret que almacena un nombre de usuario y una contraseña:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=  # "admin" codificado en Base64
  password: MWYyZDFlMmU2N2Rm  # "1f2d1e2e67df" codificado en Base64

Para aplicar este Secret, usa el comando kubectl apply:

kubectl apply -f my-secret.yaml

Método 2: Usando el comando kubectl create secret

También puedes crear un Secret directamente desde la línea de comandos:

kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=1f2d1e2e67df

Acceso a los Secrets en Pods

Usando Variables de Entorno

Puedes acceder a los datos de un Secret en un Pod a través de variables de entorno. Aquí hay un ejemplo de cómo hacerlo:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password

Montando como Volumen

Otra forma de acceder a los datos de un Secret es montándolo como un volumen en el Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

Ejercicio Práctico

Ejercicio 1: Crear y Usar un Secret

  1. Crear un Secret: Define un Secret en un archivo YAML que contenga un nombre de usuario y una contraseña.
  2. Aplicar el Secret: Usa kubectl apply para crear el Secret en tu clúster.
  3. Acceder al Secret en un Pod: Crea un Pod que acceda a los datos del Secret a través de variables de entorno.

Solución

  1. Archivo YAML del Secret (my-secret.yaml):

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      username: YWRtaW4=  # "admin" codificado en Base64
      password: MWYyZDFlMmU2N2Rm  # "1f2d1e2e67df" codificado en Base64
    
  2. Aplicar el Secret:

    kubectl apply -f my-secret.yaml
    
  3. Archivo YAML del Pod (my-pod.yaml):

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: nginx
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password
    
  4. Aplicar el Pod:

    kubectl apply -f my-pod.yaml
    

Errores Comunes y Consejos

  • Error: Datos no codificados en Base64: Asegúrate de que los datos en el Secret estén codificados en Base64. Puedes usar el comando echo -n 'data' | base64 para codificar datos.
  • Error: Acceso denegado: Verifica que el Pod tenga los permisos necesarios para acceder al Secret.
  • Consejo: Usa kubectl describe secret <secret-name> para verificar el contenido y los detalles del Secret.

Conclusión

En esta sección, hemos aprendido qué son los Secrets en Kubernetes, cómo crearlos y cómo acceder a ellos desde los Pods. Los Secrets son una herramienta esencial para gestionar información sensible de manera segura en tus aplicaciones desplegadas en Kubernetes. En la próxima sección, exploraremos cómo gestionar variables de entorno en Kubernetes.

Curso de Kubernetes

Módulo 1: Introducción a Kubernetes

Módulo 2: Componentes Principales de Kubernetes

Módulo 3: Gestión de Configuración y Secretos

Módulo 4: Redes en Kubernetes

Módulo 5: Almacenamiento en Kubernetes

Módulo 6: Conceptos Avanzados de Kubernetes

Módulo 7: Monitoreo y Registro

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados