# Внутренний удостоверяющий центр контура aero. # # Зачем отдельный издатель: в репозитории все ClusterIssuer — ACME (Let's Encrypt) # с решателем http01 и ingress class nginx. Контур закрытый, публичного DNS и # входящего HTTP от ACME-сервера нет, поэтому ACME здесь принципиально нерабочий. # # Схема стандартная для внутренней PKI, в три шага: # 1. selfsigned-issuer — самоподписывающий издатель, нужен только чтобы # выпустить корневой сертификат; # 2. aero-ca — сам корневой сертификат (isCA: true). Его приватный # ключ попадает в secret aero-ca-key-pair в namespace cert-manager; # 3. aero-ca-issuer — издатель, который подписывает этим корнем сертификаты # для сервисов кластера (istio-gateway, dashboard и далее). # # Корневой сертификат нужно раздать клиентам (браузеры, curl), иначе они будут # ругаться на недоверенный CA. Выгрузить его можно так: # kubectl -n cert-manager get secret aero-ca-key-pair -o jsonpath='{.data.tls\.crt}' | base64 -d --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: selfsigned-issuer spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: aero-ca # Namespace обязателен и должен совпадать с cert-manager --cluster-resource-namespace # (по умолчанию cert-manager): именно там ClusterIssuer ищет свой секрет. namespace: cert-manager spec: isCA: true commonName: aero-ca secretName: aero-ca-key-pair duration: 87600h # 10 лет — корень контура, ротация вручную renewBefore: 720h # 30 суток privateKey: algorithm: ECDSA size: 256 issuerRef: name: selfsigned-issuer kind: ClusterIssuer group: cert-manager.io --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: aero-ca-issuer spec: ca: secretName: aero-ca-key-pair