问题描述
我正在尝试将我的 Google 服务帐户 (GSA) 绑定到我的 Kubernetes 服务帐户 (KSA),以便我可以从 Google Kubernetes Engine (GKE) 连接到我的 Cloud sql 数据库。我目前正在使用 Google 文档 (https://cloud.google.com/sql/docs/sqlserver/connect-kubernetes-engine) 中提供的遵循指南。
目前,我在 GKE 上运行了一个名为 MY_CLUSTER
的集群、一个名为 MY_GCP_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
的具有正确 Cloud sql 权限的 GSA,以及一个名为 MY_K8S_SERVICE_ACCOUNT
的 KSA。我正在尝试使用以下命令绑定两个帐户。
gcloud iam service-accounts add-iam-policy-binding \
--member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/MY_K8S_SERVICE_ACCOUNT]" \
--role roles/iam.workloadIdentityUser \
MY_GCP_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
ERROR: Policy modification Failed. For a binding with condition,run "gcloud alpha iam policies lint-condition" to identify issues in condition.
ERROR: (gcloud.iam.service-accounts.add-iam-policy-binding) INVALID_ARGUMENT: Identity Pool does not exist (PROJECT_ID.svc.id.goog). Please check that you specified a valid resource name as returned in the `name` attribute in the configuration API.
当我尝试将 GSA 绑定到 KSA 时,为什么会出现此错误?
解决方法
为了将您的 Google 服务帐户 (GSA) 绑定到您的 Kubernetes 服务帐户 (KSA),您需要在集群上启用工作负载身份。 Google 的文档 (https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) 中对此进行了更详细的解释。
要在您可以运行的现有集群上启用 Workload Identity。
gcloud container clusters update MY_CLUSTER \
--workload-pool=PROJECT_ID.svc.id.goog