amazon-web-services - 使用 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 并将所有内容路由到正确的容器端口?
解决方案
根据评论,截图。
首先创建 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:
推荐阅读
- python - 迭代地将第一列中的文本与其他列中的现有文本组合
- python - 在 Pandas 数据框中查找团队内的相关分数
- python - 如何防止类外的属性访问?
- flutter - Audio_cache(audioplayers 包)无法在 android 中播放音频文件
- javascript - Phaser 3 中的网络音频无法在 iOS 上播放?
- java - 从 Java ExecutorService 捕获并抛出自定义异常
- mpi - 使用 open-mpi 时的链接问题(使用包装器)
- fiddler - 如何在 fiddleScript 中创建 json 对象并发送 http post
- xcode - X Code 无法归档颤振项目
- scala - 如何将地图转换为 spark scala 中的各个列?