AWS ECS: конечные точки VPC и шлюзы NAT - PullRequest
1 голос
/ 28 апреля 2019

Согласно документации AWS на NAT Gateways , они не могут отправлять трафик через конечные точки VPC , если это не настроено следующим образом:

Шлюз NAT не может отправлять трафик через конечные точки VPC [...].Если ваши экземпляры в частной подсети должны получать доступ к ресурсам через конечную точку VPC [...], используйте таблицу маршрутизации частной подсети для маршрутизации трафика непосредственно на эти устройства.

Следуя этому примеру в документах, я создал следующую конфигурацию для своего приложения ECS:

  1. VPC (vpc-app) с CIDR 172.31.0.0 / 16.
  2. Подсеть приложения (subnet-app) со следующей таблицей маршрутов:
    Destination     |  Target
    ----------------|-----------
    172.31.0.0/16   |   local  
    0.0.0.0/0       |  nat-main
Шлюз NAT (nat-main) в vpc-app в подсети default-1 со следующей таблицей маршрутов:
    Destination     |    Target
    ----------------|--------------
    172.31.0.0/16   |     local  
    0.0.0.0/0       |  igw-xxxxxxxx
Группа безопасности (sg-app) с портом 443, открытым для subnet-app. Конечные точки VPC (тип интерфейса) с vpc-app, subnet-app и sg-app для следующих служб:
    com.amazonaws.eu-west-1.ecr.api  
    com.amazonaws.eu-west-1.ecr.dkr  
    com.amazonaws.eu-west-1.ecs  
    com.amazonaws.eu-west-1.ecs-agent  
    com.amazonaws.eu-west-1.ecs-telemetry  
    com.amazonaws.eu-west-1.s3 (Gateway)

Также важно упомянуть, что я включил Разрешение DNS и Имена хостов DNS для vpc-app, а также ВключитьПараметр «Частное DNS-имя » для VPCE ecr-dkr и ecr-api. Вот два снимка экрана раздела «Сведения»: ecr-dkr и ecr-api .

Я также пытался работать только с Fargate контейнерами, так как они не имеют дополнительного усложнения ECS Agent , и потому что согласно документам:

Задачи, использующие тип запуска Fargate, требуют только com.amazonaws.region.ecr.dkr конечной точки Amazon ECR VPC и конечной точки шлюза Amazon S3, чтобы воспользоваться этой функцией.

Этотакже не работает, и каждый раз, когда запускаются мои Fargate задачи, я вижу всплеск байт вИсточник в nat-main Мониторинг .

Независимо от того, что я пытаюсь, экземпляры EC2 (и задачи Fargate) в subnet-app по-прежнему извлекают изображения, используя nat-main и не обращаясь к локальному адресу службы ECR.

Я перезапустил Агент ECS и проверил все флажки в Конечных точках VPC интерфейса ECS *Руководство 1083 * И конечные точки интерфейса ECR * Руководство 1085 *.

Что мне здесь не хватает?

Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

После многих часов проб и ошибок и при большой помощи со стороны @jogold, недостающий фрагмент был найден в этом сообщении в блоге:

Следующим шагом является создание конечной точки шлюза VPC для S3. Это необходимо, потому что ECR использует S3 для хранения слоев изображения Docker. Когда ваши экземпляры загружают изображения Docker из ECR, они должны получить доступ к ECR, чтобы получить манифест изображения, и S3, чтобы загрузить фактические слои изображения.

После того, как я создал S3 Gateway VPCE, я забыл добавить его адрес в таблицу маршрутизации subnet-app, поэтому, хотя первоначальный запрос к моему ECR URI был сделан с использованием внутреннего адреса, загрузка изображения из S3 все еще продолжалась. использовал NAT Gateway.

После добавления записи использование сети шлюза NAT резко сократилось.

Более подробную информацию о настройке Gateway VPCE можно найти здесь .

1 голос
/ 29 апреля 2019

Интерфейсные конечные точки VPC работают с разрешением DNS, а не с маршрутизацией.

Чтобы ваша конфигурация работала, вам необходимо убедиться, что вы установили Включить частное имя DNS при создании конечной точки,Это позволяет отправлять запросы службе, используя ее имя хоста DNS по умолчанию вместо имен хостов DNS для конечной точки.

enter image description here

Из документации :

Когда вы создаете конечную точку интерфейса, мы генерируем специфичные для конечной точки имена хостов DNS, которые вы можете использовать для связи со службой.Для сервисов AWS и партнерских сервисов AWS Marketplace вы можете дополнительно включить частный DNS для конечной точки.Этот параметр связывает частную размещенную зону с вашим VPC.Размещенная зона содержит набор записей для DNS-имени по умолчанию для службы (например, ec2.us-east-1.amazonaws.com), который преобразуется в частные IP-адреса сетевых интерфейсов конечных точек в вашем VPC.Это позволяет отправлять запросы в службу, используя имя DNS-узла по умолчанию вместо имен DNS-узлов для конечной точки.Например, если ваши существующие приложения отправляют запросы в службу AWS, они могут продолжать отправлять запросы через конечную точку интерфейса, не требуя каких-либо изменений конфигурации.

Альтернативой является обновление приложения для использования вашей конечной точки.для конкретных имен хостов DNS.

Обратите внимание, что для использования личных имен DNS для вашего VPC должно быть включено разрешение DNS и DNS-имен хостов :

enter image description here

Также обратите внимание, что для использования ECR / ECS без шлюза NAT необходимо настроить конечную точку S3 (шлюз, требуется обновление таблицы маршрутов), чтобы позволить экземплярам загружатьслои изображений из лежащих в их основе частных сегментов Amazon S3, на которых они размещены.Подробнее в Настройка AWS PrivateLink для Amazon ECS и Amazon ECR

...