【问题标题】:MetadataServerException when using GKE Workload Identity使用 GKE 工作负载标识时出现 MetadataServerException
【发布时间】:2019-07-28 13:27:57
【问题描述】:

我正在尝试在我的集群上启用 Workload Identity,但在从 pod 进行测试时出现以下错误:

root@workload-identity-test:/# gcloud auth list
ERROR: gcloud crashed (MetadataServerException): HTTP Error 500: Internal Server Error

If you would like to report this issue, please run the following command:
  gcloud feedback

To check gcloud for common problems, please run the following command:
  gcloud info --run-diagnostics

我已启用workload-metadata-from-node:

gcloud beta container node-pools update NAME --cluster NAME --workload-metadata-from-node=GKE_METADATA_SERVER
Updating node pool main...done.

即使我将--log-http 添加到命令中,它似乎也没有显示返回 500 的请求(也没有关键的响应)。

有什么想法吗? (我在新集群上遇到同样的错误)

【问题讨论】:

    标签: google-kubernetes-engine gcloud google-iam


    【解决方案1】:

    更新从那时起,我就可以使用工作负载身份用户来完成这项工作。如果您仍然遇到问题,我建议您遵循John's Answer 中概述的删除重新创建提示。

    根据运行测试的节点上的gke-metadata-xxxx pod 记录的错误,我需要使用roles/iam.serviceAccountTokenCreator 而不是上面链接教程中建议的roles/iam.workloadIdentityUser

    这使我可以按预期使用该功能,但是由于角色是not documented,我不确定通过进行此切换我可能授予了哪些额外权限。

    【讨论】:

    【解决方案2】:

    我今天遇到了这个问题。使用角色(roles/iam.serviceAccountTokenCreator 和 roles/roles/iam.workloadIdentityUser)一切正常,并且我的 Google Cloud Credentials API 也已启用。

    如果您在确保满足上述所有要求后再次遇到此问题,请删除 Kubernetes 服务帐户并重新创建它。您还必须重新启动正在使用服务帐户的 Pod,以便它们可以获取新的服务帐户令牌。

    最后,一切都会重新开始。

    【讨论】:

      【解决方案3】:

      roles/iam.serviceAccountTokenCreator 模拟服务帐户(创建 OAuth2 访问令牌、签署 blob 或 JWT 等) roles/roles/iam.workloadIdentityUser 模拟来自 GKE 工作负载的服务帐户。这两个角色都记录在 here 中,您可以看到每个角色拥有的权限。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,但我可以通过在控制台上启用“IAM 服务帐户凭据 API”来解决它。 https://console.developers.google.com/apis/api/iamcredentials.googleapis.com/overview

        【讨论】:

          【解决方案5】:

          所以我遇到了同样的问题,直到我意识到我忘记执行注释步骤来完成绑定。

          我认为你需要以下内容;

          • roles/roles/iam.workloadIdentityUser

          gcloud config set project gsa_project
          gcloud iam service-accounts add-iam-policy-binding \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:cluster_project.svc.id.goog[k8s_namespace/ksa_name]" \
            gsa_name@gsa_project.iam.gserviceaccount.com
          • iam.gke.io/gcp-service-account

          kubectl annotate serviceaccount \
            --namespace k8s_namespace \
             ksa_name \
             iam.gke.io/gcp-service-account=gsa_name@gsa_project.iam.gserviceaccount.com
          • IAM 服务账户凭证 API

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-11-07
            • 2021-09-01
            • 2022-09-30
            • 1970-01-01
            • 1970-01-01
            • 2022-12-07
            • 2019-09-04
            • 2021-05-01
            相关资源
            最近更新 更多