Terraform 12.20.0下为EKS节点组EC2实例添加名称标签的问题
看起来你遇到的问题是Terraform部署EKS时,节点组additional_tags里的Name标签没有同步到EC2实例上,但其他标签正常显示。我之前也碰到过类似的情况,核心原因和Auto Scaling Group(ASG)的标签传播设置有关,下面给你几个具体的解决方案:
1. 先确认问题根源
首先登录AWS控制台,找到对应节点组的Auto Scaling Group,查看它的标签列表:
- 如果
Name标签根本没出现在ASG上:说明模块没有正确将additional_tags中的Name同步到ASG配置 - 如果
Name标签在ASG上,但没有勾选在启动时传播:这就是核心问题——ASG的标签不会自动传递给EC2实例,必须显式开启这个选项
2. 针对旧版EKS模块的解决方案
你使用的是Terraform 12.20.0,对应的官方terraform-aws-eks模块应该是v10.x左右的旧版本,这类版本中additional_tags默认不会为标签设置propagate_at_launch = true,需要手动调整配置:
方案A:改用带传播设置的标签数组
将节点组中的additional_tags替换为tags数组,明确指定每个标签是否传播到实例:
node_groups = { app = { name = "app" # 其他原有配置... k8s_labels = { nodegroup = "app" } tags = [ { key = "nodegroup" value = "app" propagate_at_launch = true }, { key = "Name" value = "${var.environment}-app-node" propagate_at_launch = true }, { key = "env" value = var.environment propagate_at_launch = true }, { key = "k8s.io/cluster-autoscaler/enabled" value = "true" propagate_at_launch = true }, { key = "k8s.io/cluster-autoscaler/${var.cluster-name}" value = "true" propagate_at_launch = true } ] } # ml节点组做同样的修改... }
方案B:启用标签传播参数
部分旧版EKS模块支持additional_tags_propagate参数,可以在node_groups_defaults中全局开启标签传播:
node_groups_defaults = { disk_size = 128 key_name = var.key_name subnets = [ aws_subnet.{{}}.id, aws_subnet.{{}}.id, ] k8s_labels = { env = var.environment } additional_tags = { env = var.environment "k8s.io/cluster-autoscaler/enabled" = "true" "k8s.io/cluster-autoscaler/${var.cluster-name}" = "true" } # 添加这一行,让所有additional_tags自动传播到实例 additional_tags_propagate = true }
添加后,节点组additional_tags中的Name标签就会自动带上propagate_at_launch = true。
3. 验证配置
修改完配置后,运行terraform plan,在输出中查找对应ASG的标签配置,确认Name标签已经设置了传播属性。如果输出显示类似下面的内容,说明配置生效了:
+ tags_with_propagation = { + "Name" = "prod-app-node" + "env" = "prod" + "nodegroup" = "app" # 其他标签... }
4. 可选:升级EKS模块版本
如果你的项目允许,建议升级到兼容Terraform 12的新版EKS模块(比如v18.x),新版本默认会将additional_tags中的标签设置为自动传播到EC2实例,这类问题会被自动解决。不过升级前记得备份配置,检查模块变更日志,避免兼容性问题。
内容的提问来源于stack exchange,提问作者Jules

