首页 > 解决方案 > 使用 Flask Web 应用程序配置 Route53、ALB 和 Fargate

问题描述

我有一个从端口 80 开始的烧瓶网络应用程序。我在 / 有一个运行状况检查端点。

烧瓶应用程序位于暴露端口 443 的 docker 容器内。

我也有一个 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 容器公开的端口,并将到达我在 80 上运行的 webapp。

这导致以下问题:

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

标签: amazon-web-servicesdockerflaskaws-fargateaws-application-load-balancer

解决方案


我将利用我的经验回答我能回答的部分。

  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 请求。请参阅此问题/答案以获取更多信息:

无法 ping AWS EC2 实例

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

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

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

推荐阅读