0

介绍

我遇到了 Terraform 中的 Kubernetes 提供程序的问题。当我用我的本地配置它时~/.kube/config,它可以工作。但是,当我尝试使用集群创建模块的输出对其进行配置时,它神秘地尝试充当名为“client”的用户,该用户在集群中没有权限,但terraform plan失败了。

我的代码(集群创建的输出)

# module 'cluster'

output "cluster_endpoint" {
  value = google_container_cluster.general_purpose.endpoint
}

output "cluster_client_certificate" {
  value = base64decode(google_container_cluster.general_purpose.master_auth[0].client_certificate)
}

output "cluster_client_key" {
  value     = base64decode(google_container_cluster.general_purpose.master_auth[0].client_key)
  sensitive = true
}

output "cluster_ca_certificate" {
  value = base64decode(google_container_cluster.general_purpose.master_auth[0].cluster_ca_certificate)
}

什么有效

# module 'ingress'

provider "kubernetes" {
  config_path = "~/.kube/config"
}

data "kubernetes_namespace" "namespace_default" {
  metadata {
    name = "default"
  }
}

什么不起作用

# module 'ingress'

provider "kubernetes" {
  host                   = "https://${var.cluster_endpoint}"
  client_certificate     = var.cluster_client_certificate
  client_key             = var.cluster_client_key
  cluster_ca_certificate = var.cluster_ca_certificate
}

data "kubernetes_namespace" "namespace_default" {
  metadata {
    name = "default"
  }
}

错误

$ terraform plan

╷
│ Error: namespaces "default" is forbidden: User "client" cannot get resource "namespaces" in API group "" in the namespace "default"
│ 
│   with module.ingress.data.kubernetes_namespace.namespace_default,
│   on modules/ingress/main.tf line 42, in data "kubernetes_namespace" "namespace_default":
│   42: data "kubernetes_namespace" "namespace_default" {
│ 
╵

我无法弄清楚这个名为“client”的用户的设置位置。我可以通过使用--as clientkubectl 中的参数运行命令来复制错误。(如果我省略这个参数,同样的命令也会起作用。)

$ kubectl get namespace default --as client

Error from server (Forbidden): namespaces "default" is forbidden: User "client" cannot get resource "namespaces" in API group "" in the namespace "default"

我的印象是不应该涉及“命名”用户,因为我正在使用基于证书的身份验证。但不知何故,用户名正在进入 Kubernetes 提供商使用的命令中。

我很感激任何建议!

4

0 回答 0