【问题标题】:No access token in .kube/config.kube/config 中没有访问令牌
【发布时间】:2018-06-18 06:49:37
【问题描述】:

在 GKE 中升级我的集群后,仪表板将不再接受证书身份验证。

没问题,我的同事说 .kube/config 中有一个可用的令牌

  user:
    auth-provider:
      config:
        access-token: REDACTED
        cmd-args: config config-helper --format=json
        cmd-path: /home/user/workspace/google-cloud-sdk/bin/gcloud
        expiry: 2018-01-09T08:59:18Z
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp

除了我的情况没有...

  user:
    auth-provider:
      config:
        cmd-args: config config-helper --format=json
        cmd-path: /home/user/Dev/google-cloud-sdk/bin/gcloud
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp

我尝试过使用 gcloud 重新进行身份验证、与同事比较 gcloud 设置、更新 gcloud、重新安装 gcloud、检查 Cloud Platform 中的权限。几乎我能想到的所有东西,仍然不会生成访问令牌。

有人可以帮忙吗?!

 $ gcloud container clusters get-credentials cluster-3 --zone xxx --project xxx                            
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-3.

$ gcloud config list                                                                                                    
[core]
account = xxx
disable_usage_reporting = False
project = xxx

Your active configuration is: [default]

$ kubectl version                                                                                                                    
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4"

【问题讨论】:

    标签: kubernetes gcloud google-kubernetes-engine kubernetes-security


    【解决方案1】:

    好的,非常烦人和愚蠢的答案 - 您必须使用 kubectl 发出任何请求才能生成令牌并将其保存到 kubeconfig 文件中。

    【讨论】:

    • 有没有办法绕过这个?我可以在不从 kubectl 发出请求的情况下以某种方式获取配置文件中的访问令牌吗?
    • 那么,用kubectlkubectl get namespaces 做一个use-context?我需要切换上下文,因为我必须使用多个集群。
    【解决方案2】:

    您提到您“在 GKE 中更新了集群” - 我确定您实际做了什么,所以我将其解释为生成一个新集群。有两件事要确保您似乎没有在问题陈述中涵盖 - 一是启用了 kubectl,二是您实际上可以生成一个新的 kubeconfig 文件(您可以很容易地引用旧的 ~/.kube /conf 来自 GKE 中更新前的集群)。因此,执行这些命令可确保您获得所需的正确身份验证并且该令牌应该可用:
    $ gcloud components install kubectl $ gcloud container clusters create <cluster-name> $ gcloud container clusters get-credentials <cluster-name>

    然后...生成 kubeconfig 文件(假设您有一个在 GCP 上运行的集群和为项目/GKE 配置的服务帐户,已运行 kubectl proxy 等):
    $ gcloud container clusters get-credentials &lt;cluster_id&gt;

    这将创建一个 ${HOME}/.kube/config 文件,其中包含令牌。检查配置文件,您将看到令牌值:
    $ cat ~/.kube/config

    $ kubectl config view 将其显示在屏幕上...

    ... users: - name: gke_<project_id><zone><cluster_id> user: auth-provider: config: access-token: **<COPY_THIS_TOKEN>** cmd-args: config config-helper --format=json cmd-path: ...path-to.../google-cloud-sdk/bin/gcloud expiry: 2018-04-13T23:11:15Z expiry-key: '{.credential.token_expiry}' token-key: '{.credential.access_token}' name: gcp

    复制该令牌后,返回http://localhost:8001/ 并选择“令牌”,然后将令牌值粘贴到那里...很好

    【讨论】:

    • 嗯,您几乎只是在这里重复了问题中的信息。
    • 我编辑了回复,希望对您有所帮助 - 如果您可以从命令行生成凭据并让 kubectl 正常工作,那么这个答案应该可以帮助您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2015-09-27
    • 2016-09-18
    • 2023-04-07
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多