Planificación de Ambientes de Despliegue en Kubernetes

Clase 23 de 48Entrenamiento de Google Cloud Platform

Resumen

¿Por qué es importante planear los ambientes de despliegue de Kubernetes?

La planificación de tus ambientes de despliegue de Kubernetes es fundamental para evitar enredos futuros. Muchas veces, las pruebas de concepto (POC) se transforman en ambientes productivos sin una estructura adecuada. Esto puede generar problemas que obliguen a migraciones completas para implementar buenas prácticas. Desde el día cero, debes entender lo que está sucediendo en tu organización, qué aplicación vas a lanzar y la mejor forma de distribuir las cargas de trabajo para evitar complicaciones a largo plazo.

¿Cómo gestionar jerárquicamente los proyectos en Google Cloud Platform?

Google Cloud Platform ofrece distintas formas de estructurar tus proyectos. Normalmente, se asigna un nodo de organización vinculado a un dominio, manejado por un partner, que te permite crear folders o anidar proyectos. Esta estructura jerárquica optimiza la gestión de permisos sobre la plataforma, permitiendo que solo personas específicas puedan crear proyectos a nivel general o por sector.

¿Cómo aplicar el manejo jerárquico?

  • Nodo de organización completo: Una sola persona en toda la organización puede crear proyectos. El permiso se hereda a todos los subniveles.
  • Por folders: Cada unidad de negocio puede tener una persona responsable de la creación de proyectos en su sector.

¿Cómo aislar ambientes y recursos?

Aislar los ambientes es crucial para definir niveles de servicio adecuados. Por ejemplo, un desarrollador debe tener permisos de lectura y escritura en el ambiente de desarrollo, pero no en producción. De igual forma, los recursos, como bases de datos, deben diferenciarse entre desarrollo y producción, utilizando herramientas internas como las VPCs para lograr el aislamiento.

Estrategias de aislamiento

  1. Por proyecto: Cada proyecto puede aislarse para ofrecer diferentes niveles de servicio.
  2. Por clúster o namespace: La visibilidad entre cargas de trabajo puede gestionarse a través de namespaces, según las necesidades de la organización.

Estrategias más comunes para desplegar soluciones en Kubernetes

Estrategia 1: Un clúster único

Este enfoque utiliza un solo clúster y asigna namespaces para cada ambiente (desarrollo, testing y producción).

  • Ventajas:

    • Simplicidad en la gestión y configuración de IAM.
    • Eficiencia de recursos.
  • Desventajas:

    • Bajo nivel de defensa en profundidad.
    • Aislamiento limitado de recursos.

Estrategia 2: Un clúster por ambiente

Aquí se genera un clúster separado para desarrollo, testing y producción, con namespaces específicos para frontend y backend.

  • Ventajas:

    • Aislamiento por nodo.
    • Gestión de billing simplificada.
  • Desventajas:

    • Defensa en profundidad baja si se comprometen credenciales.
    • Mayor esfuerzo de gestión comparado con la estrategia anterior.

Estrategia 3: Un proyecto y un clúster por ambiente

Desplegar proyectos y clústeres separados para cada ambiente, integrados con la gestión de identidades corporativas.

  • Ventajas:

    • Mayor seguridad y seguimiento de acciones.
    • El proyecto de producción es accesible solo para procesos aprobados como CI/CD.
  • Desventajas:

    • Mayor complejidad en la configuración inicial.
    • Requiere equipos más robustos para su gestión.

¿Cómo decidir la estrategia de despliegue?

Las decisiones estratégicas deben basarse en el análisis de necesidades específicas de tu organización:

  • Nivel de aislamiento: Determina cuánta separación necesitas entre entornos y equipos.
  • Permisos y usuarios: Define roles y accesos dentro de los clústeres para evitar sobrecargar a los desarrolladores con credenciales innecesarias.
  • Razón del aislamiento: Puede ser necesaria por facilidad de administración o integración con sistemas de gestión de identidades.

Implementa el principio de menor privilegio

La clave está en aplicar los mínimos permisos necesarios para cada tarea. Permitir que los desarrolladores desplieguen y experimenten libremente en ambientes de desarrollo, pero limitar su acceso en producción, garantiza mayor seguridad y control sobre el sistema. Además, evita permisos en todo el proyecto, priorizando las necesidades específicas de cada rol.

Con estos principios claros, estarás mejor preparado para enfrentar los desafíos de Kubernetes y aprovechar al máximo las capacidades de Google Cloud Platform. ¡El aprendizaje no termina aquí, sigue explorando y mejorando!