Kubernetes 和 gcloud:如何停止使用服务账户?

Kubernetes 和 gcloud:如何停止使用服务账户?

我使用多种 Google Cloud 服务。我工作时使用的 Cloud Storage 存储桶中有些位于项目 A 中,可以通过我自己的帐户访问,有些位于项目 B 中,我只能通过服务帐户访问。我使用

gcloud auth activate-service-account --key-file mykey.json

在后续登录中我只是使用

gcloud config set account service_account

我还需要切换我的活动项目,为此我使用了命令

gcloud config set project project-B

服务帐户运行良好,允许我访问存储在 Google Cloud Storage 上的特定 bitbucket,但之后我需要使用 Argo 提交 kubernetes 工作流,因此我使用以下命令切换回我的帐户和项目

gcloud config set account my_account
gcloud config set project project-A

使用“gcloud auth list”我可以看到 my_account 处于活动状态

ACTIVE  ACCOUNT
        service_account.iam.gserviceaccount.com
*       my_account

但是当我尝试提交运行“kubectl -n default get services”时出现以下错误:

Error from server (Forbidden): services is forbidden: User "service_account.iam.gserviceaccount.com" cannot list resource "services" in API group "" in the namespace "default": Required "container.services.list" permission.

当我使用 my_namespace 而不是 default 时,我得到了同样的错误。我对此感到很困惑,因为 gcloud 命令(如“gsutil ls”)的运行就像我在正确的帐户和项目中一样。为什么 kubernetes 仍然认为我正在使用服务帐户,我该如何让它停止使用它,以便我可以再次使用 kubernetes 执行我需要的操作?在激活服务帐户之前,我尝试运行的命令和管道运行正常。

答案1

事实证明我只需要跑

gcloud container clusters get-credentials mycluster

最初,我认为我还需要通过删除我的 kubeconfig 文件然后 ~/.kube/config 运行 ​​get-credentials 命令来解决这个问题,但正如评论中指出的那样,事实证明 get-credentials 命令就是所需的全部命令。

该问题似乎特别出现在 gcloud 服务帐户处于活动状态时运行 argo 命令时:该命令首先会失败,然后所有后续 kubectl 命令都会返回此权限错误。如果我切换到服务帐户,运行 gcloud 命令,然后切换回我的帐户,则不会影响 kubectl 的行为。

相关内容