Установка Kubernetes CertManager через Terraform
Как установить и настроить kubernetes cert-manager через конфигурацию terraform?
Не могу понять как сделать автоматизацию развёртки через helm, сам kubernetes и helm установлены через providers
provider "kubernetes" {
config_path = "~/.kube/config"
}
provider "helm" {
kubernetes {
config_path = "~/.kube/config"
}
}
Ответы (2 шт):
Автор решения: Komdosh
→ Ссылка
Используйте ресурс helm_release
// Создаём отдельный namespace
resource "kubernetes_namespace" "cert" {
metadata {
name = "cert-manager"
}
}
// установка с помощью helm
resource "helm_release" "cert" {
name = "cert-manager" // название пакета
namespace = "cert-manager"
repository = "https://charts.jetstack.io" // helm репозиторий
set {
name = "version"
value = "v1.5.2"
}
set {
name = "installCRDs" // CRD - Custom Resource Definitions, требуется этим helm пакетом, он установит в кластер дополнительные ресурсы сертификатов и т. п.
value = "true"
}
}
resource "null_resource" "certissuer" {
depends_on = [
helm_release.cert // запустить ресурс после инициализации cert-manager
]
provisioner "local-exec" {
when = destroy
command = <<-EOD
kubectl delete ClusterIssuer certissuer
EOD
}
provisioner "local-exec" {
command = <<EOT
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: certissuer
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: "YOUR@EMAIL"
privateKeySecretRef:
name: cert-manager // ссылка на Secret куда сохранить сертификат
solvers:
- http01:
ingress:
class: nginx
EOF
EOT
}
}
При конфигурировании ClusterIssuer обратитесь к документации
https://cert-manager.io/docs/configuration/acme/
Автор решения: Narnik Gamarnik
→ Ссылка
Самый простой вариант:
resource "google_compute_managed_ssl_certificate" "default" {
name = "test-cert"
managed {
domains = ["sslcert.tf-test.club."]
}
}
Более надёжный вариант:
resource "random_id" "certificate" {
byte_length = 4
prefix = "issue6147-cert-"
keepers = {
domains = join(",", local.managed_domains)
}
}
resource "google_compute_managed_ssl_certificate" "cert" {
name = random_id.certificate.hex
lifecycle {
create_before_destroy = true
}
managed {
domains = local.managed_domains
}
}
Больше примеров по ссылке.