Uso de la red virtual de Docker para las tareas de Linux de Amazon ECS
El modo de red bridge
solo se admite para las tareas de Amazon ECS alojadas en instancias de Amazon EC2.
Con el modo bridge
, utiliza un puente de red virtual para crear una capa entre el host y la red del contenedor. De esta forma, puede crear asignaciones de puertos que reasignen un puerto de host a un puerto de contenedor. Las asignaciones pueden ser estáticas o dinámicas.
![Diagrama que muestra la arquitectura de una red que utiliza el modo de red puente con asignación de puertos estática.](images/networkmode-bridge.png)
Con una asignación de puertos estática, puede definir de forma explícita qué puerto de host desea asignar a un puerto de contenedor. En el ejemplo anterior, el puerto 80
del host se asigna al puerto 3000
del contenedor. Para comunicarse con la aplicación en contenedor, debe enviar el tráfico al puerto 80
a la dirección IP de la instancia de Amazon EC2. Desde la perspectiva de la aplicación en contenedor, se ve el tráfico entrante en el puerto 3000
.
Si solo desea cambiar el puerto de tráfico, las asignaciones de puertos estáticas son adecuadas. Sin embargo, esto sigue teniendo la misma desventaja que usar el modo de red host
. No puede ejecutar más de una instancia de una tarea en cada host. Esto se debe a que una asignación de puertos estática solo permite asignar un único contenedor al puerto 80.
Para resolver este problema, considere la posibilidad de utilizar el modo de red bridge
con una asignación dinámica de puertos, como se muestra en el siguiente diagrama.
![Diagrama que muestra la arquitectura de una red que utiliza el modo de red puente con asignación de puertos dinámica.](images/networkmode-bridge-dynamic.png)
Al no especificar un puerto de host en la asignación de puertos, puede hacer que Docker elija un puerto aleatorio y no utilizado del rango de puertos efímeros y lo asigne como puerto de host público del contenedor. Por ejemplo, a la aplicación Node.js que escucha en el puerto 3000
del contenedor se le puede asignar un puerto aleatorio con un número alto, como 47760
en el host de Amazon EC2. Esto significa que puede ejecutar varias copias de ese contenedor en el host. Además, a cada contenedor se le puede asignar su propio puerto en el host. Cada copia del contenedor recibe tráfico en el puerto 3000
. Sin embargo, los clientes que envían tráfico a estos contenedores utilizan los puertos de host asignados aleatoriamente.
Amazon ECS ayuda a realizar un seguimiento de los puertos asignados de forma aleatoria para cada tarea. Para ello, actualiza automáticamente los grupos de destino del equilibrador de carga y la detección de servicios de AWS Cloud Map para disponer de la lista de puertos y direcciones IP de las tareas. Esto facilita el uso de los servicios que funcionan en modo bridge
con puertos dinámicos.
Sin embargo, una desventaja de usar el modo de red bridge
es que es difícil bloquear las comunicaciones entre servicios. Como los servicios pueden asignarse a cualquier puerto aleatorio y no utilizado, es necesario abrir rangos de puertos amplios entre los hosts. Sin embargo, no es fácil crear reglas específicas para que un servicio en particular solo pueda comunicarse con otro servicio específico. Los servicios no tienen puertos específicos para utilizarlos en las reglas de red de los grupos de seguridad.