resource "helm_release" "cert_manager" { name = "cert-manager" repository = "oci://quay.io" chart = "jetstack/charts/cert-manager" version = "v1.21.2" namespace = "cert-manager" create_namespace = true wait = false set = [ { name = "crds.enabled" value = "true" } ] } resource "helm_release" "nginx_ingress" { name = "traefik" repository = "https://traefik.github.io/charts" chart = "traefik" version = "v41.7.1" namespace = "traefik" create_namespace = true wait = false set = [ # --- Service Type --- { name = "service.type" value = "NodePort" }, # --- Web HTTP Port (80) & Redirection --- { name = "ports.web.nodePort" value = "80" }, { name = "ports.web.http.redirections.entryPoint.to" value = "websecure" }, { name = "ports.web.http.redirections.entryPoint.scheme" value = "https" }, { name = "ports.web.http.redirections.entryPoint.permanent" value = "true" }, # --- Websecure HTTPS Port (443) --- { name = "ports.websecure.nodePort" value = "443" }, # --- Integrated Dashboard Settings --- { name = "ingressRoute.dashboard.enabled" value = "true" }, { name = "ingressRoute.dashboard.matchRule" value = "Host(`traefik.geeraert.eu`)" }, { name = "ingressRoute.dashboard.entryPoints" value = "{websecure}" } ] } resource "kubernetes_manifest" "letsencrypt_prod" { manifest = { "apiVersion" = "cert-manager.io/v1" "kind" = "ClusterIssuer" "metadata" = { "name" = "letsencrypt-prod" } "spec" = { "acme" = { "email" = "franckrobbin6@gmail.com" "privateKeySecretRef" = { "name" = "letsencrypt-prod-account-key" } "server" = "https://acme-v02.api.letsencrypt.org/directory" "solvers" = [ { "http01" = { "ingress" = { "class" = "traefik" } } } ] } } } }