使用Terraform创建AWS EKS集群后节点不显示及kubectl认证报错
一、解决kubectl认证报错(invalid apiVersion "client.authentication.k8s.io/v1alpha1")
这个错误源于kubeconfig文件使用了已废弃的client.authentication.k8s.io/v1alpha1 API版本,高版本kubectl不再支持该版本,按以下步骤修复:
修改kubeconfig文件
找到默认路径~/.kube/config的kubeconfig文件,定位到用户配置段的exec部分,将apiVersion字段替换为client.authentication.k8s.io/v1beta1或client.authentication.k8s.io/v1:users: - name: arn:aws:eks:<区域>:<账号ID>:cluster/<集群名称> user: exec: apiVersion: client.authentication.k8s.io/v1beta1 # 替换为该版本或v1 command: aws args: - eks - get-token - --cluster-name - <集群名称> - --region - <区域>重新生成kubeconfig(推荐)
使用AWS CLI命令直接生成适配当前kubectl版本的kubeconfig,覆盖旧配置:aws eks update-kubeconfig --region <你的集群区域> --name <集群名称>执行后运行
kubectl get nodes验证认证问题是否解决。
二、解决EKS控制台看不到节点的问题
若kubectl认证问题修复后仍无节点显示,或控制台始终看不到节点,按以下步骤排查:
确认节点组状态
通过Terraform检查节点组资源状态:terraform state list | grep node_group terraform show <节点组资源ID>确保节点组状态为
ACTIVE,且对应EC2实例处于running状态。检查节点IAM角色权限
节点使用的IAM角色必须包含以下托管策略:AmazonEKSWorkerNodePolicyAmazonEKS_CNI_PolicyAmazonEC2ContainerRegistryReadOnly
若缺少策略,添加后重启节点实例。
验证安全组配置
- 节点安全组需允许出站访问EKS控制平面的443端口
- EKS控制平面安全组需允许来自节点安全组的入站访问6443端口
确保两组安全组规则配置正确。
查看节点日志排查注册失败原因
登录EC2节点实例,查看kubelet实时日志:journalctl -u kubelet -f或查看系统日志提取kubelet相关信息:
cat /var/log/messages | grep kubelet日志会明确节点无法注册到集群的具体原因(如证书错误、API服务器连接失败等)。
确认集群与节点版本兼容性
EKS集群版本与节点kubelet版本需保持兼容(允许相差一个小版本,如集群1.28对应节点1.27/1.28/1.29),版本差异过大可能导致节点无法注册。
内容的提问来源于stack exchange,提问作者user1821091

