排查 GKE 中的服务账号问题


本页面介绍了如何排查 Google Kubernetes Engine (GKE) 服务账号的问题。

将默认服务账号恢复到您的 Google Cloud 项目

GKE 的默认服务账号 container-engine-robot 可能会意外地从项目中解除绑定。Kubernetes Engine Service Agent 角色 (roles/container.serviceAgent) 是一种 Identity and Access Management (IAM) 角色,它授予服务账号管理集群资源的权限。如果从服务账号中移除此角色绑定,则默认服务账号将从项目中解除绑定,这可能会阻止您部署应用和执行其他集群操作。

如需查看服务账号是否已从项目中移除,您可以使用 Google Cloud 控制台或 Google Cloud CLI。

控制台

gcloud

  • 运行以下命令:

    gcloud projects get-iam-policy PROJECT_ID
    

    PROJECT_ID 替换为您的项目 ID。

如果信息中心或该命令未针对服务账号显示 container-engine-robot,则表示角色已解除绑定。

如需恢复 Kubernetes Engine Service Agent 角色 (roles/container.serviceAgent) 绑定,请运行以下命令:

PROJECT_NUMBER=$(gcloud projects describe "PROJECT_ID" \
    --format 'get(projectNumber)') \
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-${PROJECT_NUMBER?}@container-engine-robot.iam.gserviceaccount.com" \
    --role roles/container.serviceAgent

确认角色绑定已恢复:

gcloud projects get-iam-policy $PROJECT_ID

如果您看到服务账号名称以及 container.serviceAgent 角色,则表示角色绑定已恢复。例如:

- members:
  - serviceAccount:service-1234567890@container-engine-robot.iam.gserviceaccount.com
  role: roles/container.serviceAgent

启用 Compute Engine 默认服务账号

用于节点池的服务账号通常是 Compute Engine 默认服务账号。如果此默认服务账号已停用,节点可能无法向集群注册。

如需查看服务账号是否已在项目中停用,您可以使用 Google Cloud 控制台或 gcloud CLI。

控制台

gcloud

  • 运行以下命令:
gcloud iam service-accounts list  --filter="NAME~'compute' AND disabled=true"

如果服务账号已停用,请运行以下命令以启用服务账号:

gcloud iam service-accounts enable PROJECT_ID[email protected]

PROJECT_ID 替换为您的项目 ID。

如需了解详情,请参阅排查节点注册问题

错误 400/403:缺少账号的修改权限

如果服务账号已删除,您可能会看到缺少修改权限的错误。如需了解如何排查此错误,请参阅错误 400/403:缺少账号的修改权限

后续步骤

如果您需要其他帮助,请与 Cloud Customer Care 联系。