源主机与目标主机相同时ELB超时

ELB timeout when source host is the same as the target host

我遇到一个问题,ELB 在连接到同一 EC2 实例上的服务时给我超时。

我有一个带有两个 EC2 实例的 ECS 集群(通过 ECS 向导启动)。我目前 运行 两项服务:一个 RabbitMQ 队列和两个 Celery worker。我在 RabbitMQ 容器前面放了一个内部 ELB 网络负载均衡器。

另一个 EC2 实例上的 celery worker 可以毫无问题地连接,但与 RabbitMQ 容器位于同一主机上的 worker 无法连接:

[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):

网络负载平衡器呈现与服务器的连接,就好像它来自客户端计算机的 IP 地址一样。网络基础设施神奇地将回复恢复为正确的 address/port 对。

但是当服务器尝试回复时,它会回复那个源地址……在你的配置中,那个源地址是同一台机器……try 连接到自身,它试图连接到另一台机器...因此转发路径和 return 路径源和目标 address/port 对没有正确关联并且连接超时。

这似乎是网络负载均衡器的一个限制。任何类似设计的第 3 层平衡器都会有相同的限制。

另见 https://forums.aws.amazon.com/thread.jspa?messageID=805583&#805583