Пример заказа сертификата
1apiVersion: cert-manager.io/v1
2kind: Certificate
3metadata:
4 name: example-com # Имя сертификата, через него потом можно смотреть статус.
5 namespace: default
6spec:
7 secretName: example-com-tls # Название Secret'а, в который положить приватный ключ и сертификат.
8 issuerRef:
9 kind: ClusterIssuer # Ссылка на "выдаватель" сертификатов, см. подробнее ниже.
10 name: letsencrypt
11 commonName: example.com # Основной домен сертификата.
12 dnsNames: # Дополнительные домены сертификата (как минимум одно DNS-имя или IP-адрес должны быть указаны).
13 - www.example.com
14 - admin.example.com
При этом:
- создается отдельный Ingress-ресурс на время прохождения challenge’а (соответственно, аутентификация и whitelist основного Ingress не будут мешать);
- можно заказать один сертификат на несколько Ingress-ресурсов (и он не отвалится при удалении того, в котором была аннотация
tls-acme
); - можно заказать сертификат с дополнительными именами (как в примере);
- можно валидировать разные домены, входящие в один сертификат, через разные Ingress-контроллеры.
Подробнее можно прочитать в документации cert-manager.
Заказ wildcard-сертификата с DNS в Cloudflare
- Получим
Global API Key
иEmail Address
:- Заходим на страницу: https://dash.cloudflare.com/profile.
- В самом верху страницы написана ваша почта под
Email Address
. - В самом низу страницы жмем на кнопку
View
напротивGlobal API Key
.
В результате этого мы получаем ключ для взаимодействия с API Cloudflare и почту, на которую зарегистрирован аккаунт.
-
Редактируем настройки модуля cert-manager и добавляем такую секцию:
1settings: 2 cloudflareGlobalAPIKey: APIkey 3 cloudflareEmail: some@mail.somedomain
или
1settings: 2 cloudflareAPIToken: some-token 3 cloudflareEmail: some@mail.somedomain
После этого Deckhouse автоматически создаст ClusterIssuer и Secret для Cloudflare в namespace
d8-cert-manager
.- Конфигурация с помощью APIToken является рекомендуемой и более безопасной.
-
Создаем Certificate с проверкой с помощью провайдера Cloudflare. Данная возможность появится только при указании настройки
cloudflareGlobalAPIKey
иcloudflareEmail
в Deckhouse:1apiVersion: cert-manager.io/v1 2kind: Certificate 3metadata: 4 name: domain-wildcard 5 namespace: app-namespace 6spec: 7 secretName: tls-wildcard 8 issuerRef: 9 name: cloudflare 10 kind: ClusterIssuer 11 commonName: "*.domain.com" 12 dnsNames: 13 - "*.domain.com"
-
Создаем Ingress:
1apiVersion: networking.k8s.io/v1 2kind: Ingress 3metadata: 4 name: domain-wildcard 5 namespace: app-namespace 6spec: 7 ingressClassName: nginx 8 rules: 9 - host: "*.domain.com" 10 http: 11 paths: 12 - backend: 13 service: 14 name: svc-web 15 port: 16 number: 80 17 path: / 18 tls: 19 - hosts: 20 - "*.domain.com" 21 secretName: tls-wildcard
Заказ wildcard-сертификата с DNS в Route53
-
Создаем пользователя с необходимыми правами.
-
Заходим на страницу управления политиками. Создаем политику с такими правами:
1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Effect": "Allow", 6 "Action": "route53:GetChange", 7 "Resource": "arn:aws:route53:::change/*" 8 }, 9 { 10 "Effect": "Allow", 11 "Action": "route53:ChangeResourceRecordSets", 12 "Resource": "arn:aws:route53:::hostedzone/*" 13 }, 14 { 15 "Effect": "Allow", 16 "Action": "route53:ListHostedZonesByName", 17 "Resource": "*" 18 } 19 ] 20}
-
Заходим на страницу управления пользователями. Создаем пользователя с созданной ранее политикой.
-
-
Редактируем настройки модуля cert-manager и добавляем такую секцию:
1settings: 2 route53AccessKeyID: AKIABROTAITAJMPASA4A 3 route53SecretAccessKey: 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
После этого Deckhouse автоматически создаст ClusterIssuer и Secret для route53 в namespace
d8-cert-manager
. -
Создаем Certificate с проверкой с помощью провайдера route53. Данная возможность появится только при указании настроек
route53AccessKeyID
иroute53SecretAccessKey
в Deckhouse:1apiVersion: cert-manager.io/v1 2kind: Certificate 3metadata: 4 name: domain-wildcard 5 namespace: app-namespace 6spec: 7 secretName: tls-wildcard 8 issuerRef: 9 name: route53 10 kind: ClusterIssuer 11 commonName: "*.domain.com" 12 dnsNames: 13 - "*.domain.com"
Заказ wildcard-сертификата с DNS в Google
-
Создаем ServiceAccount с необходимой ролью:
- Заходим на страницу управления политиками.
- Выбираем нужный проект.
- Создаем ServiceAccount с желаемым названием, например
dns01-solver
. - Заходим в созданный ServiceAccount.
- Создаем ключ по кнопке «Добавить ключ».
- Будет скачан
.json
-файл с данными ключа имени. -
Закодируем полученный файл в строку base64:
1base64 project-209317-556c656b81c4.json
-
Сохраняеем полученную base64-строку в параметр модуля
cloudDNSServiceAccount
.После этого Deckhouse автоматически создаст ClusterIssuer и Secret для cloudDNS в namespace
d8-cert-manager
. -
Создаем Certificate с валидацией через cloudDNS:
1apiVersion: cert-manager.io/v1 2kind: Certificate 3metadata: 4 name: domain-wildcard 5 namespace: app-namespace 6spec: 7 secretName: tls-wildcard 8 issuerRef: 9 name: clouddns 10 kind: ClusterIssuer 11 dnsNames: 12 - "*.domain.com"
Заказ self-signed-сертификата
Все еще проще, чем с LetsEncrypt. Просто меняем letsencrypt
на selfsigned
:
1apiVersion: cert-manager.io/v1
2kind: Certificate
3metadata:
4 name: example-com # Имя сертификата, через него потом можно смотреть статус.
5 namespace: default
6spec:
7 secretName: example-com-tls # Название Secret'а, в который положить приватный ключ и сертификат.
8 issuerRef:
9 kind: ClusterIssuer # Ссылка на "выдаватель" сертификатов, см. подробнее ниже.
10 name: selfsigned
11 commonName: example.com # Основной домен сертификата.
12 dnsNames: # Дополнительные домены сертификата, указывать необязательно.
13 - www.example.com
14 - admin.example.com