【问题标题】:Permission error using kubectl after GKE Kubernetes cluster migration from one organization to anotherGKE Kubernetes 集群从一个组织迁移到另一个组织后使用 kubectl 的权限错误
【发布时间】:2021-09-19 13:46:38
【问题描述】:

我在属于组织 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).

这里有什么问题?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine gcloud kubectl


    【解决方案1】:

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

    问题位在用户部分:

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

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

    为了修复它,我直接从 Google Cloud 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}'
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      不要删除任何内容

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

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

      可能只是current-context不正确。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-28
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 2021-08-20
        • 1970-01-01
        • 2018-03-06
        相关资源
        最近更新 更多