Terraform对接GKE集群时报data.google_container_cluster.cluster.endpoint为空如何解决
报错原因与解决方法
你遇到的data.google_container_cluster.cluster.endpoint is null报错,核心原因是google_container_cluster数据源读取集群信息失败,返回的结果为空,具体解决步骤如下:
1. 修正数据源参数冲突
google_container_cluster数据源不允许location和zone两个参数同时填写,你需要根据集群实际类型删除其中一个:
- 若集群为单可用区集群,删除
location = "asia-southeast1"配置,仅保留zone = "asia-southeast1-a" - 若集群为多可用区区域级集群,删除
zone = "asia-southeast1-a"配置,仅保留location = "asia-southeast1"
修正后的数据源示例(以区域级集群为例):
data "google_container_cluster" "cluster" { name = "my-container" location = "asia-southeast1" # 若集群不在当前GCP默认项目,需额外添加项目ID配置 # project = "你的GCP项目ID" }
2. 确认权限与集群信息匹配
- 运行Terraform的账号需要拥有
container.clusters.get权限,才能读取GKE集群的配置信息 - 确保数据源中填写的集群
name、location/zone和实际集群配置完全一致,无拼写错误 - 若集群不在当前gcloud默认的GCP项目下,需要在
google_container_cluster数据源中额外添加project参数指定集群所属项目ID
3. 可选:添加provider依赖避免时序问题
为了避免Terraform初始化Kubernetes provider时,google_container_cluster数据源还未完成读取,可以给provider块显式添加依赖:
provider "kubernetes" { host = "https://${data.google_container_cluster.cluster.endpoint}" token = data.google_client_config.current.access_token cluster_ca_certificate = base64decode(data.google_container_cluster.cluster.master_auth[0].cluster_ca_certificate) depends_on = [data.google_container_cluster.cluster] }
修改完成后重新执行terraform init和terraform apply即可正常运行。
内容的提问来源于stack exchange,提问作者Petra Barus
相关产品推荐
相关产品推荐

