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
:
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
- Crear un Secret: Define un Secret en un archivo YAML que contenga un nombre de usuario y una contraseña.
- Aplicar el Secret: Usa
kubectl apply
para crear el Secret en tu clúster. - 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
-
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
-
Aplicar el Secret:
kubectl apply -f my-secret.yaml
-
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
-
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
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
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
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster