Amazon ELB в VPC

Мы используем Amazon EC2 и хотим поместить ELB (балансировщик нагрузки) в 2 экземпляра в частной подсети. Если мы просто добавим частную подсеть в ELB, она не получит никаких подключений, если мы подключим обе подсети к ELB, тогда она сможет получить доступ к экземплярам, ​​но часто получит тайм-ауты. Кто-нибудь успешно внедрил ELB в частной подсети своего VPC? Если да, не могли бы вы объяснить мне процедуру?

Спасибо

5 ответов

Решение

Мой товарищ по команде и я только что внедрили ELB в VPC с двумя частными подсетями в разных зонах доступности. Причина, по которой вы получаете тайм-ауты, заключается в том, что для каждой подсети, которую вы добавляете в балансировщик нагрузки, он получает один внешний IP-адрес. (попробуйте 'dig elb-dns-name-here', и вы увидите несколько IP-адресов). Если один из этих IP-адресов отображает частную подсеть, он истекает. IP, который отображается в вашей общедоступной подсети, будет работать. Поскольку DNS может дать вам любой из IP-адресов, иногда это работает, иногда это время ожидания.

Немного пообщавшись с amazon, мы обнаружили, что ELB следует размещать только в "общедоступных" подсетях, то есть в подсетях, которые имеют выход к интернет-шлюзу. Мы хотели сохранить наши веб-серверы в наших частных подсетях, но разрешить ELB общаться с ними. Чтобы решить эту проблему, мы должны были обеспечить соответствующую общедоступную подсеть для каждой зоны доступности, в которой у нас были частные подсети. Затем мы добавили в ELB общедоступные подсети для каждой зоны доступности.

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

Вот более или менее то, что мы сделали:

  1. WebServer-1 работает в PrivateSubnet-1 в зоне доступности us-east-1b с группой безопасности, называемой web-сервером.
  2. WebServer-2 работает в PrivateSubnet-2 в зоне доступности us-east-1c с группой безопасности, называемой web-сервером.
  3. Создаем публичную подсеть в зоне us-east-1b, назовем ее PublicSubnet-1. Мы убедились, что мы связали таблицу маршрутизации, которая включает маршрут к интернет-шлюзу (ig-xxxxx) с этой новой подсетью. (Если вы использовали мастер для создания публичного / частного VPC, этот маршрут уже существует.)
  4. Создали общедоступную подсеть в зоне us-east-1c, назовем ее PublicSubnet-2. Мы убедились, что мы связали таблицу маршрутизации, которая включает маршрут к интернет-шлюзу (ig-xxxxx) с этой новой подсетью. (Если вы использовали мастер для создания публичного / частного VPC, этот маршрут уже существует.)
  5. Создал новый ELB, добавив к нему PublicSubnet-1 и PublicSubnet-2 (не PrivateSubnet-X). Также были выбраны экземпляры для запуска в ELB, в данном случае WebServer-1 и WebServer-2. Обязательно назначьте группу безопасности, которая разрешает входящие порты 80 и 443. Давайте вызовем эту группу elb-group.
  6. В группе веб-серверов разрешите трафик с портов 80 и 443 из группы elb.

Надеюсь, это поможет!

Ключевым моментом здесь является понимание того, что вы не "Добавление подсетей / зон доступности" в ELB, а скорее указываете, в какие подсети помещать экземпляры ELB.

Да, ELB является программным балансировщиком нагрузки, и при создании объекта ELB пользовательский экземпляр EC2 с балансировкой нагрузки помещается во все указанные вами подсети. Таким образом, чтобы ELB (его экземпляры) были доступны, их нужно поместить в подсети, маршрут которых по умолчанию настроен через IGW (скорее всего, вы классифицировали эти подсети как общедоступные).

Итак, как уже было сказано выше, вы должны указать "публичные" сети для ELB, и эти сети должны быть из AZ, где работают ваши экземпляры EC2. В этом случае экземпляры ELB смогут получить доступ к вашим экземплярам EC2 (при условии, что группы безопасности настроены правильно)

Мы внедрили ELB в частной подсети, поэтому утверждение о том, что все ELB должны быть публичными, не совсем верно. Вам нужен NAT. Создайте частную подсеть для частного ELB, включите VPC DNS, а затем убедитесь, что таблица частной маршрутизации настроена для прохождения через NAT. Также необходимо настроить группы безопасности подсети, чтобы разрешить трафик между ELB и App, а также между подсетями App to DB.

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

Предлагаемое чтение для начала вашей архитектуры VPC: http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/.

Вы должны добавить следующие настройки.

  1. Зона общедоступной подсети b = NAT сервера
  2. Зона частной подсети c = Сервер Web
  3. Зона общедоступной подсети c = ELB

Хитрость заключается в маршрутизации:

  1. Маршрутизатор к NAT подключен со шлюзом A.
  2. Маршрутизатор к серверу Web подключен к NAT.
  3. Маршрутизатор к публичной подсети подключен с помощью шлюза А.

Детали ELB:

1.Zone: зона общедоступной подсети c 2.Instance: веб-сервер 3. Группы безопасности: включить порты

http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForVPC.html

Добавление диаграммы к ответу Натана. Полный средний пост здесь: https://nav7neeet.medium.com/load-balance-traffic-to-private-ec2-instances-cb07058549fd

Другие вопросы по тегам