AWS Контейнерные сети ECS, связь между сервисами и внутри контейнеров - PullRequest
0 голосов
/ 01 мая 2020

У меня возникают проблемы с пониманием смысла AWS реализации обнаружения служб в ECS при использовании режима моста и в целом пути к (относительно базовым c) контейнерным сетям, несмотря на многочисленные AWS сообщения в блоге по этому вопросу.

Обнаружение службы, как мне кажется, связано с решением динамически генерируемой доступности контейнеров (в задачах), поэтому, подобно docker пользовательским сетям, я могу получить доступ к различным задачам в кластере с предопределенным каноническим именем хоста. Name -space в VP C.
Я убедился в VP C, что:

DNS hostnames: Enabled
DNS resolution: Enabled

Когда определение службы определено при использовании режима моста:

  1. он все еще привязывается к динамической c части имени, которое я не указал.
      {
           "Name": "my-service.my-namespace.",
            "Type": "SRV",
            "SetIdentifier": "4b46cb82ba434dasdb163c1f06ca5c083",
            "MultiValueAnswer": true,
            "TTL": 60,
            "ResourceRecords": [
                {
                    "Value": "1 1 27017 4b46cb82ba434dasdb163c1f06ca5c083.my-service.my-namespace."
                }
            ],
            "HealthCheckId": "862bd287-2b41-43ac-8442-a3d27042482b"
        },

Поэтому мне нужно вручную просматривать записи каждый раз, когда служба создается или обновляется. Я не могу dig my-service.my-namespace например, эта запись не существует.

И:
2. Каждый раз, когда сервис обновляется, запись восстанавливается ...

Чтобы попасть сюда, мне нужно сделать:

$ aws servicediscovery list-namespaces
$ aws route53 list-resource-record-sets --hosted-zone-id $ZONE_ID --region us-east-1

Мое приложение в настоящее время обращается к хостам задач через внедренные переменные среды, но если запись обновляется при каждом обновлении службы, это не запуск. Кажется, что вся документация / форумы, с которыми я сталкивался, создают какой-то динамический обходной путь поиска 1054 * SRV (кажется, hacki sh?) Или просто переключаются в режим awsvp c, но тогда почему эта служба доступна в все под мостом / хостом?
Очевидно, я упускаю что-то фундаментальное.

Кроме того, я использую динамическое отображение портов c. Если я этого не сделаю, произойдет сбой обновления, когда порт уже используется ошибки. Аналогичным образом, попытка запустить новый экземпляр задачи с помощью планирования создает ту же ошибку.

Я могу подключиться в заданном docker контейнере в задаче с внутренним частным DNS экземпляра, т.е. ip-172-31-52-141.ec2.internal, но здесь я за пределами VP C (?), т.е. теперь мне нужно указать динамически отображаемый порт. Так что это тоже не стартер.

Все это находится за опубликованным c ALB (для динамического c разрешения порта и т.д. c), и это работает нормально, запросы извне AWS правильно разрешаются для целевых групп / целевые услуги.

Если я переключусь в режим awsvp c и включу обнаружение служб, у меня может быть несколько задач / служб, работающих в частном порядке.
Однако что если я хочу, чтобы несколько служб взаимодействовали, но дополнительно с одной службой / task может содержать несколько docker контейнеров (например, локализованный кэш Redis). Я не могу указать «ссылку» для этих контейнеров, если сетевой режим снова не будет «мостом».

вот вопрос TLDR:

У меня есть 2 задачи и служба, связанная с каждой задачей. У каждой задачи может быть несколько экземпляров, поэтому порты должны быть динамическими c. В каждой задаче у меня есть 2 контейнера.
Каков общий подход, позволяющий различным службам взаимодействовать через предопределенное разрешение dns host.namespace, и контейнеры внутри каждой задачи связываются друг с другом?

Извиняюсь за длинный пост, но как новичок в ECS / AWS, я действительно борюсь здесь;)
Любые отзывы или советы действительно приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...