目标组在端口 80 上的健康检查不断失败,并在使用动态端口映射时启动新实例
Posted
技术标签:
【中文标题】目标组在端口 80 上的健康检查不断失败,并在使用动态端口映射时启动新实例【英文标题】:Target group constantly fails health check on port 80 and launches new instances when using dynamic port mapping 【发布时间】:2022-01-03 16:25:42 【问题描述】:我有一个 ECS 集群和一个应用程序负载均衡器。我在aws's docs 之后为 Amazon ECS 设置了动态端口映射。
问题是我的实例的端口 80 被注册为我的目标组中的目标,这总是失败(这会因为容器暴露在临时端口范围 32768 - 65535:
因此,我不断启动新 EC2 实例并终止现有实例的 Autoscaling 组
下面是我创建 ALB、侦听器和 target_group 的 Tarraform 配置文件:
resource "aws_alb" "default"
name = "$var.app_name-$var.app_environment-alb"
load_balancer_type = "application"
internal = true
subnets = var.loadbalancer_subnets
security_groups = [aws_security_group.load_balancer_security_group.id]
resource "aws_lb_listener" "default"
load_balancer_arn = aws_alb.default.arn
port = "80"
protocol = "HTTP"
default_action
type = "forward"
target_group_arn = aws_lb_target_group.default.arn
resource "aws_lb_target_group" "default"
name_prefix = "rushmo"
port = 80
protocol = "HTTP"
vpc_id = var.vpc_id
target_type = "instance"
health_check
healthy_threshold = "2"
unhealthy_threshold = "5"
interval = "300"
port = "traffic-port"
path = "/"
protocol = "HTTP"
matcher = "200,301,302"
resource "aws_autoscaling_group" "default"
name = "$var.app_name-$var.app_environment-ASG"
desired_capacity = 1
health_check_type = "ELB"
health_check_grace_period = 600 # 10 min
launch_configuration = aws_launch_configuration.default.name
max_size = 1
min_size = 1
target_group_arns = [aws_lb_target_group.default.arn]
termination_policies = ["OldestInstance"]
vpc_zone_identifier = var.application_subnets
protect_from_scale_in = true
注意:如果我从目标组手动取消注册端口 80 上的目标,则不断终止和启动新实例的问题得到解决,但我不明白我做错了什么并且为什么这个端口 80 显示为注册目标,而不仅仅是临时端口范围
【问题讨论】:
【参考方案1】:我认为问题是由于:
health_check_type = "ELB"
这使得 ASG 在您的实例的端口 80 上使用 ALB 的运行状况检查。但是,由于您使用的是 ECS,因此健康检查应仅用于您的容器,而不是实例本身。因此它应该是:
health_check_type = "EC2"
【讨论】:
@GeorgiKoemdzhiev 也许他们是在 TF 之外手动注册的?无论如何,如果您觉得答案有帮助,我们将不胜感激。 谢谢马尔辛。这种变化实际上解决了不断终止/启动实例的问题。但是,我仍然在我的目标组中看到 2 个目标注册为端口 80(始终不健康)和另一个用于容器(在本例中为 50131)。这正常吗? 谢谢,我可以尝试重新创建我的环境,看看是否可以摆脱端口 80 目标。以上是关于目标组在端口 80 上的健康检查不断失败,并在使用动态端口映射时启动新实例的主要内容,如果未能解决你的问题,请参考以下文章
弹性beantalk上的spring boot应用程序-健康检查失败
如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?