【问题标题】:Application Load Balancer with ECS Fargate使用 ECS Fargate 的应用程序负载均衡器
【发布时间】:2021-02-01 04:31:13
【问题描述】:

我正在尝试为 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 并将所有内容路由到正确的容器端口?

【问题讨论】:

  • 如果你只有1个ECS服务,你应该有1个ALB。不知道为什么你有两个。另外,您的 "Protocol": "HTTPS", 意味着您的容器在 HTTPS 中运行,它们具有适当的 SSL 证书吗?或者你的意思是像往常一样在这里使用 HTTP?
  • 我写了为什么有两个目标群体。如果不指定目标组,则无法创建应用程序负载均衡器。你可以吗? SSL 证书需要提供给 ALB,它从 ACM 中提取。容器不需要它们。
  • 当然你可以拥有 1 个 TG。不知道你是如何创建其中两个的。您还指定了HealthCheckProtocol": "HTTPS,这意味着如果您的容器仅使用 HTTP,您的 ECS 服务将始终不健康。
  • "Protocol": "HTTPS", 更改为 "Protocol": "HTTP",,如果您的容器使用 HTTP,请将健康检查设置为 HTTP。此外,您不需要使用端口 443 的第二个 TG,因为您不在容器中使用 HTTPS。
  • 抱歉,我不确定您的设置是什么。您能否澄清一下什么是路由器实例? ECS fargate 设置通常非常简单 - 1 TG 用于 1 服务。也许您可以提供一些屏幕截图来更好地说明您的设置?

标签: amazon-web-services amazon-ecs amazon-elb


【解决方案1】:

基于cmets,截图。

首先创建 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 target group(在我的情况下案例名为my-tg-for-fargate。您无需创建second tg

【讨论】:

  • 谢谢。我只有create new 作为选项。然而,我的负载均衡器正在做instance 路由。也许,我应该直接放弃它并立即进行 IP 路由。让我试试。
  • @IgorShmukler 哦,当然。 Fargate 需要 IP,而不是实例。如果您创建实例 TG,那么它们将永远无法与 Fargate 一起使用,这解释了为什么您看不到它们。
  • @IgorShmukler 我将在答案中添加 IP TG 的要求。
  • @TimothyPulliam AWS 将管理它。它是负载均衡器如何与 ECS 配合使用的属性之一。
  • 非常感谢先生。你的回答解决了我关于 ALB 的问题。
猜你喜欢
  • 2021-11-15
  • 2021-11-20
  • 1970-01-01
  • 2017-01-04
  • 2019-12-17
  • 2019-08-27
  • 2020-02-20
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多