Можно ли запустить несколько веб-экземпляров в одном AWS EC2? - PullRequest
0 голосов
/ 14 февраля 2020

Справочная информация

Я следовал этому руководству https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-ec2.html, составил файл docker compose, создал веб-сайт A (составьте из 4 контейнеров) вверх и запустите обслуживание 1 моего клиента.

Однако теперь у меня есть другой клиент, которому нужно разместить другой веб-сайт B, используя стратегии, аналогичные описанным выше.

Вот текущая работающая служба ECS / EC2 enter image description here

, и вот здесь запущены и работают контейнеры, которые теперь обслуживают веб-сайт A enter image description here

Вопросы и проблемы

  1. Веб-сайт A теперь расположен как 1 из службы в EC2 под моим единственным кластером, могу ли я использовать тот же экземпляр EC2 и веб-сайт B (как другая служба EC2)?
  2. Если это так, как управляются порты / входящий / исходящий трафик c? Теперь веб-сайт A уже занимает порты 80, 443, 27017 и 3002 экземпляра EC2 для входящего трафика c, если контейнеры веб-сайта B также работают в тех же экземплярах EC2, могу ли я по-прежнему использовать порты 80, 443, 27017 и 3002 для веб-сайта Б. Я прочитал документы ALB (Amazon Load Balancer), кажется, он может выполнить требование, я на правильном пути?
  3. И имя домена, по маршруту 53, я зарегистрировал домен www.websiteA.com для обслуживания 1-го веб-сайта, я также зарегистрировал еще одну www.websiteB.com, готовящуюся к обслуживанию веб-сайта B, в моем случае, мне кажется, мне нужно настроить новый домен B, указывающий на тот же IP-адрес EC2?
  4. Во время мое развертывание веб-сайта B, я не хочу влиять на доступность веб-сайта A, можно ли его поддерживать в процессе развертывания контейнеров веб-сайта B?

Я хочу очистить все концепции перед начало развертывания веб-сайта B, спасибо за любую помощь, спасибо

Последующие действия

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

Сначала я смотрю на балансировщик нагрузки enter image description here

И настроен следующим образом enter image description here enter image description here enter image description here enter image description here

Я устанавливаю балансировщик нагрузки, который прослушивает запросы, используя Протокол HTTP с входящим портом 80, когда есть доступ пользователей к веб-серверу (т. Е. К контейнеру внешнего интерфейса), слушатель перенаправляет этот запрос целевой группе (т. Е. Http-port-80-access)

enter image description here А вот целевая группа (http-port-80-access), которая содержит зарегистрированную цель (в настоящее время мой экземпляр ec2, выполняющий контейнеры), порт хоста контейнера - 32849, который, в свою очередь, сделал используется связанным балансировщиком нагрузки (web-access-load-балансировщик) для динамического c сопоставления портов.

enter image description here Я также настроил еще 1 правило поверх значения по умолчанию правило, когда пользователь получает доступ к URL-адресу сайта A, баланс нагрузки ancer перенаправит запрос целевой группе (http-port-80-access).

Все настроено, и проверка работоспособности также пройдена. Затем я использовал следующую команду ecs-cli compose service up, чтобы подключить балансировщик нагрузки к службе

ecs-cli compose --file ./docker-compose-aws-prod.yml --cluster my-ecs-cluster-name --ecs-profile my-ecs-profile --cluster-config my-cluster --project-name my-project --ecs-params ./ecs-params.yml service up --target-group-arn arn:aws:elasticloadbalancing:us-east-2:xxxxxxxxx:targetgroup/http-port-80-access/xxxxxxxx --container-name frontend --container-port 80

, где frontend - это имя службы контейнера внешнего интерфейса веб-сайта A

Однако получим когда я получаю доступ к www.websiteA.com через браузер, ничего кроме ERR_CONNECTION_REFUSED, доступ к www.websiteA.com: 32849 сделал доступным, но это не то, что я хотел.

Мне интересно, какую часть я настроил неправильно

Ответы [ 3 ]

1 голос
/ 15 февраля 2020

Если вы отправляете трафик c непосредственно в экземпляр, вам придется разместить его на другом порту. Вы должны рассмотреть возможность использования ALB, который позволил бы вам использовать dynamici c порты в ECS . ALB может принимать трафик c от портов 80 и 443 для разных доменов и направлять трафик c в разные контейнеры на основе таких вещей, как домен.

1 голос
/ 15 февраля 2020

Веб-сайт A теперь расположен как 1 из службы в EC2 под моим единственным кластером, могу ли я использовать тот же экземпляр EC2 и запустить веб-сайт B (в качестве другой службы EC2)?

Действительно. Однако - как вы уже узнали, вы должны разделить трафик c на основе чего-либо (имя хоста, путь, ..). Вот где в игру вступает обратный прокси (управляемый - ALB, NLB или ваш собственный - nginx, haproxy, ..).

Это просто для http traffi c (на основе хоста)

Если так, как управляется порты / входящий / исходящий трафик c? Теперь веб-сайт A уже занимает порты 80, 443, 27017 и 3002 экземпляра EC2 для входящего трафика c, если контейнеры веб-сайта B также работают в тех же экземплярах EC2, могу ли я по-прежнему использовать порты 80, 443, 27017 и 3002 для веб-сайта B.

при условии, что порты 27017 и 3002 используют собственный двоичный протокол (не http). Вам придется справиться с этим.

Теоретически можно определить сопоставление портов (сопоставить разные публичные c прослушивающие порты с этими настраиваемыми портами), но затем вам нужно либо использовать NLB (балансировщик сетевой нагрузки), либо открыть порты на хостах publi c IP. В последнем случае я не уверен, что с ECS вы можете гарантировать, какой IP используется (например, с несколькими рабочими узлами)

Я прочитал документы ALB (Amazon Load Balancer), кажется, это может выполнить требование, я на правильном пути?

ALB - обратный прокси-сервер уровня 7 (http), это imho лучший вариант для веб-доступа, а не для двоичных протоколов.

, мне нужно настроить новый домен B, указывая на тот же IP-адрес EC2?

это план

Во время моего развертывание веб-сайта B, я не хочу влиять на доступность веб-сайта A, можно ли его поддерживать в процессе развертывания контейнеров веб-сайта B?

не должно быть проблемой

0 голосов
/ 14 февраля 2020

Запустить веб-сайт B на разных портах. Чтобы позволить конечным пользователям взаимодействовать с веб-сайтом B без указания номеров портов, используйте обратный прокси-сервер. См. AWS CloudFront.

...