使用 ECS Fargate 的应用程序负载均衡器

Application Load Balancer with ECS Fargate

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

我的容器 运行 它们在 TCP 端口 5000 上提供服务。我希望负载均衡器仅在常规 443 端口上公开 HTTPS,并将 HTTP 重定向到 HTTPS,或者如果这很困难,则删除 HTTP .

我看到 Listeners 允许指定一大堆东西。但是,我对使用该服务创建的目标群体感到困惑。它 - IP 类型组,在端口 80 上侦听。在服务期间我 select HTTP 或 HTTPS creation/configuration.

我的容器从未获得任何流量。我启用了负载平衡器日志记录,似乎平衡器不明白我想要它做什么。每个请求结束时在日志中 "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 并将所有内容路由到正确的容器端口?

根据评论,截图。

先创建ALB

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

创建 ECS Fargate 服务

当您在 ECS 控制台中创建 Fargate 服务时,您可以选择 existing ALB(在我的例子中是 dddd)和 existing目标组 (在我的例子中称为 my-tg-for-fargate。您不需要创建 second tg: