Aws-cert-manager: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 35: Строка 35:
   
 
==Установка==
 
==Установка==
  +
  +
  +
==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

Версия 15:24, 8 июня 2025


Для 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 на всех.

Создаёшь 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