【发布时间】: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