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에 저장된 특정 비트버킷에 액세스할 수 있었지만 나중에 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

처음에는 get-credentials 명령을 실행할 때 kubeconfig 파일을 삭제하여 이 문제도 해결해야 한다고 생각했지만 ~/.kube/config , 주석에서 지적한 대로 get-credentials 명령만 있으면 충분하다는 것이 밝혀졌습니다.

특히 gcloud 서비스 계정이 활성화된 동안 argo 명령어를 실행하면 문제가 표면화되는 것으로 보입니다. 명령어가 먼저 실패하고 모든 후속 kubectl 명령어가 이 권한 오류를 반환합니다. 서비스 계정으로 전환하고 gcloud 명령어를 실행한 다음 내 계정으로 다시 전환하면 kubectl의 동작에 영향을 미치지 않습니다.

관련 정보