使用Terraform部署EKS时节点无法注册到集群求助
EKS节点未在AWS控制台显示的排查与解决
问题背景
通过自定义VPC模块(存储于GitHub私有仓库)结合terraform-aws-modules/eks部署EKS集群,Terraform执行无报错且所有资源创建成功,但AWS控制台中看不到已注册的EKS节点。
排查与解决步骤
1. 修复VPC模块变量名不匹配问题
关键错误:VPC模块的variables.tf中变量名为ea-env、ea-cider,但EKS部署的vpc.tf中传递的是la-env、la-cider,导致VPC模块未正确接收参数,可能引发子网配置异常。
- 修正方法二选一:
- 修改VPC模块
variables.tf中的变量名,统一为la-env、la-cider、la-tags; - 调整EKS部署的
vpc.tf,传递正确的变量名:module "vpc" { source = "git::https://github.com/uttambaral/infrastructure-modules.git//network/vpc?ref=VPC_MODIFICATION" ea-env = var.la-env ea-cider = "10.0.0.0/16" owner = var.owner # 建议传递实际owner变量,而非空值 }
- 修改VPC模块
2. 调整节点部署的子网配置
当前EKS节点部署在公网子网,不符合最佳实践且可能导致网络连通性问题:
- 将
eks模块的subnet_ids改为私有子网:subnet_ids = module.vpc.private-subnet - 控制平面子网可保留公网(如需公网访问),但确保私有子网通过NAT网关能访问外网(VPC模块已开启
enable_nat_gateway=true,需确认路由表配置正确)。
3. 补充节点IAM角色必要权限
自管理节点缺少EKS集群通信的核心权限,需添加两个托管策略:
- 修改
self_managed_node_group_defaults中的IAM策略配置:self_managed_node_group_defaults = { instance_type = "t3.micro" update_launch_template_default_version = true iam_role_additional_policies = { AmazonSSMManagedInstanceCore = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" AmazonEKSWorkerNodePolicy = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" AmazonEC2ContainerRegistryReadOnly = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly" } } - 确认节点角色的信任策略允许EC2服务扮演该角色(
terraform-aws-modules/eks通常会自动配置,可在IAM控制台验证)。
4. 检查节点网络连通性与kubelet日志
利用SSM连接到节点(因已配置AmazonSSMManagedInstanceCore),执行以下排查:
- 测试EKS控制平面连通性:
curl -v https://<你的集群端点>/api/v1/nodes - 查看kubelet启动日志,定位节点注册失败原因:
journalctl -u kubelet -f - 确认节点安全组允许 outbound 443端口流量到EKS控制平面,控制平面安全组允许来自节点子网的443端口流量。
5. 验证Terraform状态与资源一致性
- 运行
terraform plan检查是否存在未同步的资源配置; - 执行
terraform refresh同步本地状态与AWS实际资源; - 在AWS控制台查看EKS节点组状态,确认是否为
Active。
内容的提问来源于stack exchange,提问作者youttam
相关产品推荐
相关产品推荐

