我已经设置了一个带有单个容器的 ECS 集群,并使用 ELB 为其提供流量。ELB 侦听器为 HTTPS/443,主机侦听器为 HTTP/8080。也就是说,当您点击 URL 时,它是 HTTPS,但实例和 ELB 之间的通信是普通 HTTP。
我尝试过以下两种设置:
设置 1
应用程序负载均衡器。在这里,我将目标组指向端口 80(而不是 8080),并将容器上的主机端口设置为 0。这是为了利用动态端口映射。
在此设置中,我可以看到实例向 ELB 注册,并且可以看到容器使用的随机端口号。如果我使用随机端口号 (例如 :) 访问 EC2 实例的 IP,我就可以访问容器。但是访问 ELB 的 URL 不起作用。
设置 2
这里我使用了 Classic Load Balancer,同样监听 HTTPS,并连接到容器实例上的端口 8080。容器映射将端口 8080 设置为主机端口。同样,如果我使用端口 8080 访问 EC2 实例 IP,我可以访问容器,但访问 ELB URL 不起作用。
网络层
NACL 允许端口 80、443、8080 和 32768-61000 上来自任何位置的流量。我为应用程序负载均衡器的动态端口映射打开了端口 32768-61000。允许所有出站流量。安全组的设置与 NACL 相同。这是针对容器实例的。ELB 有一个安全组,可以接受来自任何位置的任何流量,基本上是默认安全组。
当我卷曲默认的 ELB URL 时,我得到下面的信息:
curl: (56) Recv failure: Connection reset by peer
当我将默认 URL 映射到自定义域 URL 时,我得到:
curl: (6) Could not resolve host
有什么建议吗?我已经研究了几个小时了,但似乎还是搞不懂。(是的,我的容器服务角色允许 ELB 的权限)