Aws-cert-manager: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) (→2) |
||
| Строка 50: | Строка 50: | ||
</PRE> |
</PRE> |
||
| + | ==Пример <code>ClusterIssuer</code>== |
||
| − | ==2== |
||
| + | Достаточно простой объект |
||
| + | <PRE> |
||
apiVersion: cert-manager.io/v1 |
apiVersion: cert-manager.io/v1 |
||
kind: ClusterIssuer |
kind: ClusterIssuer |
||
metadata: |
metadata: |
||
| − | annotations: |
||
| − | creationTimestamp: "2025-06-01T11:56:58Z" |
||
| − | generation: 1 |
||
name: letsencrypt-http-cert-issuer |
name: letsencrypt-http-cert-issuer |
||
| − | resourceVersion: "329560" |
||
| − | uid: 4256d660-aa83-418e-b6d4-a5b6051943f0 |
||
spec: |
spec: |
||
acme: |
acme: |
||
| Строка 70: | Строка 67: | ||
ingress: |
ingress: |
||
class: nginx |
class: nginx |
||
| + | </PRE> |
||
| − | status: |
||
| + | * имя можно выбрать произвольное |
||
| − | acme: |
||
| + | * <code>email: sirmax123@gmail.com</code> раньше был нужен что б Let's Encrypt мог прислать оповещение, но он уже давно это отключил и сецчас это просто ненужное но обязательное поле. |
||
| − | lastPrivateKeyHash: uKB+SowPSRIAGsxpkCqlb9+ohZYVW+w88CW4yv8CG0w= |
||
| + | * <code>solvers</code> способ подтверждения владения доменом |
||
| − | 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 |
||
Версия 16:02, 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наIssuer. Пока окружение одно это не важно, но как только их несколько то не хочется иметь один сертефикат на всех с длинным списком Altnames (но это требует проверки)
- Разница в том что Issuer доступен только внутри namespace, в моем случае когда все сертефикаты нужны для нескольких копий приложения ("окружений"), например
- После создания Certificate-ресурса —
cert-managerследит за ним и выполняет выпуск согласно настройкам ресурса, результат сохраняет вSecret
cert-manager автоматически:
- делает HTTP или DNS-проверку чтобы подтвердить владение доменом (в этом случае HTTP так как у него нет доступа к управлению ресурсами зоны!) Как именно определено в поле
solvers - получает сертификат от CA, определенного в поле
acme - сохраняет в
Secretвnamespace(в случае сClusterIssuerэто namespace где запущен самcert-manager - Мониторит и продлевает его до истечения срока действия.
Установка
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm \ install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --set installCRDs=true
Пример ClusterIssuer
Достаточно простой объект
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-http-cert-issuer
spec:
acme:
email: sirmax123@gmail.com
privateKeySecretRef:
name: letsencrypt-http
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- http01:
ingress:
class: nginx
- имя можно выбрать произвольное
email: sirmax123@gmail.comраньше был нужен что б Let's Encrypt мог прислать оповещение, но он уже давно это отключил и сецчас это просто ненужное но обязательное поле.solversспособ подтверждения владения доменом- имя серкрта куда сохранять сертефикат и ключ