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

Terraform创建GKE集群时dns_config.cluster_dns_scope状态为空导致持续变更计划问题排查

解决Terraform GKE集群cluster_dns_scope状态为空导致重复变更的问题

这种情况我之前也碰到过,结合你使用的Google Provider v4.12.0版本来看,大概率是Provider存在dns_config字段的状态同步bug,给你几个实用的解决方案:

1. 升级Google Provider到较新版本

Google Provider的早期v4.x版本确实存在过cluster_dns_scope字段无法正确写入Terraform状态文件的问题,后续版本已经修复了这个bug。建议你把Provider版本升级到v4.30.0及以上。

修改你的required_providers配置:

terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = ">= 4.30.0"
    }
  }
}

执行terraform init -upgrade完成版本升级,再重新执行terraform apply,之后状态文件就能正确保存cluster_dns_scope的值,不会再出现重复变更提示。

2. 使用lifecycle.ignore_changes临时屏蔽变更(适合无法升级Provider的场景)

如果因为项目限制暂时无法升级Provider,可以通过Terraform的生命周期配置忽略这个字段的变更检测,让terraform plan不再提示这个无效的变更。

修改你的google_container_cluster资源:

resource "google_container_cluster" "primary" {
  name                     = local.cluster_name
  location                 = local.region
  remove_default_node_pool = true
  initial_node_count       = 1
  network                  = module.gke_vpc.network_name
  subnetwork               = module.gke_vpc.subnetwork_name
  project                  = local.project

  dns_config {
    cluster_dns        = "CLOUD_DNS"
    cluster_dns_scope  = "VPC_SCOPE"
  }

  # 添加生命周期块,忽略cluster_dns_scope的变更检测
  lifecycle {
    ignore_changes = [
      dns_config[0].cluster_dns_scope,
    ]
  }
}

这里注意dns_config[0]的索引,因为Terraform把嵌套的dns_config块视为列表类型,需要用索引0定位。

3. 验证GKE集群的实际DNS配置

先用gcloud命令确认集群的实际DNS配置是否正确,排除API层面的问题:

gcloud container clusters describe ${local.cluster_name} --location ${local.region} --format="value(dnsConfig.clusterDnsScope)"

如果返回的是VPC_SCOPE,说明集群本身配置没问题,完全是Terraform Provider的状态同步bug,直接升级Provider就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:57:42