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

如何通过terraform-aws-eks禁用AWS EKS托管节点组自动分配公网IP

解决方案

针对公网子网内EKS托管节点自动分配公网IP导致成本增加的问题,有以下几个可行的解决办法:

方法1:自定义启动模板关联到托管节点组

虽然terraform-aws-eks的eks-managed-node-group子模块没有直接配置项,但可以通过自定义AWS启动模板,在模板中禁用公网IP自动分配,再将该模板关联到托管节点组。

具体Terraform代码示例:

# 创建自定义启动模板
resource "aws_launch_template" "eks_node" {
  name_prefix   = "eks-node-template-"
  image_id      = data.aws_ami.eks_worker.id # 替换为你的EKS节点AMI
  instance_type = "t3.medium" # 替换为你的实例类型

  network_interfaces {
    associate_public_ip_address = false # 禁用公网IP自动分配
    security_groups             = [aws_security_group.eks_node.id] # 替换为你的节点安全组
  }
}

# 在托管节点组中使用该启动模板
module "eks_managed_node_group" {
  source  = "terraform-aws-modules/eks/aws//modules/eks-managed-node-group"
  version = "~> 19.0" # 替换为你使用的模块版本

  cluster_name    = module.eks.cluster_name
  cluster_version = module.eks.cluster_version
  subnet_ids      = var.public_subnet_ids # 公网子网ID

  launch_template {
    id      = aws_launch_template.eks_node.id
    version = "$Latest"
  }

  # 其他节点组配置...
}

方法2:修改公网子网的默认公网IP映射设置

直接修改公网子网的map_public_ip_on_launch属性为false,这样所有在该子网启动的实例默认都不会分配公网IP。

Terraform代码示例:

# 假设你已经有公网子网资源,修改其属性
resource "aws_subnet" "public" {
  # 原有子网配置...
  vpc_id            = aws_vpc.main.id
  cidr_block        = "10.0.1.0/24"
  availability_zone = "us-east-1a"

  map_public_ip_on_launch = false # 禁用子网默认公网IP分配
}

注意:这个修改会影响该子网内所有新启动的实例,如果子网中还有其他需要公网IP的资源,不建议使用此方法。

额外成本优化建议

  • 检查现有公网子网内的节点,手动移除不需要的公网IP(通过EC2控制台或AWS CLI修改实例网络接口属性)
  • 考虑将工作节点全部迁移到私有子网,通过NAT网关访问外网,从根源上避免公网IP分配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:55:57