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

Terraform创建私有子网EKS托管节点组:实例无法加入集群

解决Terraform部署私有子网EKS托管节点组无法加入集群的问题

问题说明

用eksctl部署私有子网中的EKS集群和托管节点组时,必须添加privateNetworking: true才能避免节点无法加入集群的错误。但使用Terraform的terraform-aws-modules/eks/aws模块时,没有对应参数,部署后遇到相同的"Instances failed to join the Kubernetes cluster"错误。

解决方案

eksctl的privateNetworking: true核心作用是让节点组实例仅使用私有IP,不分配公网IP,同时确保节点通过私有网络访问EKS控制平面。在Terraform中可以通过以下配置实现等效效果:

  • 确保节点组使用的子网是私有子网(子网配置中未开启"自动分配公网IP")
  • 在托管节点组的配置中,通过launch_template显式禁用公网IP分配
  • 确认EKS控制平面的私有访问已启用(已设置cluster_endpoint_private_access = true)
  • 确保节点安全组允许与EKS控制平面的私有网络通信

调整后的Terraform代码

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.0"

  cluster_name    = "clusterFoo"
  cluster_version = "1.31"

  bootstrap_self_managed_addons = false
  cluster_addons = {
    coredns                = {}
    eks-pod-identity-agent = {}
    kube-proxy             = {}
    vpc-cni                = {}
  }

  cluster_security_group_id = "sg-567"

  # 启用私有端点访问,禁用公网访问,匹配eksctl的私有网络配置
  cluster_endpoint_public_access = false
  cluster_endpoint_private_access = true

  enable_cluster_creator_admin_permissions = true

  vpc_id                   = "vpc-123"
  # 使用私有子网ID
  subnet_ids               = [
    "subnet-234",
    "subnet-345"
  ]

  eks_managed_node_group_defaults = {
    instance_types = ["t2.medium"]
  }

  eks_managed_node_groups = {
    example = {
      ami_id = "ami-678"
      instance_types = ["t2.medium"]

      min_size      = 1
      max_size      = 1
      desired_size  = 1

      # 关键配置:禁用公网IP分配,等效于eksctl的privateNetworking: true
      launch_template = {
        metadata_options = {
          http_tokens = "required"
        }
        network_interfaces = {
          associate_public_ip_address = false
        }
      }

      # 若使用自定义AMI,可添加与eksctl一致的bootstrap命令
      override_bootstrap_command = <<-EOT
        #!/bin/bash
        /etc/eks/bootstrap.sh clusterFoo
      EOT
    }
  }

  tags = {
    Environment = "dev"
    Terraform   = "true"
  }
}

额外检查项

  • 确认私有子网有正确的路由表配置,能访问EKS控制平面的私有端点(通常通过VPC端点或NAT网关访问AWS服务)
  • 节点IAM角色具备AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly等必要权限
  • 自定义AMI需包含EKS bootstrap工具,且版本与集群版本匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:22:08