介绍
我遇到了 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 client
kubectl 中的参数运行命令来复制错误。(如果我省略这个参数,同样的命令也会起作用。)
$ 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 提供商使用的命令中。
我很感激任何建议!