Kubernetes 和 gcloud:如何停止使用服務帳號?

Kubernetes 和 gcloud:如何停止使用服務帳號?

我使用多種 Google 雲端服務。我工作的一些 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 而不是預設值時,我得到相同的錯誤。我對此感到相當困惑,因為像「gsutil ls」這樣的 gcloud 命令的功能就好像我在正確的帳戶和專案中一樣。為什麼 kubernetes 仍然認為我正在使用服務帳戶,如何讓它停止使用它,以便我可以再次使用 kubernetes 執行我需要的操作?在啟動服務帳戶之前,我嘗試運行的命令和管道工作得非常好。

答案1

事實證明我只需要跑步

gcloud container clusters get-credentials mycluster

最初,我認為我還需要透過刪除 kubeconfig 檔案然後 ~/.kube/config 執行 get-credentials 命令來解決此問題,但正如評論中指出的那樣,事實證明 get-credentials 命令就是必需的。

這個問題似乎是在 gcloud 服務帳戶處於活動狀態時執行 argo 命令時特別出現的:該命令首先會失敗,然後所有後續 kubectl 命令都會傳回此權限錯誤。如果我切換到服務帳戶,執行 gcloud 命令,然後切換回我的帳戶,則不會影響 kubectl 的行為。

相關內容