GKE 1.26.15集群节点无法执行kubectl命令问题咨询
解决GKE节点上kubectl无法连接API服务器的问题
问题原因
GKE是托管式Kubernetes集群,控制平面(包括kube-apiserver)由GCP负责托管运行,工作节点上不会运行kube-apiserver,所以你在节点上执行kubectl时,它默认尝试连接本地localhost:8080会失败;同时/etc/kubernetes/admin.conf是控制平面节点的配置文件,GKE工作节点本身也不会生成这个文件。
解决步骤
方法1:在节点上通过gcloud获取集群配置
- 如果节点上没有安装gcloud SDK,先安装:
curl https://sdk.cloud.google.com | bash exec -l $SHELL - 授权gcloud访问你的GCP集群:
- 若能通过浏览器登录,执行:
gcloud auth login,按提示完成授权 - 若为无界面环境,可使用服务账号密钥文件:
gcloud auth activate-service-account --key-file=<你的服务账号密钥路径>
- 若能通过浏览器登录,执行:
- 获取集群的kubeconfig配置:
gcloud container clusters get-credentials <你的集群名称> --region <集群所在区域> - 此时kubectl会自动使用生成的kubeconfig,执行
kubectl get pods验证即可。
- 如果节点上没有安装gcloud SDK,先安装:
方法2:从本地复制kubeconfig到节点
- 在本地已配置好gcloud和kubectl的机器上,确认能正常访问集群,找到本地kubeconfig默认路径
~/.kube/config - 通过scp将该文件复制到GKE节点的对应路径:
scp ~/.kube/config <节点用户名>@<节点IP>:~/.kube/config - 登录节点后直接执行
kubectl get pods即可使用。
- 在本地已配置好gcloud和kubectl的机器上,确认能正常访问集群,找到本地kubeconfig默认路径
注意事项
- 不要尝试在GKE工作节点上部署kube-apiserver,这会破坏托管集群的架构
- 确保你使用的账号/服务账号有足够权限访问该GKE集群(至少需要
container.clusters.getCredentials权限)
内容的提问来源于stack exchange,提问作者AWS_Lernar
相关产品推荐
相关产品推荐

