# cert-manager — TLS certificate management via Let's Encrypt + Cloudflare DNS-01 resource "helm_release" "cert_manager" { name = "cert-manager" repository = "https://charts.jetstack.io" chart = "cert-manager" version = "v1.17.1" namespace = "cert-manager" create_namespace = true set { name = "crds.enabled" value = "true" } } resource "kubernetes_secret" "cloudflare_api_key" { metadata { name = "cloudflare-api-key" namespace = "cert-manager" } data = { api-key = var.cloudflare_api_key } depends_on = [helm_release.cert_manager] } resource "kubernetes_manifest" "cluster_issuer_prod" { manifest = { apiVersion = "cert-manager.io/v1" kind = "ClusterIssuer" metadata = { name = "letsencrypt-prod" } spec = { acme = { server = "https://acme-v02.api.letsencrypt.org/directory" email = var.cloudflare_email privateKeySecretRef = { name = "letsencrypt-prod" } solvers = [{ dns01 = { cloudflare = { email = var.cloudflare_email apiKeySecretRef = { name = "cloudflare-api-key" key = "api-key" } } } }] } } } depends_on = [ helm_release.cert_manager, kubernetes_secret.cloudflare_api_key, ] }