Estoy jugando con Amazon ECS (un reempaquetado de Docker) y descubro que hay una capacidad de Docker que ECS no parece proporcionar. Es decir, me gustaría tener varios contenedores ejecutándose en una instancia, y que las solicitudes que ingresen a la dirección IP 1 se asignen al contenedor 1, y las solicitudes que lleguen a la dirección IP 2 se asignen al contenedor 2, etc.
En Docker, la vinculación de un contenedor a una dirección IP específica se realiza a través de:
docker run -p myHostIPAddr:80:8080 imageName command
Sin embargo, en Amazon ECS, no parece haber una manera de hacer esto.
He configurado una instancia EC2 con múltiples direcciones IP elásticas. Al configurar un contenedor como parte de una definición de tarea, es posible asignar puertos de host a puertos de contenedor. Sin embargo, a diferencia de Docker, ECS no proporciona una forma de especificar la dirección IP del host como parte de la asignación.
Un giro adicional es que me gustaría que las solicitudes salientes del contenedor N tengan la dirección IP externa del contenedor N.
¿Hay alguna manera de hacer todo lo anterior?
He revisado la documentación de AWS CLI, así como el AWS SDK para Java. Puedo ver que la CLI puede devolver una matriz networkBindings que contiene elementos como este:
{
"bindIP": "0.0.0.0",
"containerPort": 8021,
"hostPort": 8021
},
y el SDK de Java tiene una clase llamada NetworkBinding que representa la misma información. Sin embargo, esta información parece ser solo de salida, en respuesta a una solicitud. No puedo encontrar una manera de proporcionar esta información vinculante a ECS.
La razón por la que quiero hacer esto es porque quiero configurar máquinas virtuales completamente diferentes para diferentes circunscripciones, utilizando diferentes contenedores potencialmente en la misma instancia de EC2. Cada VM tendría su propio servidor web (incluidos certificados SSL distintos), así como su propio servicio FTP y SSH.
Gracias.
aws ecs describe-container-instances
no parece ayudar Parece que realmente quieren empujarlo a usar un ELB, que para nuestro caso es un poco tonto.