【问题标题】:Can not deploy helm chart in Terraform (Kubernetes cluster unreachable)无法在 Terraform 中部署 helm chart(Kubernetes 集群无法访问)
【发布时间】:2020-09-14 05:37:29
【问题描述】:

我使用 Terraform (link) 启动了 GKE 集群,现在我正在尝试在集群上发布 helm 图表,并尝试了“Nginx Ingress” helm 图表,如下所示:

resource "helm_release" "ingress" {
  name       = "ingress"
  repository = "https://kubernetes.github.io/ingress-nginx"
  chart      = "ingress-nginx"
}

地形规划:

Terraform will perform the following actions:

  # helm_release.ingress will be created
  + resource "helm_release" "ingress" {
      + chart            = "ingress-nginx"
      + disable_webhooks = false
      + force_update     = false
      + id               = (known after apply)
      + metadata         = (known after apply)
      + name             = "ingress"
      + namespace        = "default"
      + recreate_pods    = false
      + repository       = "https://kubernetes.github.io/ingress-nginx"
      + reuse            = false
      + reuse_values     = false
      + status           = "DEPLOYED"
      + timeout          = 300
      + verify           = false
      + version          = "2.3.0"
      + wait             = true
    }

但我遇到了一个错误

Error: Kubernetes cluster unreachable: Get https://35.232.164.12/version?timeout=32s: dial tcp 35.232.164.12:443: i/o timeout

  on helm.tf line 36, in resource "helm_release" "ingress":
  36: resource "helm_release" "ingress" {

【问题讨论】:

  • 这个错误与部署多个 Helm 图表有什么关系?错误是说您没有与 API 服务器的网络连接。
  • @ydaetskcoR,我是这个 terraform 的新手,对它了解不多

标签: google-cloud-platform terraform kubernetes-helm terraform-provider-gcp


【解决方案1】:

这里的 terraform 无法创建与 Kubernetes 集群的连接。集群无法访问。

同样使用 terraform 也必须先设置分蘖,然后舵图才能工作。

在 terraform 中,您可以使用 helm 提供者,如果使用的是服务帐户,您可以添加现有帐户或根据需要创建一个

provider "helm" {
  service_account = "${kubernetes_service_account.helm_account.metadata.0.name}"
  tiller_image = "gcr.io/kubernetes-helm/tiller:${var.helm_version}"
  #install_tiller = false

  kubernetes {
    host                   = "${google_container_cluster.<name>.endpoint}"
    token                  = "${data.google_client_config.current.access_token}"

    client_certificate     = "${base64decode(google_container_cluster.data-dome-cluster.master_auth.0.client_certificate)}"
    client_key             = "${base64decode(google_container_cluster.data-dome-cluster.master_auth.0.client_key)}"
    cluster_ca_certificate = "${base64decode(google_container_cluster.data-dome-cluster.master_auth.0.cluster_ca_certificate)}"
  }

一个 helm 开始运行,您可以使用 helm 包管理器开始设置其他版本。

您也可以查看此答案以获取更多详细信息:Deploying Helm workloads with Terraform on GKE cluster

【讨论】:

  • 这是给Helm2的,我在找Helm3
  • @RavindraGupta 添加了一个使用 Helm3 的示例
【解决方案2】:

下面是 Helm3 的示例:

注意:

  • [cluster endpoint][ca certificate] 是使用 Terraform 创建的集群的输出
  • 您需要在服务帐户上拥有 cluster.adminiam.serviceAccountTokenCreator 角色
数据“google_service_account_access_token”“kubernetes_sa”{ 目标服务帐户 = "" 范围= [“用户信息电子邮件”,“云平台”] 寿命 = "3600s" } 提供者“kubernetes”{ host = "https://[集群端点]" 令牌 = data.google_service_account_access_token.kubernetes_sa.access_token cluster_ca_certificate = base64decode( module.gitlab-gke.cluster_ca_certificate ) } 提供者“掌舵”{ Kubernetes { host = "https://[集群端点]" 令牌 = data.google_service_account_access_token.kubernetes_sa.access_token cluster_ca_certificate = base64decode( [ca证书] ) } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2021-05-31
    • 2023-03-09
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多