Amazon ELB в VPC - PullRequest
       60

Amazon ELB в VPC

68 голосов
/ 13 февраля 2012

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

Спасибо

Ответы [ 4 ]

177 голосов
/ 09 марта 2012

Мой товарищ по команде и я только что внедрили 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.

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

13 голосов
/ 09 января 2016

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

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

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

2 голосов

Необходимо добавить следующие параметры:

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

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

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

Детали ELB:

1.Zone: зона общедоступной подсети c 2. Экземпляр: сервер Web 3.Security Groups: включить порты

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

2 голосов
/ 18 ноября 2014

Мы внедрили 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/.

...