首页 > 解决方案 > 使用 ECS Fargate 的应用程序负载均衡器

问题描述

我正在尝试为 Fargate ECS 配置负载平衡。我的理解是至少有两个目标群体。一个目标组与应用程序负载均衡器一起创建,一个目标组与 ECS 服务一起创建。

我的容器在 TCP 端口 5000 上运行它们的服务。我希望负载均衡器仅通过常规 443 端口公开 HTTPS,并将 HTTP 重定向到 HTTPS,或者如果这很困难,只需丢弃 HTTP。

我看到 Listeners 允许指定一大堆东西。但是,我对使用该服务创建的目标群体感到困惑。它 - IP-type 组,侦听端口 80。在服务创建/配置期间选择 HTTP 还是 HTTPS。

我的容器从来没有流量。我启用了负载平衡器日志记录,平衡器似乎不明白我想要它做什么。每个"forward" "-" "-" "-" "-" "-" "-"请求结束时的日志中都有。

我跑去aws elbv2 describe-target-groups获取定义。

{
  "TargetGroups": [
    {
        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:505963211XXX:targetgroup/ecs-fargate-api-service-tg/1ebb89754b34d072",
        "TargetGroupName": "ecs-fargate-api-service-tg",
        "Protocol": "HTTPS",
        "Port": 80,
        "VpcId": "vpc-e623dd9b",
        "HealthCheckProtocol": "HTTPS",
        "HealthCheckPort": "traffic-port",
        "HealthCheckEnabled": true,
        "HealthCheckIntervalSeconds": 30,
        "HealthCheckTimeoutSeconds": 5,
        "HealthyThresholdCount": 5,
        "UnhealthyThresholdCount": 2,
        "HealthCheckPath": "/cookie-policy",
        "Matcher": {
            "HttpCode": "200"
        },
        "LoadBalancerArns": [
            "arn:aws:elasticloadbalancing:us-east-1:505963211XXX:loadbalancer/app/node-api-lb/f5e512a2678688f5"
        ],
        "TargetType": "ip"
    },
    {
        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:505963211XXX:targetgroup/node-api-tg/7544b53ab1720e0d",
        "TargetGroupName": "node-api-tg",
        "Protocol": "HTTPS",
        "Port": 443,
        "VpcId": "vpc-e623dd9b",
        "HealthCheckProtocol": "HTTPS",
        "HealthCheckPort": "traffic-port",
        "HealthCheckEnabled": true,
        "HealthCheckIntervalSeconds": 300,
        "HealthCheckTimeoutSeconds": 5,
        "HealthyThresholdCount": 5,
        "UnhealthyThresholdCount": 2,
        "HealthCheckPath": "/cookie-policy",
        "Matcher": {
            "HttpCode": "200"
        },
        "LoadBalancerArns": [
            "arn:aws:elasticloadbalancing:us-east-1:505963211XXX:loadbalancer/app/node-api-lb/f5e512a2678688f5"
        ],
        "TargetType": "instance"
    }
  ]
}

我究竟做错了什么?我应该如何为 ECS Fargate 设置应用程序负载均衡器以在外部使用 HTTPS 并将所有内容路由到正确的容器端口?

标签: amazon-web-servicesamazon-ecsamazon-elb

解决方案


根据评论,截图。

首先创建 ALB

您可以在创建 ALB 时创建 TG(在我的示例中,ALB 称为dddd),也可以事先创建。另外,我将我的目标组命名为my-tg-for-fargate。我使用了 80 端口(你可能需要 5000),因为我使用nginxdemos/hello作为我的容器。确保创建IP 目标类型,而不是实例。Farget 不适用于实例 TG,解释了为什么您在创建 ECS 服务时在 ECS 控制台中看不到它们。

在此处输入图像描述

创建 ECS Fargate 服务

当您在 ECS 控制台中创建 Fargate 服务时,您可以选择现有的 ALB(在我的情况下dddd)和现有的目标组(在我的情况下称为my-tg-for-fargate。您不需要创建第二个 tg

在此处输入图像描述


推荐阅读