You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:50:22