Тайм-аут ELB, когда исходный хост совпадает с целевым хостом
У меня возникла проблема, когда ELB дает мне тайм-аут при подключении к сервису в том же экземпляре EC2.
У меня есть кластер ECS с двумя экземплярами EC2 (запускается с помощью мастера ECS). В настоящее время я использую две службы: очередь RabbitMQ и два сотрудника Celery. Я поместил внутренний балансировщик сетевой нагрузки ELB перед контейнером RabbitMQ.
Рабочий Celery в другом экземпляре EC2 может подключаться без проблем, но рабочий, который находится на том же хосте, что и контейнер RabbitMQ, не может подключиться:
[2018-01-24 12:00:55,128: ERROR/MainProcess] consumer: Cannot connect to amqp://user:**@rabbitmq-abcdefghijklmnop.elb.eu-central-1.amazonaws.com:5672//: timed out.
Я проверил журналы потока для VPC, и все пакеты приняты (.157 - это экземпляр EC2, .136 - ELB):
1 ответ
Балансировщик сетевой нагрузки представляет соединение с сервером, как если бы оно было получено с IP-адреса клиентского компьютера. Сетевая инфраструктура волшебным образом возвращает ответы на правильные пары адрес / порт.
Но когда сервер пытается ответить, он отвечает на этот адрес источника... и в вашей конфигурации этот адрес источника является той же машиной... которая не пыталась подключиться к себе, она пыталась подключиться к другой машине... таким образом, пары исходного и обратного путей и адреса адрес / порт назначения не соотносятся правильно, и время соединения истекает.
Похоже, это является ограничением в Network Load Balancer. Любой аналогично разработанный балансир уровня 3 будет иметь такое же ограничение.
Также см. https://forums.aws.amazon.com/thread.jspa?messageID=805583&.