如何使用 Terraform 将 GKE 凭证传递给 kubernetes 提供商?

Bho*_*sut 5 kubernetes google-kubernetes-engine terraform terraform-provider-gcp

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

我按照数据源文档中示例进行操作google_client_config,我得到了

data.google_container_cluster.cluster.endpoint为空

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

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

kubernetes.tf 负责管理Kubernetes,未能获得GKE凭证。

yda*_*coR 8

您根本不需要此处的google_container_cluster数据源,因为相关信息也在您在同一上下文中创建的google_container_cluster资源中。

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

我不确定您当前的状态如何,其中数据源正在选择现有的容器集群,然后您定义一个资源以使用数据源的输出创建该容器集群,但这种方式过于复杂且略有损坏-如果您销毁了所有内容并重新应用,它就无法正常工作。

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

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

  # ...
}
Run Code Online (Sandbox Code Playgroud)

然后在您的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
}
Run Code Online (Sandbox Code Playgroud)