Hace un tiempo que quería hablar de Contenedores, sin duda alguna creo que estamos ante un gran paso para la eficiencia de los servidores y las aplicaciones como lo fue en su momento la virtualización de servidores.
Sin embargo, también estoy de acuerdo que los contenedores tienen ciertos casos de éxito y otros casos en los cuales se aplica la virtualización como la conocemos.
Para entender lo que son los contenedores vamos a compararlos con la virtualización de servidores.
En Virtualización de Servidores la recomendación es que para cada aplicación implementemos un sistema operativo completo e instalemos todas las librerías y binarios necesarios para que corra la aplicación, entonces, por ejemplo, si necesito 10 aplicaciones voy a tener 10 servidores virtuales con 10 sistemas operativos cada uno con su respectivas librerías y binarios para que corran cada aplicación.
Para el caso de los Contenedores, la idea es tener un solo sistema operativo Base para las aplicaciones, «conteniendo» de manera virtual todas las librerías y binarios de las aplicaciones para que corran las aplicaciones, pudiendo así tener varias instancias de la misma aplicación corriendo al mismo tiempo en el mismo servidor, además, poder llevar la aplicación a otro servidor que corra el mismo motor de contenedores solo llevando el «contenedor» con todas sus librerías. Así por ejemplo si necesito correr 10 aplicaciones distintas solo necesito un servidor con un sistema operativo base con 10 contenedores de las aplicaciones.
Menos sistemas operativos significa menos memoria, menos almacenamiento y menos CPUs.
¿Qué hay con las redes en un escenario con contenedores?
Pues hay bastantes alternativas, una de ellas es usar una interfaz Bridge entre el sistema operativo base y todos los contenedores a su interior por ejemplo Bridge0, los contenedores para comunicarse con el host y otros equipos en la red del host usan NAT. Los Contenedores se pueden comunicar entre sí por medio de esta interfaz de bridge.
A cada contenedor se le asigna puertos TCP/UDP para comunicarse con el mundo exterior, así cuando una aplicación intenta comunicarse con el puerto TCP/6001 de la dirección IP del Host que tiene los contenedores, el sistema operativo reenviara el tráfico correspondiente al contenedor al que se maperaon los puertos TCP/6001.
En este escenario podríamos tener más de una interfaz Bridge y separar el tráfico de distintos contenedores.
Una de las formas más referenciada de diseñar redes para el uso de contenedores es la llama «microsegmentación» la cual se basa en tener una red «overlay» o sobrepuesta a nuestra red física pudiendo incluso asignar la misma dirección IP a distintos host y mapear los puertos para redirigir el tráfico a un u otro contenedor. Para este tema voy a dedicar un post exclusivo en este mismo espacio.
En fin, los contenedores son una realidad, y en redes debemos estar preparados para interconectarlos y darle seguridad y redundancia.
Uno de los proyectos más fuertes de Contenedores es Docker, que incluso incluye un repositorio de imágenes base para mis contenedores que son soportados por la comunidad.
Como siempre, si algo le gustó, compártelo.
Saludos,