Архитектура микро-интерфейса с использованием AWS ECS Fargate - PullRequest
0 голосов
/ 11 февраля 2020

Мы пытаемся реализовать архитектуру микро-интерфейса, используя AWS ECS. На данный момент у нас есть кластер с 1 службой fargate, 1 задача fargate с 2 контейнерами и один ALB. В каждом контейнере размещается микро-интерфейс, использующий NGINX, прослушивающий уникальный порт (например, 3000, 3001 и т. Д. c.), И имеет соответствующую целевую группу с шаблоном пути (например, / containerA * и / containerB *). Целевой группой по умолчанию является первый контейнер.

Каждый микро-интерфейс будет ссылаться на основной сайт с использованием относительного пути и отображаться с помощью iframe (например, <iframe src="/containerB" />).

Обзор:

У нас есть два микро-интерфейса: A и B. A - это основной микро-интерфейс, который отображает всех детей в отдельном фрейме. Все маршруты должны go непосредственно через A, чтобы отобразить дочерний микро-интерфейс. Например:

Проблема:

Мы можем заставить эту архитектуру работать. Однако при http://localhost: 3000 / или http://localhost: 3000 / containerA в iframe для http://localhost: 3000 / containerB отображается 404 не найдено ошибка, которая указывает на проблему маршрутизации в конфигурации NGINX. для B. Если клиент переходит к http://localhost/containerB, возникает та же проблема. Однако содержимое B не отображается в iframe внутри содержимого для A. Содержимое B отображается как его собственная страница.

containerA

/ etc / nginx / conf.d / default.conf.bak:

server {
    listen 3000;

    root /var/www/html;
    index index.html;

    access_log /var/log/nginx/access.log main;
}

containerB

/ etc / nginx / conf.d / default.conf.bak :

server {
    listen 3001;

    root /var/www/html;
    index index.html;

    access_log /var/log/nginx/access.log main;
}

Вопросы:

  1. По вашему мнению, это лучшая инфраструктура для использования с архитектурой микро-интерфейса (например, 1 кластер, 1 шлюз) service, 1 задача fargate с 2-мя микро-интерфейсными контейнерами, каждый со своей целевой группой)?
  2. Как мы можем добиться правильной маршрутизации между контейнерами? Это означает, что http://localhost/containerB отображает содержимое B внутри A, а не B как отдельную страницу.
  3. Какова правильная конфигурация NGINX. использовать для контейнера B, чтобы отображался индекс. html?

Mis c.

  • Используются контейнеры A и B ReactJS.
  • В идеале каждый микро-интерфейс должен быть полностью отделен от контейнера А.
  • Каждый микро-интерфейс должен иметь возможность использовать свою собственную предпочитаемую библиотеку (например, ReactJS, Vue , AngularJS, обычный HTML и JS, et c.).
...