【发布时间】:2022-05-05 00:33:41
【问题描述】:
我正在尝试在 Terraform 中创建一个模块以在 Kubernetes 集群中创建基本资源,这意味着 cert-manager、ingress-nginx(作为入口控制器)和 ClusterIssuer 用于证书。按照这个确切的顺序。
前两个我通过helm_release 资源和cluster_issuer 通过kubernetes_manifest 安装。
我收到以下错误,经过一些 Google 搜索,我发现这是因为 cert-manager 安装了 ClusterIssuer 需要但在 terraform plan 阶段的 CRD,因为它们尚未安装,清单无法检测到ClusterIssuer。
然后,我想知道是否有办法绕过这个问题,但仍然在相同的配置中创建所有内容,只有一个 terraform apply?
注意:我尝试使用 depends_on 参数并且还包含一个 time_sleep 块,但它没有用,因为计划中没有安装任何东西,这就是它失败的地方
| Error: Failed to determine GroupVersionResource for manifest
│
│ with module.k8s_base.kubernetes_manifest.cluster_issuer,
│ on ../../modules/k8s_base/main.tf line 37, in resource "kubernetes_manifest" "cluster_issuer":
│ 37: resource "kubernetes_manifest" "cluster_issuer" {
│
│ no matches for kind "ClusterIssuer" in group "cert-manager.io"
resource "helm_release" "cert_manager" {
chart = "cert-manager"
repository = "https://charts.jetstack.io"
name = "cert-manager"
create_namespace = var.cert_manager_create_namespace
namespace = var.cert_manager_namespace
set {
name = "installCRDs"
value = "true"
}
}
resource "helm_release" "ingress_nginx" {
name = "ingress-nginx"
repository = "https://kubernetes.github.io/ingress-nginx"
chart = "ingress-nginx"
create_namespace = var.ingress_nginx_create_namespace
namespace = var.ingress_nginx_namespace
wait = true
depends_on = [
helm_release.cert_manager
]
}
resource "time_sleep" "wait" {
create_duration = "60s"
depends_on = [helm_release.ingress_nginx]
}
resource "kubernetes_manifest" "cluster_issuer" {
manifest = {
"apiVersion" = "cert-manager.io/v1"
"kind" = "ClusterIssuer"
"metadata" = {
"name" = var.cluster_issuer_name
}
"spec" = {
"acme" = {
"email" = var.cluster_issuer_email
"privateKeySecretRef" = {
"name" = var.cluster_issuer_private_key_secret_name
}
"server" = var.cluster_issuer_server
"solvers" = [
{
"http01" = {
"ingress" = {
"class" = "nginx"
}
}
}
]
}
}
}
depends_on = [helm_release.cert_manager, helm_release.ingress_nginx, time_sleep.wait]
}
【问题讨论】:
-
您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是使用裸机安装还是某些云提供商?
-
@kkopczak 我使用的是 Kubernetes 2.6.0,我通过 Azure AKS 设置了集群
-
能否请您告诉我您使用的是哪个版本的 cert-manager?
-
我看到有人建议在 GitHub 问题中使用
kubectl_manifest,尝试使用它而不是kubernetes_manifest,它成功了。 -
我刚刚遇到了这个确切的问题。 @everspader 你找到解决方案了吗?
标签: kubernetes terraform kubernetes-helm