【问题标题】:How to get `provider "kubernetes"` authenticate with `google_container_cluster`如何使用 `google_container_cluster` 获得`provider "kubernetes"` 身份验证
【发布时间】:2020-03-31 16:15:22
【问题描述】:

需要将集群部署到 GCP 和 setup、helm、ingress 和其他一些东西,而无需手动运行 gcloud 命令。 尝试了多种方式 google_container_cluster 有和没有证书和用户/通行证。 我得到两种结果:

Error: serviceaccounts is forbidden: User "system:anonymous" cannot create resource "serviceaccounts" in API group "" in the namespace "kube-system" 要么 Error: serviceaccounts is forbidden: User "client" cannot create resource "serviceaccounts" in API group "" in the namespace "kube-system".

我设法理解的是,如果我生成证书,gke 将拥有与它将创建的证书相对应的默认用户“客户端”,否则它将保持默认用户“匿名” - 没有用户。

我的问题是我找不到方法告诉google_container_cluster 使用特定帐户,也找不到告诉provider "kubernetes" 使用任何用户。 如果不通过gcloud 进行身份验证,也找不到将 RBAC 文件应用于集群的方法。

【问题讨论】:

    标签: kubernetes terraform google-kubernetes-engine


    【解决方案1】:

    我通过更新 Terraform 连接到 Kubernetes 集群的方式解决了这个问题。当我将后端更改为使用“远程”(Terraform Cloud)时,它不再起作用,并且我有相同类型的错误消息。 这是因为“远程”后端 Terraform 不使用本地 kubectl 配置。

    例如:https://github.com/terraform-providers/terraform-provider-kubernetes/issues/347

    所以我添加一个块来获取配置

    data "google_client_config" "default" {
    }
    

    然后我从使用“client_certificate”和“client_key”更新为“token”:

    provider "kubernetes" {
      load_config_file       = false
      host                   = data.google_container_cluster.gke-cluster.endpoint
      token                  = data.google_client_config.default.access_token
      cluster_ca_certificate = base64decode(data.google_container_cluster.gke-cluster.master_auth.0.cluster_ca_certificate)
    }
    

    希望这对其他人有用。

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2014-03-05
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 2018-12-23
      • 2011-06-27
      • 2020-04-16
      • 1970-01-01
      相关资源
      最近更新 更多