En poco tiempo, la tecnología de contenedores se ha hecho un hueco en el desarrollo y especialmente en la operatividad de nuevas aplicaciones dentro de las empresas. Un factor importante del aumento de su predominancia es su gestión de alto rendimiento, permitiendo usar los contenedores de forma eficiente y segura a lo largo de todo el ciclo de vida.

Las características clave de los contenedores Linux pueden resumirse en unas pocas frases: empaquetan el código del programa y dependencias necesarias en un pack aislado que se ejecuta en una única instancia del sistema operativo host. Esto se hace directamente en el hardware físico o en una máquina virtual, y puede realizarse en un data center de la empresa o en una cloud pública.

Los contenedores se diferencian claramente de la virtualización del hipervisor: la virtualización implica vincular máquinas virtuales a un sistema operativo completo que genera importantes gastos generales. Para solucionar este problema, un contenedor de aplicaciones ya cuenta con todas las dependencias necesarias, como el middleware y el entorno de ejecución. Como resultado, varios contenedores en un servidor pueden compartir el kernel del sistema operativo.

Los contenedores prometen un desarrollo rápido y rentable, ya que pueden ser transportados rápida y fácilmente entre (y dentro de) los entornos de desarrollo, de pruebas y de operación. Esto permite a las empresas resolver muchos problemas organizativos encontrados en proyectos de desarrollo de software convencional a gran escala. Ya no son necesarias docenas de programadores para trabajar en una sola aplicación. En su lugar, hay pequeños equipos que se centran en subtareas y procesos particulares, y por lo tanto son capaces de trabajar de una manera mucho más ágil.Cuando los contenedores son transferidos en una operación productiva, es posible que en el caso más sencillo se inicie el procedimiento usando el proceso de servidor systemd. En las distribuciones actuales de Linux, el proceso de servidor systemd actúa como un sistema init para iniciar, supervisar y finalizar otros procesos, y también puede usarse para la administración básica de imágenes de contenedor. Para aplicaciones pequeñas y sencillas, systemd puede ser suficiente. Por el contrario, las aplicaciones empresariales a gran escala exigen un alto nivel de gestión de los contenedores, que se puede resumir en los siguientes siete puntos:

 

1. Alineación optimizada de recursos y cargas de trabajo

Frente al software monolítico estándar o solución personalizada, una aplicación basada en contenedores consiste en una serie de componentes independientes entre sí que son en gran medida capaces de funcionar como componentes autónomos. Cada uno de estos componentes individuales y sus relaciones entre sí deben tenerse en cuenta en una solución de gestión de contenedores. La complejidad aumenta si el equipo de TI sigue el concepto de DevOps, que se basa en la interconexión de desarrollo y operaciones de TI.

La programación de contenedores es necesaria para hacer la transición desde la etapa de desarrollo hasta la puesta en marcha. Entre otras cosas, se analiza cómo se distribuyen los contenedores a través de las infraestructuras y qué recursos están disponibles para ellos en los sistemas existentes. Estos pueden ser servidores en un data center local, pero también servidores en una nube pública o incluso varias nubes públicas como Amazon Web Services, Google Cloud y Microsoft Azure. El objetivo de la programación de contenedores es garantizar que los contenedores puedan utilizar de forma óptima los recursos informáticos disponibles, como potencia de procesamiento, memoria, SSD y las capacidades del disco duro y de la red.

Las empresas que desarrollan aplicaciones de contenedores con frecuencia pretenden que dichas aplicaciones se ejecuten en una nube pública, si no inmediatamente, al menos en un futuro. En este sentido, los desarrolladores están aprovechando las ventajas de los contenedores, que se extraen de la infraestructura subyacente. Esto significa que es irrelevante para el contenedor donde se ejecuta, ya sea directamente en un servidor, en un entorno virtual o en una nube pública. Como resultado, la solución de administración de contenedores debe permitir que los contenedores de aplicación se transfieran de cualquier manera entre el data center local y una o más nubes públicas. En la actualidad, sólo un pequeño número de usuarios han implementado esta arquitectura “cross-data center” y “cross-cloud”. Sin embargo, parece que muchos más seguirán esta tendencia pronto.

 

2. Gestión del ciclo de vida

Una solución de gestión de contenedores no sólo debe iniciar los contenedores y garantizar una utilización optimizada de los recursos, que es la labor de la programación de contenedores. También debe supervisar el funcionamiento adecuado, identificar y corregir los fallos en una etapa temprana y garantizar su disponibilidad. Esto también incluye reiniciar un contenedor que ha dejado de funcionar por cualquier razón en el servidor actual o trasladarlo si es necesario a otro servidor en el data center local o en una nube pública.Con este fin, un desarrollador también puede proporcionar un test sencillo, por ejemplo, realizar una comprobación externa para determinar si el contenedor funciona correctamente. La solución de gestión de contenedores recibe esta prueba como un parámetro de entrada y así poder comprobar a intervalos predeterminados si el contenedor sigue realizando su servicio según lo previsto.También son muy útiles en esta etapa las funciones para una verificación más completa de la salud de los contenedores, cuya implementación puede ser integrada por los desarrolladores directamente en su aplicación en forma de API. Esto es posible, por ejemplo, mediante el uso de software de gestión de API, que permite a los administradores de infraestructuras gestionar el ciclo de vida del contenedor de aplicaciones desde el aprovisionamiento y la configuración hasta la gestión del software. Cuando las API se integran directamente en una plataforma de aplicación de contenedores y, por lo tanto, también en una solución de gestión, y se bloquea el acceso externo, también se pueden lograr requisitos de normativa y cumplimiento con esta configuración.

 

3. Seguridad

A medida que los contenedores de aplicaciones se hacen cada vez más frecuentes en las empresas, se plantean problemas específicos de seguridad de TI. Para abordar estos problemas, es necesario implementar medidas básicas de seguridad como parte de la gestión de contenedores. El objetivo aquí es garantizar la seguridad de las imágenes de contenedores y el contenido del contenedor durante todo el ciclo de vida de la aplicación. Cuando se crean imágenes de contenedor, es importante, por ejemplo, que sólo se utilice contenido confiable, que se pueda determinar fácilmente el origen de todos los componentes y bibliotecas en las imágenes de contenedores, que se utilicen entornos aislados y que se realicen escaneos de seguridad regulares.

Desde el principio, la gestión de tareas y derechos para los contenedores debe estar preparada, que esté incrustada en una solución de gestión de contenedores. La herramienta de gestión de contenedores puede, en este caso, utilizar las soluciones basadas en LDAP (protocolo ligero/simplificado de acceso a directorios) ya implementadas en una empresa. Aquí, primero se define qué usuarios, dependiendo de su papel, pueden llevar a cabo qué actividades que implican un contenedor. En segundo lugar, las acciones que un contenedor puede realizar deben estar especificadas. El espectro de acciones varía desde el aislamiento total hasta los derechos de administración, en los que se da acceso a otros contenedores y al sistema operativo del servidor. Sin embargo, esta sería la excepción y no la regla.

La certificación en forma de firma digital mejora el nivel de seguridad. Esto deja claro quién creó la imagen del contenedor, con qué propósito y en qué momento. Una estrategia general de seguridad se puede resumir de la siguiente manera:

- Todos los componentes deben proceder de fuentes fiables.

- Debe quedar claro que su estado de seguridad está actualizado y no se ha modificado sin autorización.

- Como capa adicional, SELinux debe utilizarse en los hosts del contenedor para proteger los contenedores en ejecución del host y entre sí. SELinux aísla los contenedores y solo permite el acceso a los recursos necesarios.

A través de los límites exteriores de un contenedor, es teóricamente posible que un contenido malicioso consiga abrirse paso desde una imagen de contenedor a la siguiente y finalmente incluso al host de contenedor. Cada proceso que se ejecuta en un contexto de contenedor tiene acceso al kernel del host del contenedor, sin más medidas explícitas de seguridad. En el peor de los casos, un atacante puede explotar una vulnerabilidad en el software que se ejecuta en el contenedor. Si luego encuentra una vulnerabilidad en el kernel de Linux, ha hecho el salto al host del contenedor con éxito. Esto también pondría en peligro todos los otros procesos del contenedor en este host. Por lo tanto, como medida preventiva, el host de contenedores debe actualizarse periódicamente utilizando las actualizaciones de seguridad más recientes.

 

En breve estará online la segunda parte de este artículo, escrito por Andreas Neeb, Chief Architect Financial Services Vertical en Red Hat