Не удается получить доступ к портам в экземпляре AWS ECS EC2 - PullRequest
3 голосов
/ 04 октября 2019

Я использую сервис AWS ECS, который выполняет одну задачу с несколькими контейнерами. Задачи запускаются в режиме сети awsvpc. (EC2, не Fargate)

Порты контейнера отображаются в определении задачи ECS.

Я добавил входящие правила в группу безопасности экземпляра контейнера EC2 (например, TCP 8883 -> доступ из любого места). Также в группе безопасности сети VPC.

Когда я пытаюсь получить доступ к портам, используя Public IP экземпляра с моего удаленного ПК, я получаю connection refused.

Например: nc -z <PublicIP> <port>

Когда я запускаю SSH в экземпляр EC2 и пробую netstat, я вижу, что порт 22 SSH прослушивает, но не порты контейнера (например: 8883). Кроме того, когда я выполняю docker ps внутри экземпляра, столбец Порты пуст.

Я не мог понять, какую конфигурацию я пропустил. Пожалуйста, помогите.

PS: пункт назначения (Public IP) доступен с удаленного ПК. Только не из порта.

1 Ответ

2 голосов
/ 04 октября 2019

Я использую сервис AWS ECS, который выполняет одну задачу с несколькими контейнерами. Задачи запускаются в режиме сети awsvpc. (EC2, не Fargate)

Ec2, не Fargate , разные лошади для разных курсов. Задача, запущенная в режиме сети awsvpc , имеет собственный эластичный сетевой интерфейс (ENI), основной частный IP-адрес и внутреннее имя хоста DNS. Итак, как вы получите доступ к этому контейнеру с общедоступным IP-адресом AWS EC2?

Сетевые функции задач, предоставляемые сетевым режимом awsvpc, предоставляют задачам Amazon ECS те же сетевые свойства, что и экземплярам Amazon EC2. Когда вы используете сетевой режим awsvpc в своих определениях задач, каждая задача, запускаемая из этого определения задачи, получает собственный эластичный сетевой интерфейс (ENI), основной частный IP-адрес и внутреннее имя хоста DNS. Функция сетевого задания упрощает работу в контейнерах и дает вам больший контроль над тем, как контейнерные приложения взаимодействуют друг с другом и другими службами в ваших VPC.

задача-сеть

Таким образом, вам нужно разместить LB, а затем настроить свою службу за LB.

, когда вы создаете целевые группы для этих служб, вы должны выбрать ip в качестве целевого типа, а не экземпляра. Это связано с тем, что задачи, использующие сетевой режим awsvpc, связаны с ENI, а не с экземпляром Amazon EC2.

Так что что-то не так с конфигурацией или отсутствием понимания между сетевым режимом. Я рекомендую прочитать эту статью .

, когда я выполняю docker ps внутри экземпляра, столбец Порты пуст.

Так что, возможно, это такниже, если столбец порта пуст.

Режимы сети host и awsvpc обеспечивают самую высокую производительность сети для контейнеров, поскольку они используют сетевой стек Amazon EC2 вместо виртуализированного сетевого стека, обеспечиваемого режимом моста. В сетевых режимах host и awsvpc открытые порты контейнера отображаются непосредственно на соответствующий порт хоста (для режима сети хоста) или на подключенный порт эластичного сетевого интерфейса (для режима сети awsvpc), поэтому вы не можете использовать преимущества динамического порта хоста. сопоставления.

Имейте в виду следующее:

Доступно с последним вариантом оптимизированного ECS AMI. Это влияет только на создание новых экземпляров контейнера после включения awsvpcTrunking. Он влияет только на задачи, созданные в сетевом режиме awsvpc и типе запуска EC2. Задачи, созданные с помощью типа запуска AWS Fargate, всегда имеют выделенный сетевой интерфейс, независимо от того, сколько вы запускаете. режим

...