EKS集群节点组创建失败:无默认安全组访问权限问题排查
解决EKS节点组创建时的"无默认安全组访问权限"问题
问题分析
虽然你已经在配置中指定了安全组,但EKS仍提示无法访问默认安全组,通常是因为配置细节遗漏、权限不足或资源关联错误导致的。以下是针对性的解决方案:
具体解决步骤
1. 校验安全组的配置与关联
- 确保
aws_eks_node_group的remote_access块中显式指定了安全组ID,即使不需要SSH远程访问,也不能留空该字段。 - 验证指定的安全组属于报错中的目标VPC(vpc-xxx),可通过AWS控制台查看安全组的VPC关联信息。
- 检查Terraform代码中安全组的引用是否正确,比如是否用了
aws_security_group.your_sg.id这类正确的资源ID引用,而非错误的变量或未创建的资源。
2. 补全节点组IAM角色的权限
- EKS节点组使用的IAM角色需要具备访问安全组的权限,确保角色关联的策略包含
ec2:DescribeSecurityGroups权限。如果是自定义策略,添加以下内容:
{ "Effect": "Allow", "Action": "ec2:DescribeSecurityGroups", "Resource": "*" }
- 常用的托管策略(如
AmazonEKSWorkerNodePolicy)已包含该权限,若使用自定义策略需手动补充。
3. 避免依赖默认安全组
- 若使用启动模板配置节点组,要在启动模板中明确指定自定义安全组,禁止EKS自动使用VPC默认安全组。
- 示例Terraform配置片段:
resource "aws_eks_node_group" "main" { cluster_name = aws_eks_cluster.main.name node_group_name = "managed0" node_role_arn = aws_iam_role.node_group.arn subnet_ids = aws_subnet.private.*.id remote_access { ec2_ssh_key = "your-key-pair-name" security_group_ids = [aws_security_group.node_group_sg.id] # 必须显式配置 } # 若使用启动模板 launch_template { id = aws_launch_template.node_group.id version = "$Latest" } }
4. 刷新Terraform状态并重新部署
- 执行
terraform refresh刷新资源状态,确保Terraform获取到最新的安全组配置信息。 - 若之前的节点组创建已失败,先销毁该资源:
terraform destroy -target=aws_eks_node_group.main,再重新执行terraform apply。
内容的提问来源于stack exchange,提问作者cloudbud
相关产品推荐
相关产品推荐

