使用eksctl YAML创建EKS私有集群失败及aws sts命令挂起求助
问题根源分析
从报错信息dial tcp 10.0.13.173:443: i/o timeout和aws sts get-caller-identity挂起的现象来看,运行eksctl的EC2实例所在私有子网未配置访问AWS服务的网络路径,导致无法调用AWS API(如EC2、STS、CloudFormation等),进而EKS集群创建失败。
另外,你的YAML配置中privateCluster.enabled: true会默认关闭控制平面的公网访问,但你需求是控制平面同时支持公网和私网访问,这部分配置也存在偏差。
解决方案
1. 修复私有子网的网络访问能力
私有子网内的实例要访问AWS服务,有两种可选方案:
方案A:配置NAT网关(支持访问公网+AWS公共服务)
- 在VPC的公有子网中创建NAT网关,并分配弹性IP
- 更新私有子网的路由表,添加目标为
0.0.0.0/0的路由,指向该NAT网关 - 确保NAT网关所在公有子网有指向Internet网关(IGW)的路由规则
方案B:配置VPC终端节点(仅访问AWS内部服务,无需公网)
如果仅需调用AWS API,无需访问公网,可创建对应服务的VPC终端节点:
- 为EC2、STS、CloudFormation、EKS等服务创建Interface/Gateway类型的终端节点
- 将私有子网的路由表更新为指向这些终端节点
- 确保EC2实例的安全组允许访问终端节点的443端口
2. 修正EKS集群的YAML配置
要实现控制平面同时支持公网和私网访问,需调整privateCluster配置,替换原有的privateCluster.enabled: true为以下内容:
privateCluster: enabled: true endpointPublicAccess: true endpointPrivateAccess: true
完整修正后的配置文件:
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: mydatta-fulleks region: us-east-1 version: "1.25" privateCluster: enabled: true endpointPublicAccess: true endpointPrivateAccess: true vpc: id: vpc-0d31c6395248b8433 subnets: private: us-east-1a: id: subnet-00cb7da5daec56f72 us-east-1b: id: subnet-03ba080c3fd9e6d38 managedNodeGroups: - name: mydatta-eks-ng1 privateNetworking: true instanceType: t3.small desiredCapacity: 1 labels: action: mydatta
3. 验证网络连通性
在EC2实例上先确认网络正常:
- 执行
curl -v https://ec2.us-east-1.amazonaws.com,若收到正常XML响应,说明网络路径有效 - 再执行
aws sts get-caller-identity,确认能返回身份信息,无挂起情况
4. 重新创建EKS集群
先清理之前失败的资源:
eksctl delete cluster --region=us-east-1 --name=mydatta-fulleks
再用修正后的配置文件重新创建集群:
eksctl create cluster -f your-cluster-config.yaml
内容的提问来源于stack exchange,提问作者kishore ram
相关产品推荐
相关产品推荐

