Доступ к экземплярам AWS EC2 через ELB - PullRequest
11 голосов
/ 24 февраля 2012

Я пытаюсь настроить два экземпляра под эластичным балансировщиком нагрузки, но не могу понять, как я должен получить доступ к экземплярам через балансировщик нагрузки.

Я настроил экземпляры сгруппа безопасности, позволяющая получить доступ из любого места к определенным портам.Я могу получить доступ к экземплярам напрямую, используя их имя хоста "Public DNS" (publicdns) и порт PORT:

http://[publicdns]:PORT/

Балансировщик нагрузки содержит два экземпляра, и они оба "В работе" ион перенаправляет порт (PORT) на тот же порт в экземплярах.

Однако, если я запрашиваю

http://[dnsname]:PORT (где dnsname - это запись A, указанная для ELB)

он не подключается к экземпляру (время ожидания истекло).

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

Я уверен, что есть что-то простое и глупое, что я забыл, не понял или сделал неправильно: P

Приветствия, Свенд.


Добавлена ​​дополнительная информация:

Конфигурация порта для балансировщика нагрузки выглядит следующим образом (фактически 3 порта):

10060 (HTTP), переадресация на 10060 (HTTP)) Stickiness: отключено (редактировать)

10061 (HTTP) переадресация на 10061 (HTTP) Stickiness: отключено (редактировать)

10062 (HTTP) пересылка на 10062 (HTTP) Stickiness: отключено (редактировать))

И он использует стандартную / стандартную группу безопасности elb (amazon-elb-sg).

Экземпляры имеют две группы безопасности.Один внешний вид выглядит следующим образом:

22 (SSH) 0.0.0.0/0
10060 - 10061 0.0.0.0/0
10062 0.0.0.0/0

и один внутренний, позволяющий всем внутренним группам взаимодействовать по всем портам:

0 - 65535 sg-xxxxxxxx (идентификатор группы безопасности)

Не уверен, что это имеет какое-либо значение, но экземплярыm1.small типы изображений ami-31814f58.


Что-то, что может иметь отношение:

Мой тест работоспособности имел обыкновение быть HTTP: PORT /, но балансировщик нагрузки продолжал говорить, что экземплярыбыли «Не работают», хотя я, кажется, получил запрос 200 на этот порт.

Затем я изменил его на TCP: PORT, а затем изменил, сказав, что они «В работе».

Есть ли что-то очень конкретное, что должно быть возвращено для HTTP, или это просто ответ HTTP 200, который требуется?... и говорит ли тот факт, что он не работал, к тому, почему сама балансировка нагрузки не работает?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

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

В качестве примечания, когда я настраиваю свои балансировщики нагрузки, я обычно не люблю открывать свои экземпляры на любом порту для широкой публики.Я разрешаю только loadbalancer делать запросы к этим экземплярам.В прошлом я заметил, что многие люди отправляют вредоносные запросы на IP-адрес экземпляра, пытаясь найти брешь в безопасности.Я даже видел людей, пытающихся принудительно войти в систему на моих машинах с Windows ....

Чтобы создать правило безопасности только для балансировщиков нагрузки, выполните следующие команды и удалите любые другие правила, которые есть в группе безопасности.для порта используется балансировщик нагрузки.Если вы не используете командную строку для запуска этих команд, просто дайте мне знать, какой интерфейс вы пытаетесь использовать, и я могу попытаться найти пример, который будет работать для вас.

elb-create-lb-listeners <load-balancer> --listener "protocol=http, lb-port=<port>, instance-port=<port>"
ec2-authorize <security-group>  -o amazon-elb-sg -u amazon-elb

Вернуться к вашему вопросу.Как я уже сказал, шаги, которые вы объяснили, верны, достаточно открыть порт на экземпляре и перенаправить порт на экземпляр.Возможно, вам нужно опубликовать полную конфигурацию группы безопасности вашего экземпляра и балансировщика нагрузки, чтобы я мог видеть, что-то еще влияет на вашу ситуацию.

1 голос
/ 24 февраля 2012

Я пошел дальше и создал скрипт, который будет воспроизводить те же самые точные шаги, которые я использую. Это предполагает, что вы используете Linux в качестве операционной системы и что инструменты AWS CLI уже установлены. Если у вас еще нет этой настройки, я рекомендую запустить новый микро-экземпляр Amazon Linux и запустить скрипт оттуда, так как у них уже все установлено.

  1. Загрузите файлы сертификатов X.509 с сайта amazon https://aws -portal.amazon.com / gp / aws / securityCredentials

  2. Скопируйте файлы сертификатов на компьютер, на котором вы будете запускать команды

  3. Сохраните две переменные, которые требуются в скрипте

    aws_account=<aws account id>
    keypair="<key pair name>"
    
  4. Экспорт сертификатов в качестве переменных среды

    export EC2_PRIVATE_KEY=<private_Key_file>
    export EC2_CERT=<cert_file>
    export EC2_URL=https://ec2.us-east-1.amazonaws.com
    
  5. Создание групп безопасности

    ec2-create-group loadbalancer-sg -d "Loadbalancer Test group"
    ec2-authorize loadbalancer-sg -o loadbalancer-sg -u $aws_account
    ec2-authorize loadbalancer-sg -p 80 -s 0.0.0.0/0
    
  6. Создайте файл пользовательских данных для экземпляра, чтобы запустить apache и создать файл index.html

    mkdir -p ~/temp/ 
    echo '#! /bin/sh
    yum -qy install httpd
    touch /var/www/html/index.html
    /etc/init.d/httpd start' > ~/temp/user-data.sh
    
  7. Запустите новый экземпляр и сохраните instanceid

    instanceid=`ec2-run-instances ami-31814f58 -k "$keypair" -t t1.micro -g loadbalancer-sg -g default -z us-east-1a -f ~/temp/user-data.sh | grep INSTANCE | awk '{ print $2 }'`
    
  8. Создайте балансировщик нагрузки и присоедините экземпляр

    elb-create-lb test-lb --availability-zones us-east-1a --listener "protocol=http, lb-port=80, instance-port=80"
    elb-register-instances-with-lb test-lb --instances $instanceid
    
  9. Дождитесь, пока состояние вашего экземпляра в loabalancer не станет "InService", и попробуйте получить доступ к URL-адресам
...