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

配置EKS与ECR VPC端点时节点组无法加入集群的问题

问题诊断与解决方案

核心矛盾点

EKS集群**强制要求VPC必须开启enable_dns_support和enable_dns_hostnames**才能正常运行,关闭这两项虽然能让节点临时加入,但会直接破坏VPC端点的DNS解析能力,导致ECR无法解析到私有IP。所以节点加入失败的问题,必然出在开启这两项后的其他配置疏漏上。

可能的原因及修复步骤

1. 节点子网路由表配置错误

  • 公有子网的路由表必须包含指向互联网网关(IGW)的默认路由(0.0.0.0/0 -> IGW),确保节点能出站访问EKS控制平面的公网API端点。
  • 同时要给ECR的VPC端点添加对应路由条目:将*.dkr.ecr.<region>.amazonaws.com和*.ecr.<region>.amazonaws.com的流量指向VPC端点的网络接口,保证ECR流量走内网。

2. 节点IAM角色权限缺失

  • 节点加入集群需要AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly等核心权限,还要允许访问EKS的OIDC提供商。
  • 检查Terraform中节点IAM角色的权限策略,确保包含:
    • 调用eks:DescribeCluster获取集群信息的权限
    • ECR镜像拉取的只读权限
    • 节点与EKS控制平面建立连接的相关权限
  • 确认角色信任策略正确,允许ec2.amazonaws.com扮演该角色。

3. 安全组限制了节点与控制平面的通信

  • 节点安全组必须允许出站访问443端口到EKS控制平面的IP范围(或公网0.0.0.0/0的443端口,若控制平面为公网端点),保证节点能连接到集群API。
  • 控制平面安全组必须允许来自节点安全组的10250端口入站流量,让控制平面能访问节点的kubelet服务。

4. VPC端点的私有DNS未启用

  • 配置ECR的VPC端点时,必须在Terraform的vpc_endpoint资源中设置private_dns_enabled = true,AWS才会自动修改VPC的私有DNS记录,让ECR域名解析到VPC端点的私有IP。
  • 若未开启此参数,即使VPC DNS正常,ECR域名仍会解析为公网IP,无法使用VPC端点。

5. 节点启动用户数据配置错误

  • 检查节点组的用户数据,确保kubelet启动参数正确指向EKS集群的API服务器端点,比如:
    /etc/eks/bootstrap.sh <cluster-name> --kubelet-extra-args "--node-labels=eks.amazonaws.com/nodegroup=<nodegroup-name>"
    
  • 若用户数据中的集群CA证书、注册命令配置错误,节点即使网络正常也无法加入集群。

验证步骤

  1. 先恢复VPC的enable_dns_support = true和enable_dns_hostnames = true设置,这是EKS正常运行的基础。
  2. 逐一排查并修正上述路由表、IAM角色、安全组、VPC端点DNS、用户数据的配置问题。
  3. 重新创建节点组,确认节点能正常加入集群。
  4. 在节点上执行nslookup <account-id>.dkr.ecr.<region>.amazonaws.com,验证ECR域名解析到VPC端点的私有IP。

内容的提问来源于stack exchange,提问作者Container-Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:22:05