使用 Flask Web 应用程序配置 Route53、ALB 和 Fargate

Configuring Route53, ALB, and Fargate with a Flask web application

我有一个在端口 80 上启动的 Flask Web 应用程序。我在 / 有一个运行状况检查端点。

Flask 应用位于 docker 容器内,端口 443 暴露。

我还有一个 ALB 正在监听

SSL 证书被标记为“已颁发”和“正在使用”。

ALB 的安全组仅允许端口 80 (http) 和 443 (https) 上的入站和出站流量。

我的 Fargate 集群有一个活动服务,负载均衡器在 TargetGroup 中并且属于上述相同的安全组。容器端口是443.

我有一项任务与我的服务相关,它是 运行。

此时,我无法从我的负载均衡器获得任何响应,我一直试图通过我的浏览器访问它。我注册的域名也没有响应,但我怀疑是因为负载均衡器没有响应,所以这就是我在这个问题中关注的问题。

我不确定从哪里开始,所以我使用了

nmap -p80 my-alb-xxxxxx.my-region.elb.amazonaws.com

但这告诉我 0 台主机已启动。我使用端口 443 得到相同的结果。

我的理解(帮助)是我的负载均衡器将接受 80 和 443 上的流量,重新路由到 443,这是我的 docker 容器公开的端口,并将到达我的 webapp 运行在 80.

这导致了以下问题:

  1. 我的 Flask 应用程序是否需要了解 https 握手或 ssl 证书?
  2. 我的想法是在我的 docker 容器中公开端口 443 连接到与负载均衡器关联的安全组的出站规则吗?
  3. 我还能做些什么来调试为什么我的负载平衡器 dnsname (my-alb-xxxxxx.my-region.elb.amazonaws.com) 没有响应。

我会根据我的经验回答我能回答的部分。

  1. 没有。我假设您正在加密出站世界和 LB 之间的流量。听起来从 LB 到您的 Fargate 集群的流量未加密。这可以。想想流量不知道它从一个部分到另一个部分的旅程。现在加密终止于 LB。从端口 80 到 443 的重定向是当客户端尝试连接而不指定连接类型时,它将切换到 443.

  2. 如果您这样做,您必须能够加密连接。出于测试目的,为了确保您的信号路径正常工作,我会让您的 fargate 任务侦听端口 80,并将流量转发到端口 80。(负载均衡器到 Fargate)。有关详细信息,请参阅这些资源: https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html

https://gist.github.com/jonashaag/4c01174c92ac71986e3dcc44cec6ad9c

https://docs.aws.amazon.com/AmazonECS/latest/userguide/service-load-balancing.html

  1. 因此,除非您在负载平衡器安全组上打开正确的端口(特别是),否则它不会响应通用的 ICMP 请求。请参阅此 question/answer 了解更多信息:

Cannot ping AWS EC2 instance

  • 底线是安全组对 ELB 的作用与对实例的作用相同。

现在,我将检查 Fargate 和 ALB 之间的 SG 和允许端口。 记住:

  • ALB 必须将流量转发到应用程序在您的应用程序中侦听的同一端口。如果您的应用程序在侦听时公开端口 5050 - elb 必须将流量转发到 5050。
  • 必须在 SG 上为 Fargate 集群授权该端口
  • 如果您有任何 ACL,他们必须对双向流量进行授权(如果您没有设置,请不要担心,默认情况下它不会启用)