Ir al contenido principal

Kubernetes: Guía Completa para Orquestación de Contenedores y Gestión Segura de Secrets

Kubernetes (K8s) es un sistema de orquestación de contenedores de código abierto que automatiza la implementación, el escalado y la gestión de aplicaciones en contenedores. Diseñado para facilitar el desarrollo de aplicaciones en un entorno cloud-native, Kubernetes ofrece agilidad y resiliencia.

¿Qué es Kubernetes y sus Componentes Clave?

Kubernetes se basa en el concepto de cluster, que es un conjunto de máquinas (nodos) que trabajan juntas para ejecutar cargas de trabajo en contenedores. Este cluster es gestionado por un control plane, un conjunto de componentes que supervisan su funcionamiento.

Componentes Principales de un Cluster Kubernetes:

  • Nodos: Son las máquinas de trabajo donde se ejecutan los contenedores. Cada nodo cuenta con:
    • kubelet: Un agente que se ejecuta en cada nodo y es responsable de gestionar los contenedores que se ejecutan en él.
    • kube-proxy: Un proxy de red que se ejecuta en cada nodo y es responsable de enrutar el tráfico hacia los contenedores.
    • Container Runtime: El software que se encarga de ejecutar los contenedores. Ejemplos comunes son Docker y containerd.
  • Control Plane: Es el "cerebro" del cluster y gestiona su operación. Incluye los siguientes componentes:
    • kube-apiserver: El servidor de API que expone la API de Kubernetes.
    • etcd: Un almacén de valores clave distribuido que almacena el estado del cluster.
    • kube-scheduler: El planificador que decide en qué nodo ejecutar cada contenedor.
    • kube-controller-manager: El gestor de controladores que se encarga de gestionar los controladores.
    • cloud-controller-manager: El gestor de controladores de la nube que se encarga de gestionar los recursos de la nube.

Principios de Diseño de Kubernetes

La arquitectura de Kubernetes se basa en principios clave que garantizan su flexibilidad y potencia:

  • Declarativo: Kubernetes utiliza un enfoque declarativo para gestionar las aplicaciones. Se define el estado deseado de la aplicación, y Kubernetes se encarga de alcanzarlo.
  • Auto-sanación: Kubernetes está diseñado para ser auto-sanador. Detecta y se recupera automáticamente de fallos.
  • Escalable: Kubernetes puede manejar un gran número de contenedores y nodos.
  • Portable: Puede ejecutarse en diversas plataformas, incluyendo bare metal, máquinas virtuales y proveedores de nube.
  • Extensible: Permite extender su funcionalidad con plugins y recursos personalizados.

Arquitectura y Flujo de Trabajo

Kubernetes sigue un modelo cliente-servidor. El cliente, generalmente la herramienta de línea de comandos kubectl, interactúa con el kube-apiserver. El API Server valida las peticiones y actualiza el estado del cluster si son válidas. El kubelet en cada nodo ejecuta los contenedores basándose en las instrucciones del API Server, y el kube-proxy se encarga de enrutar el tráfico.

Ejemplo Práctico: Desde un Contenedor Local a un Pod en Kubernetes

  1. Configuración Local:

  2. Creación de un Cluster Local con Minikube:

  3. Despliegue de un Pod:

    • Crear un archivo pod.yaml con el siguiente contenido:
apiVersion: v1 kind: Pod metadata:   name: my-pod   labels:     app: my-app spec:   containers:   - name: my-container     image: nginx:latest     ports:     - containerPort: 80 
*   Aplicar el Pod: `kubectl apply -f pod.yaml`. *   Verificar el estado: `kubectl get pods`. *   Acceder al Pod: `kubectl port-forward my-pod 8080:80`.  Abrir `http://localhost:8080` en el navegador. 

Secrets en Kubernetes: Gestión de Información Sensible

Los Secrets son objetos que almacenan información sensible como contraseñas, claves API y certificados. Están diseñados para ser utilizados por aplicaciones que se ejecutan en los Pods de Kubernetes.

Conceptos Clave de los Secrets:

  • Objetos Kubernetes: Los Secrets son objetos de primer nivel en Kubernetes.
  • Cifrado en Reposo (Opcional): Por defecto, los Secrets se almacenan sin cifrar en etcd. Se puede configurar el cifrado en reposo.
  • Control de Acceso (RBAC): El control de acceso basado en roles (RBAC) permite restringir el acceso a los Secrets.
  • Uso de Secrets: Las aplicaciones pueden acceder a los Secrets como variables de entorno o archivos montados en el contenedor.
  • Tipos de Secrets:
    • Opaque: Pares clave-valor genéricos.
    • Kubernetes Service Account Token: Tokens generados automáticamente para los Pods.
    • Docker Config: Credenciales para registros Docker.
    • Basic Authentication: Pares de usuario y contraseña.
    • TLS Client or Server: Certificados y claves privadas.
    • Token Data: Datos arbitrarios para autenticación.

Almacenamiento de Secrets:

  • Kubernetes Secrets: Objetos Secrets integrados en etcd.
  • External Secret Stores: Integración con almacenes de secretos externos como HashiCorp Vault o AWS Secrets Manager.
  • Secret Management Tools: Herramientas como Sealed Secrets y External Secrets Operator facilitan la gestión de Secrets.

Consideraciones de Seguridad con Secrets

La gestión adecuada de los Secrets es crucial para la seguridad de las aplicaciones Kubernetes.

Exposiciones de Seguridad Comunes:

  • Almacenamiento en Texto Plano: Almacenar Secrets en texto plano en archivos de configuración o variables de entorno.
  • Hardcodear Secrets: Incorporar Secrets directamente en el código de la aplicación.
  • Filtraciones de Secrets: Exponer Secrets en logs, repositorios o canales de comunicación.
  • Acceso No Autorizado: Permitir el acceso no autorizado a los Secrets.

Kubernetes ofrece mecanismos para mitigar estos riesgos, incluyendo el uso de RBAC, el cifrado de etcd y la integración con sistemas de gestión de secretos externos. La implementación de estas medidas es fundamental para garantizar la seguridad de las aplicaciones y los datos en un entorno Kubernetes.

Comentarios

Entradas populares de este blog

Autenticación y Autorización (Kubernetes).

La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                       Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...