Я играю с Amazon ECS (переупаковка Docker) и обнаружил, что есть одна возможность Docker, которую ECS, похоже, не предоставляет. А именно, я хотел бы, чтобы в экземпляре работало несколько контейнеров, и чтобы запросы, поступающие на IP-адрес 1, отображались в контейнер 1, а запросы, поступающие на IP-адрес 2, отображались в контейнер 2 и т. Д.
В Docker привязка контейнера к определенному IP-адресу осуществляется через:
docker run -p myHostIPAddr:80:8080 imageName command
Однако в Amazon ECS, похоже, нет способа сделать это.
Я настроил экземпляр EC2 с несколькими эластичными IP-адресами. При настройке контейнера как части определения задачи можно сопоставить порты хоста с портами контейнера. Однако, в отличие от Docker, ECS не предоставляет способ указать IP-адрес хоста как часть сопоставления.
Дополнительный поворот заключается в том, что я хотел бы, чтобы исходящие запросы из контейнера N имели внешний IP-адрес контейнера N.
Есть ли способ сделать все вышеперечисленное?
Я просмотрел документацию по интерфейсу командной строки AWS, а также AWS SDK для Java. Я вижу, что CLI может возвращать массив networkBindings, содержащий такие элементы:
{
"bindIP": "0.0.0.0",
"containerPort": 8021,
"hostPort": 8021
},
и Java SDK имеет класс с именем NetworkBinding, который представляет ту же информацию. Однако эта информация представляется только для вывода в ответ на запрос. Я не могу найти способ предоставить эту обязательную информацию в ECS.
Причина, по которой я хочу это сделать, заключается в том, что я хочу настроить совершенно разные виртуальные машины для разных групп пользователей, используя разные контейнеры, потенциально на одном и том же экземпляре EC2. Каждая виртуальная машина будет иметь свой собственный веб-сервер (включая отдельные сертификаты SSL), а также собственный сервис FTP и SSH.
Спасибо.
aws ecs describe-container-instances
похоже не помогает. Кажется, они действительно хотят подтолкнуть вас к использованию ELB, что в нашем случае довольно глупо.