Terraform部署EKS节点组报错找不到名为mvp-eks的集群
EKS节点组部署报错:找不到指定名称的集群
报错信息
│ Error: error creating EKS Node Group (mvp-eks:mvp-node-group): ResourceNotFoundException: No cluster found for name: mvp-eks. │ { │ RespMetadata: { │ StatusCode: 404, │ RequestID: "160a391e-85f1-48b1-af8d-519afece70d3" │ }, │ Message_: "No cluster found for name: mvp-eks." │ } │ │ with aws_eks_node_group.nodes_eks, │ on main.tf line 275, in resource "aws_eks_node_group" "nodes_eks": │ 275: resource "aws_eks_node_group" "nodes_eks" {
该报错出现时,AWS控制台显示同名EKS集群确实存在且处于Active状态。
问题根因
这个报错不是单一问题导致,是配置里的三个缺陷共同触发的:
- Terraform资源依赖缺失:节点组资源的
depends_on块没有声明对EKS集群资源的依赖,且cluster_name字段直接引用变量值,没有引用集群资源的属性,Terraform无法感知两个资源的创建顺序,可能在集群控制面尚未完全在AWS API侧注册就绪时就提前发起节点组创建请求,触发404。 - VPC路由配置不全:现有配置只完成了公有子网的路由表关联,私有子网既没有绑定路由表,也没有配置指向NAT网关的出站路由,私有子网内的流量无法正常访问AWS服务API。
- EKS端点访问限制:EKS集群配置了
endpoint_public_access = false,完全关闭公网API端点,如果执行Terraform的环境不在集群VPC内,又没有配置VPN/专线、VPC端点、私网DNS解析的话,API请求根本无法路由到私网部署的EKS集群,会返回找不到集群的错误。
修复步骤
- 补全节点组对EKS集群的依赖,修改节点组资源配置:
将cluster_name字段改为直接引用集群资源的名称属性,同时在depends_on块中加入EKS集群资源,确保集群完全就绪后再创建节点组,核心修改段如下:
resource "aws_eks_node_group" "nodes_eks" { cluster_name = aws_eks_cluster.eks.name node_group_name = "${var.name}-node-group" node_role_arn = aws_iam_role.nodes_eks.arn # 其余原有子网、远程访问、伸缩配置保持不变 depends_on = [ aws_iam_role_policy_attachment.amazon_eks_worker_node_policy_eks, aws_iam_role_policy_attachment.amazon_eks_cni_policy_eks, aws_iam_role_policy_attachment.amazon_ec2_container_registry_read_only, aws_eks_cluster.eks ] }
- 补全私有子网的路由配置:
新增私有路由表,配置指向NAT网关的默认出站路由,再将所有私有子网关联到该路由表,补充配置如下:
# 新建私有路由表 resource "aws_route_table" "private_rt" { vpc_id = aws_vpc.vpc.id tags = { Name = "${var.name}-private-rt" } } # 配置私有子网默认路由指向对应可用区NAT网关 resource "aws_route" "private_default_route" { count = length(var.azs) route_table_id = aws_route_table.private_rt.id destination_cidr_block = "0.0.0.0/0" nat_gateway_id = aws_nat_gateway.nat_gateway[count.index].id } # 关联所有私有子网到私有路由表 resource "aws_route_table_association" "private_assoc" { count = length(var.private_cidrs) subnet_id = aws_subnet.private_subnet[count.index].id route_table_id = aws_route_table.private_rt.id }
- 确认Terraform执行环境的网络连通性:
- 如果在本地公网环境执行Terraform,可临时将EKS集群的
endpoint_public_access设为true,待节点组部署完成后再按需关闭公网访问;也可以配置AWS Client VPN连通集群VPC,确保本地能正常解析并访问EKS私网API端点。 - 如果在VPC内的堡垒机等EC2实例上执行Terraform,确认实例所属子网的路由、安全组、网络ACL规则允许出站访问EKS服务对应的API端点。
内容的提问来源于stack exchange,提问作者MP32
相关产品推荐
相关产品推荐

