如何为EKS集群添加额外安全组?Terraform配置咨询
问题解答
1. Additional Security Groups 的创建逻辑
你使用的 terraform-aws-eks/aws v18.30.1 模块中,额外安全组(即你提到的 Additional security groups)通常来自以下场景:
- 节点组安全组:配置
eks_managed_node_groups时,默认create_security_group = true,模块会自动为节点组创建独立的安全组。你当前代码中虽设置了create_security_group = false,但如果环境中存在这个额外安全组,大概率是之前部署时遗留的未销毁资源。 - 集群附加组件安全组:若启用Fargate、负载均衡器类组件,模块或AWS服务可能自动生成配套安全组,但你当前配置未涉及这类组件,可能性较低。
你可以添加以下输出配置,执行 terraform output 查看模块创建的所有安全组ID,明确目标SG的来源:
# 添加到Terraform配置末尾 output "cluster_security_group_id" { description = "EKS集群安全组ID" value = module.eks.cluster_security_group_id } output "node_security_group_ids" { description = "EKS托管节点组安全组ID列表" value = module.eks.node_security_group_ids }
2. 修复 cluster_security_group_additional_rules 不生效 & 通过Terraform添加EC2安全组规则
问题根源
你配置的规则中同时设置了 security_groups = [var.ec2_sg_id] 和 source_cluster_security_group = true,这两个参数互斥:source_cluster_security_group = true 会强制将规则源设为集群安全组本身,完全覆盖了你指定的EC2安全组,导致规则未按预期生成。
解决方案
方案1:给集群安全组添加EC2访问规则
移除冲突的 source_cluster_security_group = true 参数,修正后的配置如下:
cluster_security_group_additional_rules = { ingress_ec2_tcp = { description = "允许EC2实例访问EKS集群" protocol = "tcp" from_port = 443 to_port = 443 type = "ingress" security_groups = [var.ec2_sg_id] } }
方案2:给Additional Security Groups(如节点安全组)添加规则
如果你的Additional Security Groups是节点组安全组,使用 node_security_group_additional_rules 参数添加规则:
node_security_group_additional_rules = { # 保留原有的Karpenter规则 ingress_nodes_karpenter_port = { description = "Cluster API to Node group for Karpenter webhook" protocol = "tcp" from_port = 8443 to_port = 8443 type = "ingress" source_cluster_security_group = true } # 添加EC2实例访问节点组的规则 ingress_ec2_access_nodes = { description = "允许EC2实例访问节点组" protocol = "tcp" from_port = 443 to_port = 443 type = "ingress" security_groups = [var.ec2_sg_id] } }
方案3:直接操作独立安全组(若Additional SG不是模块创建)
如果目标安全组并非由eks模块管理,直接使用 aws_security_group_rule 资源添加规则:
resource "aws_security_group_rule" "ec2_access_additional_sg" { type = "ingress" from_port = 443 to_port = 443 protocol = "tcp" security_group_id = var.additional_sg_id # 替换为你的Additional SG ID source_security_group_id = var.ec2_sg_id description = "允许EC2实例访问该安全组" }
执行 terraform apply 后,规则会自动生效,无需手动在控制台操作。
内容的提问来源于stack exchange,提问作者user20208419
相关产品推荐
相关产品推荐

