it-swarm-ja.com

Kubernetesとgcloud:サービスアカウントの使用を停止する方法は?

私は多くのGoogleCloudServicesを使用しています。私が働いているクラウドストレージバケットのいくつかは、自分のアカウントからアクセスできるプロジェクト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に保存されている特定のビットバケットにアクセスできましたが、その後、Argoを使用してkubernetesワークフローを送信する必要があったため、アカウントに戻ってコマンドを使用してプロジェクトを作成しました

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

「gcloudauthlist」を使用すると、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を使用すると、同じエラーが発生します。 「gsutills」のようなgcloudコマンドは、正しいアカウントとプロジェクトにいるかのように機能するため、これにはかなり混乱しています。 kubernetesがまだサービスアカウントを使用していると見なすのはなぜですか。また、kubernetesで必要なことを再度実行できるように、サービスアカウントの使用を停止するにはどうすればよいですか。私が実行しようとしているコマンドとパイプラインは、サービスアカウントをアクティブ化する前に完全に正常に機能しました。

1
Nathan Ricke

実行する必要があったことがわかりました

gcloud container clusters get-credentials mycluster

当初、~/.kube/configでkubeconfigファイルを削除してからget-credentialsコマンドを実行することでこれを修正する必要があると思いましたが、コメントで指摘されているように、get-credentialsコマンドがすべてであることがわかりました必要でした。

この問題は、gcloudサービスアカウントがアクティブなときにargoコマンドを実行すると明らかになります。コマンドは最初に失敗し、その後のすべてのkubectlコマンドはこの権限エラーを返します。サービスアカウントに切り替えてgcloudコマンドを実行してからアカウントに戻した場合、kubectlの動作には影響しません。

3
Nathan Ricke