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

