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

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集群,会返回找不到集群的错误。

修复步骤

  1. 补全节点组对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
  ]
}
  1. 补全私有子网的路由配置:
    新增私有路由表,配置指向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
}
  1. 确认Terraform执行环境的网络连通性:
  • 如果在本地公网环境执行Terraform,可临时将EKS集群的endpoint_public_access设为true,待节点组部署完成后再按需关闭公网访问;也可以配置AWS Client VPN连通集群VPC,确保本地能正常解析并访问EKS私网API端点。
  • 如果在VPC内的堡垒机等EC2实例上执行Terraform,确认实例所属子网的路由、安全组、网络ACL规则允许出站访问EKS服务对应的API端点。

内容的提问来源于stack exchange,提问作者MP32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:48:18