如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?
Posted
技术标签:
【中文标题】如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?【英文标题】:How to pass GKE credential to kubernetes provider with Terraform? 【发布时间】:2020-01-10 14:10:42 【问题描述】:我已经使用 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,未能获得GKE凭证。
【问题讨论】:
【参考方案1】:这里根本不需要google_container_cluster
data source,因为relevant information 也在您在相同上下文中创建的google_container_cluster
resource 中。
数据源用于访问完全在 Terraform 之外或在不同 Terraform 上下文中创建的资源的数据(例如,不同的状态文件和不同的目录 terraform apply
'd)。
我不确定您的当前状态如何,数据源正在选择现有容器集群,然后您定义一个资源以使用数据源的输出创建该容器集群,但这过于复杂并且轻微损坏 - 如果您销毁所有内容并重新应用它就不会按原样工作。
您应该删除 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
【讨论】:
以上是关于如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?的主要内容,如果未能解决你的问题,请参考以下文章
Terraform:传递 AWS 系统管理器参数存储变量时,Terraform AWS 提供商凭证无效
将现有 GKE 集群添加到 terraform stat 文件
如何使用 Terraform 在 GKE 中设置非默认服务帐户?
如何使用 terraform 为自动创建的 GKE 集群和服务防火墙规则启用 Logconfig