如何通过Terraform将GKE凭证传递给kubernetes提供者?

时间:2019-09-08 15:36:38

标签: kubernetes terraform google-kubernetes-engine terraform-provider-gcp

我已经用Terraform创建了一个GKE集群,我也想用Terraform管理Kubernetes。但是,我不知道如何将GKE的凭据传递给kubernetes提供者。

我遵循了example in the google_client_config data source documentation并且得到了

  

data.google_container_cluster.cluster.endpoint 为空

这是我失败的尝试https://github.com/varshard/gke-cluster-terraform/tree/title-terraform

cluster.tf负责创建GKE集群,该集群工作正常。

kubernetes.tf负责管理Kubernetes,该Kubernetes无法获得GKE证书。

1 个答案:

答案 0 :(得分:2)

您根本不需要google_container_cluster data source,因为relevant information也在您在相同上下文中创建的google_container_cluster resource中。

数据源用于访问有关完全在Terraform外部或在不同Terraform上下文中创建的资源的数据(例如,不同的状态文件和terraform apply的不同目录)。

我不确定数据源正在选择现有容器集群的状态如何,然后定义一个资源来使用数据源的输出来创建该容器集群,但这太复杂了,稍有损坏-如果您破坏了所有内容并重新应用,将无法按原样工作。

相反,您应该删除google_container_cluster数据源,并将google_container_cluster资源修改为:

resource "google_container_cluster" "cluster" {
  name     = "${var.project}-cluster"
  location = "${var.region}"

  # ...
}

然后在您的kubernetes提供者中引用此资源:

provider "kubernetes" {
  load_config_file = false
  host = "https://${google_container_cluster.cluster.endpoint}"
  cluster_ca_certificate = "${base64decode(google_container_cluster.cluster.master_auth.0.cluster_ca_certificate)}"
  token = "${data.google_client_config.current.access_token}"
}