Зарегистрируйте экземпляр EC2 в кластере ECS без общедоступного IP-адреса

Мне сложно добавлять экземпляры, созданные в моем VPC и в частной подсети (к нему не подключен интернет-шлюз), в кластер ECS.

Прямо сейчас единственный способ, которым мне удалось это сделать, - это добавить общедоступный IP-адрес и настроить экземпляр / шлюз NAT.

Как использовать кластеры ECS с частными подсетями?


person Ionut    schedule 26.07.2016    source источник


Ответы (7)


Думаю, я нашел ответ в документации AWS, и мне кажется, что мне нужно использовать экземпляр NAT / шлюз :(

Другой источник, а также официальная документация

"... Экземплярам контейнеров необходим внешний сетевой доступ для связи с конечной точкой сервиса Amazon ECS, поэтому, если ваши экземпляры контейнера работают в частном VPC, им нужен экземпляр преобразования сетевых адресов (NAT) для обеспечения такого доступа. Для получения дополнительной информации см. см. Экземпляры NAT в Руководстве пользователя Amazon VPC ".

person Ionut    schedule 29.07.2016
comment
У меня была точно такая же проблема, и я полностью проигнорировал тот факт, что это мог быть общедоступный IP-адрес, потому что в Документы AWS, в step 8 говорится, что добавление общедоступного IP-адреса необязательно .... но затем ничего не говорится о последствиях, которые это имеет ....: sigh: Спасибо за ваша помощь здесь, ребята. - person gsaslis; 07.09.2016
comment
ОБНОВЛЕНИЕ: после того, как возникла проблема с Amazon, они очень быстро отреагировали и обновили step 8 свои docs, чтобы отразить это: Note:Container instances need external network access to communicate with the Amazon ECS service endpoint, so if your container instances do not have public IP addresses, then they must use network address translation (NAT) or an HTTP proxy to provide this access. For more information, see NAT Instances in the Amazon VPC User Guide and HTTP Proxy Configuration in this guide - person gsaslis; 24.10.2016

PrivateLinks теперь доступен как для ECS, так и для ECR

С помощью PrivateLinks вы можете зарегистрировать и использовать свой экземпляр EC2 и кластер Fargate в ECS без общедоступного IP-адреса, а также получить доступ к изображениям из ECR.

Требуется конечная точка:

Для ECS:

EC2 Тип запуска:

com.amazonaws.region.ecs-agent
com.amazonaws.region.ecs-telemetry
com.amazonaws.region.ecs

Тип запуска Fargate:

Просто нужны конечные точки ECR и cloudwatch (упомянутые ниже)

Для ECR:

EC2 Тип запуска:

com.amazonaws.region.ecr.dkr
com.amazonaws.region.ecr.api
com.amazonaws.region.s3 (S3 gateway endpoint)

Тип запуска Fargate:

com.amazonaws.region.ecr.dkr 
com.amazonaws.region.s3 (S3 gateway endpoint)

Кроме того, если вы используете драйвер awslogs, вы должны добавить конечную точку Cloudwatch. com.amazonaws.Region.logs.

person Mangal    schedule 27.01.2019

Для регистрации вашего экземпляра на ECS вам потребуется внешнее подключение от экземпляров.

NAT необходим для исходящих соединений от экземпляров в частной подсети, но общедоступный IP не нужен.

ECS запускает контейнер на каждом из ваших серверов, которому необходимо подключиться к службе для управления состоянием, и для этого вашим экземплярам в вашей частной подсети необходимо подключение к внешнему миру через NAT.

person Shibashis    schedule 26.07.2016

Теперь доступна конечная точка VPC для ECS. Официально это еще не объявлено (в состоянии «Скоро появится» в дорожной карте общедоступных контейнеров AWS).

Это будет стоить минимум около 22$/month (Стоимость PrivateLink для 3 зон доступности в us-east, без затрат на трафик ), если они не утверждают иначе.

person Dominik    schedule 02.01.2019

Симптом

Я создал кластер Amazon Elastic Container Service (Amazon ECS) в частной подсети через консоль Amazon ECS с помощью мастера создания кластера. Однако мои экземпляры контейнера не зарегистрированы в кластере ECS. Как я могу решить эту проблему?

необычное поведение, которое я наблюдал при запуске кластера ECS в частной подсети через консоль ECS. Экземпляр, запущенный в этом кластере, по-прежнему имел общедоступный IP-адрес, а не находился в частной подсети.


Причина

Если вы создали кластер с помощью консоли Amazon ECS с помощью мастера создания кластера в частной подсети, ваши экземпляры контейнера запускаются с общедоступным IP-адресом. В результате экземпляры контейнера не могут зарегистрироваться в кластере ECS, поскольку они не могут взаимодействовать с конечной точкой ECS.

при запуске кластера ECS создается стек CloudFormation для создания AutoScaling Group и AutoScaling LaunchConfiguration, для которого по умолчанию задано следующее свойство: associatePublicIpAddress. Это заставляет ваш экземпляр связать общедоступный IP-адрес при запуске.

Чтобы перенастроить среду для запуска экземпляров контейнера без общедоступного IP-адреса, выполните следующие действия.


Решения

Это можно сделать двумя способами:

1. Создайте пустой кластер с помощью консоли ECS, а затем вручную создайте группу автоматического масштабирования и конфигурацию запуска для подключения к пустому кластеру. Но некоторым людям (вроде меня!) Это может показаться долгим подходом к созданию кластера. Не беспокойтесь, есть более простой способ сделать то же самое с использованием нескольких команд. Вот второй вариант:

2. Используйте команду ecs-cli для создания кластера, который предоставляет параметр —no-associate-public-ip-address с командой ecs-cli up. Если вы раньше не использовали ecs-cli, вы можете посмотреть, выполнив три простых шага:

1. Open the AWS CloudFormation console.
2. In the Stack Name column, select the stack that includes the cluster that you previously created.
3. Choose the Template tab.
4. Copy the template, and then paste it into a code editor.
5. In the AWS::AutoScaling::LaunchConfiguration section of the template, change the AssociatePublicIpAddress property to false.

...
6. На странице "Настройка сведений об экземпляре" выполните следующие действия:
...
e. Установите поле Автоматически назначать общедоступный IP-адрес в зависимости от того, хотите ли вы, чтобы ваш экземпляр был доступен из общедоступного Интернета. Если ваш экземпляр должен быть доступен из Интернета, убедитесь, что в поле Автоматическое назначение общедоступного IP-адреса установлено значение «Включить». Если нет, установите для этого поля значение Отключить.

Конечные точки VPC

Не забудьте создать конечные точки VPC для ECR, S3, ECS и Cloudwatch for ECS task awslogs log-driver (если вы его используете).

По возможности избегайте NAT

NAT может стоить вам очень дорого, просто имея их без использования, поскольку AWS взимает плату за час плюс за использование гигабайта. Если по одной в каждой зоне доступности для обеспечения высокой доступности, это будет стоить несколько раз.

person mon    schedule 22.02.2020

На этот вопрос сложно ответить. ECS просто запускает экземпляры Ec2 в вашей конфигурации. Если вы запустите их в подсети без общедоступных IP-адресов, у них их не будет. У вас должна быть инфраструктура для доступа к ним, такая как NAT, VPN и т. Д. Для кластеров ECS нет специальной конфигурации. Если вы можете подключиться к своим экземплярам EC2, вы сможете подключиться к экземплярам ECS.

person Marc Young    schedule 27.07.2016
comment
Привет, я могу подключиться к экземплярам ec2 (даже если они находятся в частной подсети, поскольку я использую прямое подключение), но проблема в том, что без общедоступного IP-адреса экземпляр не регистрируется в кластере ECS ... - person Ionut; 28.07.2016
comment
Это неправильно, у вас неправильная конфигурация. Мы используем частные экземпляры ECS. ECS не заботится о том, является ли ваш экземпляр общедоступным или частным, если агент ecs, запущенный на докере в виртуальной машине, может попасть в реестр ECS. - person Marc Young; 28.07.2016
comment
@MarcYoung Если вы запустите их в подсети без общедоступных IP-адресов, у них их не будет. -это утверждение не совсем верно - если вы запустите экземпляр при создании кластера, он получит публичный IP-адрес независимо от настроек подсети. - person fg78nc; 30.08.2019

Я также пытался заблокировать публичные запросы к экземплярам ECS, развернув кластер в частной подсети, и позже обнаружил, что мне нужен NAT-сервер / шлюз, который стоит около 1 доллара в день.

Если вы просто хотите заблокировать изворотливые запросы на сниффинг к своим экземплярам ECS, вы можете обновить группу безопасности для своих экземпляров ECS, сохранив их в общедоступной подсети. Это сэкономит вам 30 долларов в день.

person David Lin    schedule 07.08.2017