Зарегистрировать экземпляр EC2 в кластере ECS без публичного ip
Я испытываю трудности с добавлением экземпляров, созданных в моем VPC и в частной подсети (к ней не подключен интернет-шлюз), в кластер ECS.
Прямо сейчас единственным способом, которым мне удалось это сделать, было добавление общедоступного IP-адреса и настройка экземпляра / шлюза NAT.
Как вы используете кластеры ECS с частными подсетями?
4 ответа
Я думаю, я нашел ответ в документации AWS, и мне кажется, что мне нужно использовать экземпляр / шлюз NAT:(
Другой источник, а также официальная документация
"... Экземплярам контейнера необходим внешний доступ к сети для связи с конечной точкой сервиса Amazon ECS, поэтому, если ваши экземпляры контейнера работают в частном VPC, им необходим экземпляр преобразования сетевых адресов (NAT) для предоставления этого доступа. Для получения дополнительной информации, см. Экземпляры NAT в Руководстве пользователя Amazon VPC."
Теперь доступно как для ECS, так и для ECR
Симптом
Я создал кластер 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 (если вы его используете).
- Настройка AWS PrivateLink для Amazon ECS и Amazon ECR
- Конечные точки VPC интерфейса Amazon ECR (AWS PrivateLink)
- Конечные точки VPC интерфейса Amazon ECS (AWS PrivateLink)
По возможности избегайте NAT
NAT может стоить вам очень дорого, просто имея их без использования, поскольку AWS взимает плату за час плюс за использование ГБ. Если по одной в каждой зоне доступности для обеспечения высокой доступности, это будет стоить несколько раз.
Для регистрации вашего экземпляра в ECS вам необходимо внешнее соединение с экземплярами.
NAT необходим для исходящих соединений от экземпляров в частной подсети, но Public IP не требуется.
ECS запускает контейнер на каждом из ваших серверов, который должен подключаться к службе для управления состоянием, и для этого вашим экземплярам в вашей частной подсети требуется подключение к внешнему миру через NAT.
Теперь доступна конечная точка VPC для ECS. Официально пока не объявлено (в состоянии "Скоро появится" в общедоступной дорожной карте контейнеров AWS).
Это будет стоить минимум около 22$/month
( PrivateLink стоит 3 зоны доступности в us-east
, без учета транспортных расходов), если они не заявят иначе.
На этот вопрос сложно ответить. ECS буквально запускает экземпляры Ec2 для вашей конфигурации. Если вы запускаете их в подсети без публичных IP-адресов, они не будут иметь их. Для доступа к ним необходима инфраструктура, такая как NAT, VPN и т. Д. Специальной конфигурации для кластеров ECS не существует. Если вы можете связаться с вашими экземплярами EC2, вы сможете получить доступ к экземплярам ECS.
Я также пытался заблокировать публичные запросы к экземплярам ECS, развернув кластер в частной подсети, и позже обнаружил, что мне нужен сервер / шлюз NAT, который стоит около 1 доллара в день.
Если вы просто хотите заблокировать изворотливые запросы сниффинга для своих экземпляров ECS, вы можете обновить группу безопасности для своих экземпляров ECS, оставив их в общедоступной подсети. Это сэкономит вам 30 долларов в день.