Application Load Balancer mit ECS Fargate
Ich versuche, den Lastausgleich für Fargate ECS zu konfigurieren. Nach meinem Verständnis gibt es mindestens zwei Zielgruppen. Eine Zielgruppe wird zusammen mit dem Application Load Balancer erstellt, und eine Zielgruppe wird zusammen mit dem ECS-Dienst erstellt.
Meine Container führen ihren Dienst auf dem TCP-Port 5000 aus. Ich möchte, dass der Load Balancer HTTPS nur über den regulären 443-Port verfügbar macht und HTTP zu HTTPS umleitet. Wenn dies schwierig ist, löschen Sie einfach HTTP.
Ich sehe, dass Listeners es erlaubt, eine ganze Reihe von Dingen anzugeben. Ich bin jedoch verwirrt über die mit dem Dienst erstellte Zielgruppe. Es - die IPGruppe vom Typ - überwacht Port 80. Ob ich während der Erstellung / Konfiguration des Dienstes HTTP oder HTTPS auswähle.
Meine Container bekommen nie Verkehr. Ich habe die Load-Balancer-Protokollierung aktiviert. Es scheint, dass der Balancer nicht versteht, was er tun soll. Dort "forward" "-" "-" "-" "-" "-" "-"im Protokoll am Ende jeder Anfrage.
Ich rannte aws elbv2 describe-target-groups, um die Definitionen zu bekommen.
{
"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"
}
]
}
Was mache ich falsch? Wie soll ich einen Anwendungs-Load-Balancer für ECS Fargate einrichten, damit HTTPS außen vorhanden ist, und alles an den richtigen Container-PORT weiterleiten?
Antworten
Basierend auf den Kommentaren, den Screenshots.
Erstellen Sie zuerst ALB
Sie können Ihre TG erstellen, wenn Sie Ihre ALB erstellen ( in meinem Beispiel heißt ALB dddd ) oder vorher. Außerdem habe ich meine Zielgruppe my-tg-for-fargate genannt . Ich habe Port 80 verwendet (Sie benötigen wahrscheinlich 5000), da ich nginxdemos / hello als Container verwendet habe. Stellen Sie sicher, dass Sie den IP-Zieltyp und nicht die Instanz erstellen . Farget funktioniert nicht mit Instanz-TGs und erklärt, warum Sie sie beim Erstellen Ihres ECS-Dienstes nicht in der ECS-Konsole sehen können.
Erstellen Sie den ECS Fargate-Dienst
Wenn Sie Ihren Fargate-Dienst in der ECS-Konsole erstellen, haben Sie die Möglichkeit, vorhandene ALB (in meinem Fall dddd) und vorhandene Zielgruppe (in meinem Fall aufgerufen ) auszuwählen my-tg-for-fargate. Sie müssen keine zweite tg erstellen :