You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform创建GKE集群时默认节点池权限错误求助

问题

使用Terraform在GCP创建Kubernetes集群时遇到默认节点池权限错误:

  • 操作使用的是拥有Owner权限的服务账号,Terraform代码会创建集群、自定义节点池,以及绑定Editor角色的k8s_service_account服务账号
  • 集群配置已设置remove_default_node_pool = true,但默认节点池仍会先尝试创建,集群创建约7分钟后报错:

Error: Error waiting for creating GKE cluster: Google Compute Engine: Not all instances running in IGM after 13.089515691s. Expected 1, running 0, transitioning 1. Current errors:
[PERMISSIONS_ERROR]: Instance 'gke-prod-app-cluster-default-pool*' creation failed: Required 'compute.instances.create' permission for '*gke-prod-app-cluster-default-pool-5ae5b52e-zhnf' (when acting as '477921717275@cloudservices.gserviceaccount.com');
Required 'compute.disks.create'
Required 'compute.disks.setLabels'
Required 'compute.subnetworks.use'
Required 'compute.subnetworks.useExternalIp'

  • 经确认477921717275@cloudservices.gserviceaccount.com是Google托管服务账号,但在项目中无法找到,尝试以下操作未解决:
    1. 搜索相关方案无有效结果
    2. 为477921717275-compute@developer.gserviceaccount.com授予全权限
    3. 尝试为477921717275@cloudservices.gserviceaccount.com绑定Editor角色,但Terraform apply时该绑定被删除

解决方案

1. 阻止默认节点池初始创建

GKE即使配置了remove_default_node_pool = true,仍会先创建默认节点池再删除。添加initial_node_count = 0可以直接跳过默认节点池的初始化,从根源避免权限校验问题:

resource "google_container_cluster" "prod_app_cluster" {
  name                     = "prod-app-cluster"
  location                 = "us-central1"
  remove_default_node_pool = true
  initial_node_count       = 0 # 关键配置,阻止默认节点池创建

  # 其他集群配置(如网络、认证等)...
}

2. 为Google托管服务账号绑定必要权限

如果上述方法不生效,可通过gcloud命令或Terraform为477921717275@cloudservices.gserviceaccount.com绑定所需角色(该账号是GKE后台使用的托管账号,无法在IAM控制台直接显示):

  • 使用gcloud命令授权:
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member="serviceAccount:477921717275@cloudservices.gserviceaccount.com" \
  --role="roles/compute.instanceAdmin.v1"
  • 通过Terraform管理权限绑定(需避免被其他IAM策略资源覆盖):
resource "google_project_iam_binding" "gcs_service_account_perms" {
  project = var.project_id
  role    = "roles/compute.instanceAdmin.v1"

  members = [
    "serviceAccount:477921717275@cloudservices.gserviceaccount.com",
  ]
}

注意:不要使用google_project_iam_policy资源(会完全替换项目IAM策略),否则会丢失该绑定权限。

3. 明确资源依赖关系

确保自定义节点池在集群创建完成后再启动创建,避免时序问题:

resource "google_container_node_pool" "custom_pool" {
  name       = "custom-pool"
  cluster    = google_container_cluster.prod_app_cluster.name
  location   = google_container_cluster.prod_app_cluster.location
  node_count = 3

  # 其他节点池配置...

  depends_on = [google_container_cluster.prod_app_cluster]
}

内容的提问来源于stack exchange,提问作者Harout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:40:17