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

通过Terraform创建EKS节点组时遇私有子网IP分配错误求助

解决EKS私有子网节点组部署报错的方案

方案一:为私有子网开启自动分配公网IP

如果子网是通过Terraform创建的,在aws_subnet资源中添加map_public_ip_on_launch = true配置:

resource "aws_subnet" "private_subnet" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.1.0/24"
  availability_zone       = "us-east-1a"
  map_public_ip_on_launch = true # 开启自动分配公网IP

  tags = {
    Name = "private-subnet-1"
  }
}

如果是已存在的子网,直接在AWS控制台进入对应子网设置,开启「自动分配IPv4公有IP」选项即可。

方案二:配置NAT网关(推荐的私有子网部署方式)

私有子网的标准部署逻辑是通过NAT网关访问外网,无需给节点分配公网IP:

  • 创建一个公有子网,部署NAT网关并绑定弹性IP
  • 配置私有子网的路由表,将0.0.0.0/0的流量指向NAT网关
  • 确保EKS节点组使用的私有子网已关联该路由表

完成配置后,节点可通过NAT网关访问外网拉取镜像、调用AWS服务,此时无需开启子网公网IP自动分配,报错会自动消失。

若需要明确指定节点组不使用公网IP,可在节点组资源中添加launch_template配置,主动禁用公网IP分配:

resource "aws_eks_node_group" "eks-node-group" {
  cluster_name    = aws_eks_cluster.eks-cluster.name
  instance_types = var.instance_types
  node_group_name = "tf-name"
  node_role_arn   = aws_iam_role.eks-node-group.arn
  subnet_ids      = var.subnet_ids

  launch_template {
    name = aws_launch_template.eks_node_lt.name
  }

  scaling_config {
    desired_size = 1
    max_size     = 1
    min_size     = 1
  }

  update_config {
    max_unavailable = 1
  }

  depends_on = [
    aws_iam_role_policy_attachment.eks-node-group-worker-node-policy,
    aws_iam_role_policy_attachment.eks-node-group-cni-policy,
    aws_iam_role_policy_attachment.eks-node-group-registry-read-only-policy
  ]
}

resource "aws_launch_template" "eks_node_lt" {
  name_prefix   = "eks-node-lt-"
  image_id      = "ami-xxxxxxx" # 替换为对应区域的EKS优化AMI
  instance_type = var.instance_types[0]

  network_interfaces {
    associate_public_ip_address = false # 明确禁用公网IP
    security_groups             = [aws_security_group.eks_node_sg.id]
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:20