64 lines
1.4 KiB
Terraform
64 lines
1.4 KiB
Terraform
# 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,
|
|
]
|
|
}
|