【问题标题】:Aws ec2 - how to setup load balancer to match docker container on ec2 instanceAws ec2 - 如何设置负载均衡器以匹配 ec2 实例上的 docker 容器
【发布时间】:2021-03-30 12:06:46
【问题描述】:

背景
我有一个 EC2 实例和一个在 3030 端口上运行的 docker 容器。

在我的 docker 容器中,有一个 nodejs 服务器,其中包含 REST api 设置。

我只是创建了一个应用程序负载均衡器,其目标组(HTTP:80)指向上面的 ec2 实例,以便设置公共 http 端点以发送 api 请求

负载均衡器的 DNS 名称是 my-docker-test-server-dev-123456789.ap-southeast-1.elb.amazonaws.com。

问题
我试图发送http请求POST https://my-docker-test-server-dev-123456789.ap-southeast-1.elb.amazonaws.com/login
为了在 Postman 上尝试登录 api, 但发生错误

HTTP 504: Gateway timeout

更新
我正在为负载均衡器使用默认安全组。

入站规则

Type Protocol Port range Source Description - optional
All traffic All All 0.0.0.0/0   –
All traffic All All ::/0    –
All traffic All All sg-d987a2bc / default   –

更新 2
现在按照评论的建议更新了目标组以指向 HTTP:3030,但仍然出现相同的错误。

组的健康检查:

unhealthy
Request timed out

更新 3
EC2 实例 > 安全性

入站规则

Port range Protocol   Source      Security groups
22          TCP      0.0.0.0/0    launch-wizard-9

【问题讨论】:

  • 安全组呢?如果您在没有 ALB 的情况下访问它,您的应用是否可以正常工作?
  • @Marcin 更新了上面的安全组。我可以访问ec2实例,并且ec2中的docker容器运行正常。
  • 如果你的 docker 在 3030 上工作,为什么你的目标组使用 80 端口?
  • @Marcin 将目标组端口更新为 3030,但仍然是同样的错误
  • @Marvin 现在可以使用了!我想我对 ELB 和实例的关系以及安全组的关系仍然有些困惑。您能否在评论中提供简要说明,以便我接受您的回答?

标签: node.js amazon-web-services docker amazon-ec2


【解决方案1】:

基于 cmets。

问题是错误地设置了实例的安全组 (SG) 和目标组 (TG) 端口。在第一种情况下,由于 docker 应用程序暴露在实例的 3030 端口上,SG 必须允许该端口上的入站流量。 缺少入站 SG 规则

在TG的情况下,原来的流量端口是80,但是由于docker工作在3030端口,所以需要将TG端口改为3030端口。

所以流量看起来如下:

Clinet ---(HTTP:80) ---> ALB ---> TG --- (HTTP:3030) ---> Instance with docker on port 3030

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2017-03-21
    • 2015-07-03
    • 1970-01-01
    • 2021-12-05
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多