GKE Kubernetes 集群从一个组织迁移到另一个组织后使用 kubectl 出现权限错误

Permission error using kubectl after GKE Kubernetes cluster migration from one organization to another

我在属于组织 org1 的项目中创建了一个 GKE 集群 my-cluster。

创建集群时,我使用 gcloud auth login 使用 user@org1.com 登录,并使用 gcloud container clusters get-credentials my-cluster --region europe-west4 --project project.

配置本地 kubeconfig

最近我们不得不将这个项目(使用 GKE 集群)迁移到另一个组织 org2。我们成功了following the documentation.

org2 中的 IAM 所有者是 user@org2.com。为了重新配置 kube 配置,我按照前面的步骤进行了操作,在本例中使用 user@org2.com:

登录

gcloud auth login

gcloud container clusters get-credentials my-cluster --region europe-west4 --project project.

当我执行 kubectl get pods 时,我收到引用旧 org1 用户的错误:

Error from server (Forbidden): pods is forbidden: User "user@org1.com" cannot list resource "pods" in API group "" in the namespace "default": requires one of ["container.pods.list"] permission(s).

这里有什么问题?

这可能不是 的答案,但希望它是答案的一部分。

gcloud container clusters get-credentials 是一个方便的函数,它改变局部 ${KUBECONFIG}(通常是 ~/.kube/config)并用 clustercontext 和 [=15 填充它=]属性。

我怀疑(!?),你的KUBECONFIG变得不一致

您应该能够直接编辑它以更好地了解发生了什么。

有 3 个主要块 clusterscontextsusers。您要查找旧 GKE 集群的条目(clustercontextuser 各一个) 和新 GKE 集群的

不要删除任何东西

要么先备份文件,要么重新name 条目。

每个部分都会有一个反映 GKE 集群名称的 name 属性 gke_${PROJECT}_${LOCATION}_${CLUSTER}

可能只是 current-context 不正确。

NOTE Even though gcloud creates user entries for each cluster, these are usually identical (per user) and so you can simplify this section.

NOTE If you always use gcloud, it does a decent job of tidying up (removing entries) too.

我接受了 DazWilking 的回答,因为在某种程度上他是对的,配置文件“不一致”。

有问题的位在用户部分:

  user:
    auth-provider:
      config:
        access-token: xxxxxx      
        expiry: "2021-07-11T18:36:42Z"

出于某种原因,当使用 gcloud container clusters get-credential 命令时,它创建了所有项目(集群、上下文和用户),其中包含无效的用户部分。

为了修复它,我直接从 Google 云 Web 控制台连接到云 shell 并检查了那里的 ./kube/config 文件。我的本地配置缺少 cmd-path、cmd-args、expiry-key 和 token-key 条目:

  user:
    auth-provider:
      config:
        access-token: xxx
        cmd-args: config config-helper --format=json
        cmd-path: /Users/xxx/applications/google-cloud-sdk/bin/gcloud
        expiry: "2021-07-11T18:36:42Z"
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'