In this article
¿Qué es la orquestación de contenedores?
Un contenedor es una unidad ejecutable ligera y aislada que contiene una aplicación o sus componentes. Los desarrolladores pueden configurar un contenedor para que se ejecute en cualquier entorno y máquina que tenga un motor de ejecución de contenedores.
Los contenedores permiten que el código de las aplicaciones sea portátil. Podemos empaquetar el código, las bibliotecas del sistema operativo (SO), las variables de entorno, las dependencias y la configuración en una sola unidad. Luego podemos implementar y ejecutar el código en distintos entornos de nube o locales. Entre las herramientas de contenedorización más populares están Docker Engine, containerd y CRI-O.
¿Qué es la orquestación de contenedores?
La orquestación de contenedores consiste en automatizar su implementación, operación y gestión del ciclo de vida. Este enfoque automatiza el aprovisionamiento, la implementación, el escalado, la supervisión y el reemplazo de contenedores en ejecución, así como la gestión de su almacenamiento. Kubernetes, Docker Swarm, Nomad y Mesos son herramientas populares de orquestación de contenedores.
Administrar contenedores a gran escala es difícil, en especial cuando hay muchas aplicaciones contenedorizadas. Monitorear y administrar aplicaciones con soluciones personalizadas suele consumir mucho tiempo y propiciar errores. Una plataforma de orquestación de contenedores bien probada ayuda a resolver ambos problemas mediante la estandarización y la automatización.
En esta publicación, veremos por qué es necesaria la orquestación, analizaremos en detalle algunos orquestadores de contenedores y hablaremos de los beneficios y riesgos de seguridad que conlleva.
La necesidad de la orquestación
Antes de que los orquestadores alcanzaran la madurez, las aplicaciones contenedorizadas solían implementarse con scripts personalizados y otras herramientas de implementación especializadas en determinadas plataformas o paquetes de aplicaciones. La estandarización que aportaron los contenedores permitió crear orquestadores de propósito general, al integrar todas las aplicaciones detrás de un conjunto común de API y especificaciones de empaquetado.
Antes de los orquestadores, era difícil administrar qué contenedores estaban en ejecución y dónde ejecutarlos. Esto era especialmente cierto durante la transición a las arquitecturas de microservicios, donde pueden necesitarse decenas, o incluso cientos, de contenedores en ejecución en todo momento, con actualizaciones varias veces al día.
Los orquestadores se encargan del arduo trabajo de ejecutar estos contenedores en un clúster de hosts y ofrecen elementos estandarizados para escalar, actualizar, aprovisionar redes y abordar muchas otras necesidades. Uno de sus beneficios clave es el uso de un modelo de implementación declarativo, en el que los desarrolladores y operadores especifican el estado deseado de la aplicación. Este modelo permite que quienes escriben las instrucciones no tengan que preocuparse por cómo ni dónde ejecutar el proceso, porque el orquestador se ocupa de crear y destruir los contenedores —y otras entidades— para alcanzar el estado solicitado donde tenga sentido en el clúster en cada momento. Los orquestadores también siguen monitoreando lo que implementaron y pueden intentar restaurar automáticamente el estado deseado si algo, como una falla de la aplicación o del hardware, hace que la implementación se desvíe de las especificaciones.
Kubernetes: el orquestador de contenedores líder
Google presentó en 2015 la plataforma de orquestación de contenedores de código abierto Kubernetes, basada en gran medida en el trabajo que había realizado con su administrador interno de cargas de trabajo de contenedores, llamado «Borg». Para 2017, el respaldo de la comunidad a Kubernetes había alcanzado un nivel que lo convirtió en la opción más popular. La Cloud Native Computing Foundation (CNCF) se creó junto con Kubernetes 1.0 y Google y otros miembros fundadores la aportaron a la Linux Foundation. La CNCF alberga containerd, Helm, Linkerd, Prometheus, gRPC y otros proyectos de código abierto exitosos.
Kubernetes es independiente de la plataforma y es compatible con todos los sistemas operativos que cuentan con un motor de ejecución de contenedores compatible. Varios proveedores de nube ofrecen compatibilidad con Kubernetes. Los principales —Azure, AWS y Google Cloud— ahora ofrecen soluciones de Kubernetes como servicio. En 2018, la CNCF informó que el 40 % de quienes respondieron su encuesta global sobre administración de contenedores usaban Kubernetes. Para 2021, el porcentaje había superado el 80 %.
Empresas como Pinterest afirman que Kubernetes mejora la eficiencia, acelera la implementación de proyectos y permite ahorrar tiempo y dinero al administrar cientos de contenedores. Según un estudio de caso de la CNCF sobre Spotify, el uso de CPU de los contenedores mejoró entre dos y tres veces después de adoptar Kubernetes.
Gracias a sus numerosas funciones y a una activa comunidad de código abierto, Kubernetes gestiona casos de uso y arquitecturas muy complejos. Sin embargo, puede ser demasiado potente si trabajas con unas pocas aplicaciones pequeñas y sencillas que se implementan con poca frecuencia.
Otras plataformas de orquestación de contenedores
Docker Swarm: Swarm es un orquestador de código abierto integrado en el motor de ejecución de Docker. Al igual que otras plataformas de clústeres, consta de uno o más nodos administradores y nodos trabajadores, y usa un modelo de consenso RAFT para compartir el estado entre ellos. No ofrece tantas funciones como Kubernetes, pero Swarm es más fácil de configurar e instalar porque está integrado en el binario de Docker. Además, se sincroniza bien con Docker CLI y Docker Compose.
Apache Mesos: Apache Mesos es un proyecto de UC Berkeley. Airbnb, Apple, Twitter y otras grandes empresas usan este orquestador de contenedores. Mesos es ligero y asigna recursos de forma fluida, lo que ofrece escalabilidad y flexibilidad. Sin embargo, requiere muchos conocimientos técnicos para usarlo.
Red Hat OpenShift: OpenShift es una plataforma como servicio (PaaS) basada en Kubernetes. No funciona en todos los sistemas operativos y requiere CentOS, Fedora o Red Hat Enterprise Linux Atomic Host (RHELAH). OpenShift incluye las funciones de autenticación y autorización que faltan en la mayoría de las distribuciones de Kubernetes, y su facilidad de uso también resulta atractiva para los desarrolladores.
HashiCorp Nomad: Nomad es una plataforma centrada en la programación y la administración de procesos. Sin embargo, puede escalar más clústeres de contenedores que Kubernetes.
Rancher: Rancher es una plataforma de código abierto de Rancher Labs que ofrece «Kubernetes como servicio». Proporciona una solución fácil de administrar, observable y escalable para gestionar varios clústeres de Kubernetes. Permite usar una sola implementación para mantener la coherencia y la seguridad en una infraestructura con varios clústeres, ya sea que estén en las instalaciones, en el edge, en entornos de nube privada o pública, o en cualquier combinación de estos.
Beneficios de la orquestación de contenedores
Implementación y administración automatizadas: A medida que aumenta la cantidad de contenedores, administrarlos manualmente se vuelve cada vez más difícil y propenso a errores. Las plataformas de orquestación estandarizan y automatizan estas tareas. Además, como funcionan con API y procesos bien documentados, los operadores pueden monitorearlos y solucionar problemas con más facilidad.
Estado controlado: Los orquestadores de contenedores, como Docker Swarm y Kubernetes, permiten definir de antemano el estado deseado de los contenedores. El trabajo del orquestador es crear y mantener los componentes declarados en ese estado. Este modelo declarativo es mucho más fácil de escribir para los desarrolladores que las instrucciones imperativas que tendrían que crear mediante scripts para sus implementaciones.
Instalación y aprovisionamiento: Los orquestadores de contenedores pueden configurar nuevos contenedores e instancias de aplicaciones cuando aumenta el tráfico. Esto puede eliminar la necesidad de instalar y aprovisionar manualmente cada nueva instancia de contenedor a medida que crece el uso de la aplicación. A menudo, la orquestación puede usar una API estándar que escala las cargas de trabajo afectadas según corresponda. Como alternativa, una función como el escalador automático horizontal de pods de Kubernetes puede automatizar este proceso.
Lanzamientos y reversiones estandarizados: Muchas implementaciones de orquestación de contenedores estandarizan los procesos de lanzamiento y reversión, incluidas las pruebas de distintas versiones de aplicaciones, las implementaciones canary y los lanzamientos blue/green.
Riesgos de seguridad de la orquestación de contenedores
Control de acceso y autenticación: La mayoría de las plataformas de orquestación no aplican políticas estrictas de control de acceso y autenticación. Esto significa que los contenedores implementados son muy vulnerables a amenazas de autenticación y autorización, a menos que exista un control de acceso. Sin embargo, podemos tomar medidas para prevenir incidentes de autorización y autenticación, como controlar el acceso a la API de Kubernetes.
Control de redes y comunicaciones: De forma predeterminada, todos los contenedores de un clúster pueden comunicarse entre sí. Si bien esto facilita el desarrollo de aplicaciones distribuidas, también permite que contenedores maliciosos ataquen a otros. Implementar las políticas de red adecuadas ayuda a reducir este riesgo.
Además, herramientas como Snyk Infrastructure as Code (Snyk IaC) ayudan a los desarrolladores a analizar y corregir configuraciones antes de que lleguen a producción, lo que contribuye a mantener segura la infraestructura.
Protege la infraestructura desde el origen
Snyk automatiza la seguridad y el cumplimiento de IaC en los flujos de trabajo, y detecta recursos con desviaciones de configuración y recursos faltantes.
Conclusión sobre la orquestación
Los orquestadores de contenedores se han convertido en un estándar de la industria. Ayudan a automatizar la implementación, la instalación, el aprovisionamiento y la administración de contenedores.
Aunque la orquestación de contenedores conlleva algunos riesgos de seguridad, las medidas de protección adecuadas permiten que las organizaciones aprovechen los beneficios de la contenedorización y ahorren tiempo, al tiempo que mantienen la coherencia y escalan automáticamente.
Recursos adicionales:
Sigue aprendiendo sobre contenedores con estos recursos: