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



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

创建集群时,我使用gcloud auth loginuser@org1.com 登录并使用gcloud container clusters get-credentials my-cluster --region europe-west4 --project project配置本地 kubeconfig

。最近,我们不得不将这个项目(使用 GKE 集群)迁移到另一个组织 org2。我们按照文档成功做到了。

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).

这里有什么问题?

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

有问题的位在用户部分:

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

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

为了修复它,我直接从Google Cloud Web控制台连接到云外壳,并在那里检查了./kube/config文件。我的本地配置缺少cmd路径,cmd参数,到期密钥和令牌密钥条目:

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}'

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

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

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

您应该能够直接编辑它以更好地了解正在发生的事情。

有3个主块clusterscontextsusers。您正在寻找旧 GKE 集群新 GKE 集群的条目(clustercontextuser各一个)。

不要删除任何内容

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

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

可能只是current-context不正确。

注意:即使gcloud为每个群集创建user条目,这些条目通常是相同的(每个用户),因此您可以简化本节。

注意如果您总是使用gcloud,它在整理(删除条目)方面也做得很好。

相关内容

最新更新