# Боевой издатель контура: Let's Encrypt через ACME. # # Раньше здесь был только внутренний CA (clusterissuer-ca.yaml) — исходили из # того, что контур закрытый и до ACME-сервера не достучаться. Это оказалось не # так: домены контура резолвятся в публичном DNS # sarex.local.lonsdaleites.ru → 158.160.38.249 # *.sarex.local.lonsdaleites.ru → 158.160.38.249 # а порты 80/443 хоста опубликованы наружу (см. docker-compose.yaml, k3s-server). # Значит http01-проверка проходит, и сертификаты можно брать настоящие. # # ВАЖНО ПРО WILDCARD: решатель http01 принципиально НЕ выдаёт wildcard- # сертификаты — Let's Encrypt требует для них dns01. Поэтому сертификат контура # перечисляет имена явно (см. infrastructure/istio-config/aero). Wildcard # остался только в hosts самого Gateway, где сертификат не нужен. # # Внутренний CA (aero-ca-issuer) НЕ удалён: он остаётся запасным вариантом на # случай, когда ACME недоступен, и для внутренних имён, которых нет в публичном # DNS. --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-issuer-istio spec: acme: # На этот адрес Let's Encrypt шлёт предупреждения об истечении. email: "emelinda1990@gmail.com" # ОТДЕЛЬНОЕ имя секрета, НЕ общепринятое в репозитории letsencrypt-secret-key. # # Тот секрет создаёт сам чарт cert-manager-infra (метки managed-by=Helm, # аннотация helm.sh/resource-policy: keep) и кладёт в поле tls.key # ЗАГЛУШКУ — невалидный PEM. cert-manager читает её как ключ ACME-аккаунта # и падает: # Account private key is invalid: error decoding private key PEM block # Reason: ErrVerifyACMEAccount # Удалить заглушку нельзя: чарт пересоздаст её на следующем апгрейде и # затрёт настоящий ключ аккаунта. Поэтому издателю выдан собственный # секрет — его создаёт и владеет им cert-manager, Helm его не трогает. privateKeySecretRef: name: letsencrypt-issuer-istio-account-key server: "https://acme-v02.api.letsencrypt.org/directory" solvers: # class istio — challenge-Ingress обслуживает istio-ingressgateway, # тот самый, что занимает hostPort 80/443 на k3s-server. - http01: ingress: class: istio