我在一个属于组织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。我们按照文档成功做到了。
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
),并用cluster
、context
和user
属性填充它。
我怀疑(!?),你的KUBECONFIG
变得不一致。
您应该能够直接编辑它以更好地了解正在发生的事情。
有3个主块clusters
,contexts
和users
。您正在寻找旧 GKE 集群和新 GKE 集群的条目(cluster
、context
、user
各一个)。
不要删除任何内容
要么先备份文件,要么重新name
条目。
每个部分都有一个反映 GKE 集群名称name
属性gke_${PROJECT}_${LOCATION}_${CLUSTER}
可能只是current-context
不正确。
注意:即使
gcloud
为每个群集创建user
条目,这些条目通常是相同的(每个用户),因此您可以简化本节。
注意如果您总是使用
gcloud
,它在整理(删除条目)方面也做得很好。