使用GKE工作负载标识时出现MetadataServerException

时间:2019-07-28 13:27:57

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

我正在尝试在群集上启用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的请求(同样至关重要的是它的响应)。

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

5 个答案:

答案 0 :(得分:1)

基于运行测试的节点上gke-metadata-xxxx窗格记录的错误,我需要使用roles/iam.serviceAccountTokenCreator代替上面链接的教程中建议的roles/iam.workloadIdentityUser。 / p>

这使我能够按预期使用该功能,但是由于角色为not documented,因此我不确定通过此切换可能会授予哪些附加权限。

答案 1 :(得分:1)

roles/iam.serviceAccountTokenCreator模拟服务帐户(创建OAuth2访问令牌,签名Blob或JWT等) 和roles/roles/iam.workloadIdentityUser模拟来自GKE Workloads的服务帐户。这两个角色均记录在here中,您可以看到每个角色具有的权限。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

我的看法是,您需要以下内容;

  • 角色/角色/iam.workloadIdentityUser

<Field
  label="first name"
  component={Input}
  name={`patients[${index}].firstName`}
/>

  • iam.gke.io/gcp-service-account

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服务帐户凭据API