有没有人举过一个例子,说明如何使用单个应用程序负载平衡器将主机头请求转发到两个不同的Docker容器来构建ECS集群。
我希望有一个ALB用于运行我的角度站点以及a.net Web服务的单个ESC群集。最终,我的目标是使用terraform编写脚本。
答案 0 :(得分:1)
在不了解所有信息的情况下,我认为您正在寻找基于路径的路由,或者甚至更好的基于主机的路由。
每个主机/路径都需要一个 aws_lb_listener_rule (负载均衡器侦听器规则)。 每个ECS服务都需要一个 aws_alb_target_group ,并在资源aws_lb_listener_rule中引用正确的目标组。
在您的应用程序负载均衡器中使用基于路径的路由在开始使用Application Load Balancer之前,必须添加一个或多个侦听器。侦听器是使用您配置的协议和端口检查连接请求的过程。您为侦听器定义的规则决定了负载均衡器如何将请求路由到一个或多个目标组中的目标。 docs
resource "aws_lb_listener_rule" "host_based_routing" {
listener_arn = aws_lb_listener.front_end.arn
priority = 99
action {
type = "forward"
target_group_arn = aws_lb_target_group.static.arn
}
condition {
field = "host-header"
values = ["my-service.*.terraform.io"]
}
}
在条件块中定义必须发送请求的主机或模式(以下示例)。
resource "aws_lb_listener_rule" "static" {
listener_arn = aws_lb_listener.front_end.arn
priority = 100
action {
type = "forward"
target_group_arn = aws_lb_target_group.static.arn
}
condition {
field = "path-pattern"
values = ["/static/*"]
}
}
resource "aws_alb_target_group" "alb_target_group" {
name = "example-target-group"
protocol = "HTTP"
port = var.exposed_port
vpc_id = var.vpc_id
deregistration_delay = 30
health_check {
path = var.service_health_check_path
matcher = "200-399"
}
}
https://www.terraform.io/docs/providers/aws/r/lb_listener_rule.html https://www.terraform.io/docs/providers/aws/r/lb_target_group.html