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
)并用 cluster
、context
和 [=15 填充它=]属性。
我怀疑(!?),你的KUBECONFIG
变得不一致。
您应该能够直接编辑它以更好地了解发生了什么。
有 3 个主要块 clusters
、contexts
和 users
。您要查找旧 GKE 集群的条目(cluster
、context
、user
各一个) 和新 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}'
我在属于组织 org1 的项目中创建了一个 GKE 集群 my-cluster。
创建集群时,我使用 gcloud auth login
使用 user@org1.com 登录,并使用 gcloud container clusters get-credentials my-cluster --region europe-west4 --project project
.
最近我们不得不将这个项目(使用 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
)并用 cluster
、context
和 [=15 填充它=]属性。
我怀疑(!?),你的KUBECONFIG
变得不一致。
您应该能够直接编辑它以更好地了解发生了什么。
有 3 个主要块 clusters
、contexts
和 users
。您要查找旧 GKE 集群的条目(cluster
、context
、user
各一个) 和新 GKE 集群的。
不要删除任何东西
要么先备份文件,要么重新name
条目。
每个部分都会有一个反映 GKE 集群名称的 name
属性 gke_${PROJECT}_${LOCATION}_${CLUSTER}
可能只是 current-context
不正确。
NOTE Even though
gcloud
createsuser
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}'