如何通过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
相关产品推荐
相关产品推荐

