如何通过“ google_container_cluster”对提供者“ kubernetes”进行身份验证

时间:2019-12-06 16:37:31

标签: kubernetes terraform google-kubernetes-engine

需要在不手动运行gcloud命令的情况下将集群部署到GCP并进行设置,管理,进入和其他操作。 尝试了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文件应用于群集的方法。

1 个答案:

答案 0 :(得分: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”更新为“令牌”:

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)
}

希望这对其他人有用。