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

Igo*_*ler 17 amazon-web-services amazon-ecs amazon-elb

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

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

我发现监听器允许指定一大堆东西。然而,我对该服务创建的目标群体感到困惑。它 -IP类型组,侦听端口 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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*cin 20

根据评论,截图。

首先创建ALB

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

在此输入图像描述

创建 ECS Fargate 服务

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

在此输入图像描述

  • 非常感谢您,先生。您的回答解决了我有关 ALB 的问题。 (2认同)