Aws-cert-manager
Материал из noname.com.ua
Для Ingress требуется автоматически выписывать сертефикаты для доменов которые "Хостятся" на нем
Предварительные требования
Требуется доступ (ручной или автоматический) к управлению зоной DNS для того что бы направить нужные домены на соответвующий Ingress
Возможные варианты решения
- Использовать независимое от cloud-провайдера решение, Let's encrypt.
- В завимсимости от того где лежит DNS-зона и как ей можно управлять, может требовать или не требовать ручной правкии зоны.
- В случае если зона хостится на AWS Route53 возможно применить например такую автоматизацию обновления зоны
- К плюсам можно отнести то что решение будет работать на любом клауде, не привязано к провайдеру.
- Список возможных Issuers досаточно широк (https://cert-manager.io/docs/configuration/issuers/), для тестирования можно например использовать локально развернутый Hashicorp Vault
- Использовать сертефикаты от AWS (это пока не реализовано)
cert-manager
Для решения этой задачи существует cert-manager
Примерный принцип работы (насколько я его понимаю)
- Установка в том чимсле создания
Custom Resource Definition(далееCRD) - Cоздается ресусурс типа
IssuerилиClusterIssuer— описывает, откуда брать сертификаты- Разница в том что Issuer доступен только внутри namespace, в моем случае когда все сертефикаты нужны для нескольких копий приложения ("окружений"), например
dev.domain.tld,staging.domain.tld,qa.domain.tldнужно будет изменитьClusterIssuerнаIssuer. Пока окружение одно это не важно, но как только их несколько то не хочется иметь один сертефикат на всех с длинным списком Altnames (но это требует проверки)
- Разница в том что Issuer доступен только внутри namespace, в моем случае когда все сертефикаты нужны для нескольких копий приложения ("окружений"), например
Создаёшь Certificate-ресурс — cert-manager следит за ним и выполняет выпуск. cert-manager автоматически: делает HTTP или DNS-проверку (чтобы подтвердить владение доменом), получает сертификат от CA, сохраняет в Secret в namespace, продлевает его до истечения срока действия.
Установка
2
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata:
annotations: creationTimestamp: "2025-06-01T11:56:58Z" generation: 1 name: letsencrypt-http-cert-issuer resourceVersion: "329560" uid: 4256d660-aa83-418e-b6d4-a5b6051943f0
spec:
acme:
email: sirmax123@gmail.com
privateKeySecretRef:
name: letsencrypt-http
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- http01:
ingress:
class: nginx
status:
acme: lastPrivateKeyHash: uKB+SowPSRIAGsxpkCqlb9+ohZYVW+w88CW4yv8CG0w= lastRegisteredEmail: sirmax123@gmail.com uri: https://acme-v02.api.letsencrypt.org/acme/acct/2436037867 conditions: - lastTransitionTime: "2025-06-01T11:56:58Z" message: The ACME account was registered with the ACME server observedGeneration: 1 reason: ACMEAccountRegistered status: "True" type: Ready