Как выполнить внешний вызов api вне контейнера при развертывании ECS Fargate

#amazon-web-services #docker #terraform #amazon-ecs #aws-fargate

#amazon-web-services #docker #terraform #amazon-ecs #aws-fargate

Вопрос:

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

У меня есть четыре контейнера API spring boot, созданные с помощью Gradle, отправленные в ECR и развернутые в ECS Fargate с помощью Terraform IaC, настраивающего соответствующие ресурсы. В трех из этих контейнерных API-интерфейсов установлены переменные среды, которые ссылаются на четвертый контейнер, таким образом вызывая внешний API вне контейнера для этой службы. Для этих развертываний настроены DNS и балансировщик нагрузки 443.

Я создал новую службу в кластере, содержащую API, который необходимо обнаружить. Я включил обнаружение служб и создал локальную запись CloudMap A для API, а затем установил для каждой переменной среды в других контейнерах использовать этот локальный URL-адрес записи, например, ecsservicename.local. Кроме того, я попытался найти службу, к которой я подключаюсь, в других API, и которая возвращает IP, поэтому я уверен, что это работает.

Мои вопросы заключаются в следующем:

(1) Поскольку на самом деле другие должны получать доступ только к одной службе, правильно ли было установить обнаружение службы для этого одного API, а не для других, или мне следует настроить обнаружение службы для всех других API?

(2) Даже если настроен route53, должна ли это быть запись A или SRV? Меня смутила документация о том, когда использовать что на aws.

(3) Есть ли лучший или более простой подход для взаимодействия между контейнерами, который мне не хватает?

Комментарии:

1. Как все прошло? Все еще неясны ваши вопросы?

2. Да, это, похоже, сработало. Мне нужно было только установить обнаружение службы в этом одном API, а затем ссылаться на это имя службы в переменных контейнера других API. Тем не менее, я изначально настроил это с помощью балансировщика нагрузки 443, который также имеет установленную аутентификацию и сертификаты, так что это было немного сложно. Пришлось выполнить дополнительную настройку, чтобы я не столкнулся с брандмауэром, но это работает.

3. Пытался проголосовать, но мне сказали, что мне нужно 15 очков репутации, поэтому я думаю, что моей учетной записи нужно еще несколько очков 🙂

4. Я согласился. В моем контексте программирования по соображениям безопасности мы должны запрашивать разрешения для новых имен хостов и не можем создавать поддомены по желанию. Однако, помимо включения обнаружения служб, самый простой способ сделать контейнер доступным извне — создать для него имя хоста.

Ответ №1:

  1. Это правильно. Обнаружение должно быть установлено только для одной службы. Другие открытия не требуются, поскольку вы не подключены к этим другим службам.
  2. SRV также предоставляет порт, поэтому из документов:

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

  1. Я думаю, что ваша архитектура хорошо продумана и не может придумать ничего «проще» или лучше.