Amazon ELB для инстансов EC2 в частной подсети в VPC

Я использую Amazon EC2 и хочу разместить ELB (балансировщик нагрузки) с выходом в Интернет на 2 экземпляра в частной подсети. Я использую VPC с общедоступными и частными подсетями.

  • Если я просто добавлю частную подсеть в ELB, она не получит никаких подключений.
  • Если я присоединю обе подсети к ELB, он сможет получить доступ к экземплярам, ​​но часто будет иметь тайм-аут. (См. снимок экрана 1)
  • Если я подключаюсь только к общедоступной подсети, то мой экземпляр, подключенный к ELB, получает OutOfService, потому что у меня нет экземпляра в общедоступной подсети, счетчик экземпляров показывает 0. (См. Снимок экрана 2)

Снимок экрана 1: Обе подсети подключены Обе подсети подключены

Снимок экрана 2: Присоединена только общедоступная подсеть Подключена только общедоступная подсеть

Мой вопрос на самом деле является расширением этого вопроса. После выполнения всех 6 шагов, упомянутых в принятом ответе, меня все еще поражают, мой экземпляр, подключенный к ELB, получает OutOfService. Я даже пытался разрешить порты в группах безопасности для экземпляров EC2 и ELB, но это не помогло.

Пожалуйста, помогите, я ломаю себе голову этим.


person manish_s    schedule 20.03.2014    source источник


Ответы (2)


Другой вопрос SO, на который вы ссылались, - это точно. Дважды / трижды проверьте следующее

  • Вам необходимо присоединить к вашей ELB только общедоступные подсети, убедившись, что зоны доступности этих подсетей совпадают с зонами доступности частных подсетей, в которых находятся ваши экземпляры.
  • Убедитесь, что группа безопасности ваших экземпляров разрешает доступ из группы безопасности вашего балансировщика нагрузки.
  • В группе безопасности балансировщика нагрузки должно быть правило выхода, позволяющее проверке работоспособности достигать экземпляра.
  • Убедитесь, что ваша проверка работоспособности работает локально на экземпляре. Например, если ваша проверка работоспособности в ELB равна HTTP:8080/health_check, на экземпляре вы можете curl x.x.x.x:8080/health_check (где x.x.x.x - частный IP-адрес экземпляра) и получить код ответа 200.
  • Таблица маршрутизации общедоступной подсети должна направлять 0.0.0.0/0 на интернет-шлюз, подключенный к вашему VPC.
  • Таблица маршрутизации частной подсети должна направлять 0.0.0.0/0 к экземпляру NAT или шлюзу в общедоступной подсети.
person Ben Whaley    schedule 20.03.2014
comment
Привет, Бен, спасибо за ответ. Я трижды проверил все пункты, о которых вы упомянули, и, похоже, все они на месте. К вопросу я приложил несколько скриншотов, не могли бы вы их проверить. Когда я присоединяю к ELB только общедоступные подсети, количество экземпляров равно 0, а статус - OutOfService. Если я подключу обе подсети, проверка работоспособности работает нормально, но ELB часто дает таймауты при подключении. (Здесь на скриншотах я добавляю в ELB только один экземпляр). - person manish_s; 20.03.2014
comment
На снимке экрана 1 я заметил, что исправный экземпляр находится в АЗ ap-southeast-1b. Убедитесь, что публичная подсеть для вашего ELB находится в той же зоне. Например. публичная подсеть для ELB находится в ap-southeast-1b, а частная подсеть, например, находится в ap-southeast-1b. Если зоны не совпадают, работать не будет. - person Ben Whaley; 20.03.2014
comment
@BenWhaley прав. Чтобы немного расширить это: ваш ELB должен находиться только в общедоступных подсетях и только в подсетях в той же зоне (ах) доступности, что и ваш экземпляр (ы). - person Michael - sqlbot; 21.03.2014
comment
Спасибо Бену и Майклу, миллион раз! Мои общедоступные и частные подсети находились в разных зонах доступности. Вот в чем проблема. - person manish_s; 21.03.2014
comment
Так разве настройка CrossZone на ELB не позволяет ELB и экземплярам находиться в разных зонах доступности? На самом деле это не работает для меня. В любом случае, это не серьезная проблема, я просто обеспечу выравнивание по А-Я. - person d11wtq; 09.04.2015
comment
Cross Zone гарантирует, что интерфейс балансировщика нагрузки в одной зоне будет отправлять трафик экземплярам в других зонах доступности. Документы - person Ben Whaley; 09.04.2015
comment
Очень полезно. Спасибо за это - person jmcollin92; 07.10.2015
comment
Причина этого требования заключается в том, что AWS помещает узел ELB в каждую подсеть, связанную с ELB. Сетевые интерфейсы этих узлов имеют общедоступные IP-адреса и должны иметь возможность общаться с Интернетом и, следовательно, должны находиться в подсети с маршрутом IGW. - person seanmcl; 23.05.2016
comment
Если трафик идет от ELB к экземплярам EC2, возвращается ли ответ от экземпляров EC2 к ELB? Если это так, это означает, что ELB затем пересылает ответ обратно клиенту. Если это правда, то вместо того, чтобы использовать экземпляр NAT или шлюз, не могли бы мы просто разрешить входящий доступ HTTP / HTTPS для нашей частной группы безопасности экземпляров EC2 из группы безопасности, в которой находится ELB, а об остальном позаботимся ? - person havak5; 29.03.2017
comment
Да, если вам не нужен другой исходящий доступ из ваших частных экземпляров, вам не нужен NAT. - person Ben Whaley; 30.03.2017
comment
Я нашел этот официальный источник довольно точным, но этот вопрос помог мне доказать моей команде DevOps, что их установка вызывает у нас проблемы в нашей среде контроля качества, так что спасибо! aws.amazon.com/premiumsupport/knowledge-center / - person Brett Green; 16.10.2017
comment
Что вы имеете в виду, говоря, что зоны должны выравниваться? - person A. Kutluozen; 29.11.2017
comment
Я имею в виду, что если у вас есть экземпляры в зонах A и B, убедитесь, что ваш балансировщик нагрузки присутствует в подсетях в зонах A и B. Если он находится только в зоне C, ничего не будет работать. - person Ben Whaley; 30.11.2017
comment
Еще одна вещь, которую нужно проверить: группа безопасности балансировщика нагрузки должна иметь правило выхода, позволяющее проверке работоспособности достигать экземпляра. - person dancl; 06.01.2020
comment
@BenWhaley Будет ли балансировщик нагрузки не работать, если балансировщик нагрузки подключен к частным подсетям? - person Raphael Titus; 20.08.2020
comment
Эта ссылка может быть полезной: общедоступный балансировщик нагрузки для частной подсети ec2 aws.amazon.com/premiumsupport/knowledge-center/ - person smile; 29.10.2020

Другой вопрос SO мне тоже помог. Что касается меня, я все время забывал, что мне нужно установить программное обеспечение на сервер (например, Apache), и если вы не создадите NAT GW или какой-либо другой метод, позволяющий устанавливать программное обеспечение, он потерпит неудачу. Если вы хотите попробовать автоматическую моду без лишних хлопот, вы можете попробовать сценарий:

https://github.com/jouellnyc/AWS/tree/master/create_aws_vpc3

Обратите внимание, что уже есть много хороших документов и обсуждений, но:

HTTP-коды, которые я получил от ELB:

  • 504 - Вероятно, группы безопасности - разрешить доступ к порту 80 экземпляров
  • 503 - Вероятно, неправильная настройка целевой группы
  • 502 - Вероятно, Apache / Server не работает. Он не установлен, потому что нет nat gw или метода для установки программного обеспечения.
person jouell    schedule 20.12.2018