GKE集群升级后.kube/config无access token,仪表盘认证失败求助
解决GKE升级后仪表盘无access-token导致证书认证失败的问题
我之前处理过类似的GKE认证问题,结合你描述的情况,给你几个可行的排查和解决步骤:
1. 手动添加access-token临时恢复访问
先手动生成并填入token,验证是否是token缺失导致的问题:
- 执行以下命令获取当前有效token:
gcloud auth print-access-token - 再获取token过期时间:
gcloud auth print-access-token --format="value(expires_at)" - 打开你的
.kube/config,找到对应cluster-3的user配置块,手动添加access-token和expiry字段,像你同事的配置那样:
保存后再尝试访问仪表盘,看是否能正常认证。user: auth-provider: config: access-token: 刚才获取的token值 cmd-args: config config-helper --format=json cmd-path: /home/user/Dev/google-cloud-sdk/bin/gcloud expiry: 刚才获取的过期时间 expiry-key: '{.credential.token_expiry}' token-key: '{.credential.access_token}' name: gcp
2. 检查kubectl与GKE集群的版本兼容性
你的kubectl客户端版本是v1.8.4,而GKE集群升级后版本大概率高于这个(比如v1.9+)。Kubernetes官方要求kubectl版本和集群版本的差异不能超过1个大版本,版本不匹配可能导致认证流程异常,无法自动生成access-token。
- 升级kubectl到与集群匹配的版本:
这个命令会安装和你当前GKE集群兼容的kubectl版本,之后重新执行gcloud components install kubectlgcloud container clusters get-credentials刷新配置。
3. 验证应用默认凭据(Application Default Credentials)
GKE仪表盘有时候会依赖应用默认凭据而非普通的gcloud用户凭据,你可以检查并刷新这部分认证:
- 尝试获取应用默认token:
如果输出错误,重新进行应用默认认证:gcloud auth application-default print-access-token
完成后再次刷新kubeconfig:gcloud auth application-default logingcloud container clusters get-credentials cluster-3 --zone xxx --project xxx
4. 确认kubeconfig上下文正确性
确保你当前使用的是cluster-3的正确上下文:
- 查看当前上下文:
kubectl config current-context - 如果不是目标集群,切换上下文:
kubectl config use-context gke_<你的项目ID>_<你的zone>_cluster-3
5. 检查GKE集群的认证配置
登录GCP控制台,找到你的cluster-3集群,进入集群详情 > 安全 > 认证部分:
- 确认“允许控制面访问”中包含你的gcloud账号对应的身份,或者确认集群启用了基于gcloud的认证模式。有时候集群升级可能会重置部分认证配置,需要手动确认。
从你提供的命令结果来看,gcloud config list已经正确配置了账号和项目,get-credentials也成功生成了kubeconfig,所以核心问题大概率出在版本不匹配或者凭据生成的流程异常上面,先从前面两个步骤开始排查应该能解决问题。
内容的提问来源于stack exchange,提问作者MarkNS
相关产品推荐
相关产品推荐

