#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:
- Это правильно. Обнаружение должно быть установлено только для одной службы. Другие открытия не требуются, поскольку вы не подключены к этим другим службам.
- SRV также предоставляет порт, поэтому из документов:
если определение задачи, указанное в вашей служебной задаче, использует сетевой режим моста или хоста, запись SRV является единственным поддерживаемым типом записи DNS.
- Я думаю, что ваша архитектура хорошо продумана и не может придумать ничего «проще» или лучше.