bg-tutorials

Как установить SSL-сертификат ACME в Kubernetes

Установка SSL-сертификата ACME в Kubernetes теперь является стандартизированным и гибким процессом благодаря таким развитым инструментам, как cert-manager, и широкой поддержке со стороны коммерческих ЦС. Независимо от того, запускаете ли Вы производственные рабочие нагрузки за NGINX Ingress, Traefik или другим шлюзом, Вы можете автоматизировать безопасный HTTPS с полным контролем.

Установите ACME SSL на Kubernetes

В этом руководстве Вы узнаете, как установить SSL-сертификат ACME в Kubernetes с помощью cert-manager. Мы расскажем об установке, настройке эмитента с помощью External Account Binding (EAB) и выпуске сертификатов для защиты Ваших входящих сервисов.


Что Вам понадобится

Прежде чем погружаться, убедитесь в этом:

  • У Вас есть работающий кластер Kubernetes (рекомендуется v1.23+).
  • kubectl настроен и работает
  • У Вас есть доступ к Вашему ингресс-контроллеру (например, NGINX, Traefik).
  • Ваш домен указывает на публичный IP Вашего входящего контроллера
  • У Вас есть учетные данные EAB от совместимого с ACME центра сертификации:
    • URL-адрес каталога ACME (например, https://acme.example.com/v2/DV)
    • Идентификатор ключа EAB (KID)
    • Ключ EAB HMAC

Примечание: https://acme.example.com/v2/DV используется в данном руководстве в качестве URL-адреса каталога ACME. Замените его реальной конечной точкой из Вашего центра сертификации.


Шаг 1 — Установите cert-manager

cert-manager это наиболее широко используемый нативный клиент ACME для Kubernetes. Он работает как контроллер, который управляет выпуском и обновлением сертификатов.

Установите через Helm (предпочтительно для производства):

kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 \
--set installCRDs=true

Подождите несколько секунд и убедитесь, что все капсулы запущены:

kubectl get pods -n cert-manager

Вы должны увидеть три стручка: cert-manager, cert-manager-webhook и cert-manager-cainjector.


Шаг 2 — Создание секрета Kubernetes для учетных данных EAB

Создайте секрет Kubernetes для безопасного хранения Вашего ключа EAB:

kubectl create secret generic acme-eab-secret \
--namespace cert-manager \
--from-literal=eab-kid="YOUR_EAB_KID" \
--from-literal=eab-hmac-key="YOUR_EAB_HMAC_KEY"

Замените их своими настоящими учетными данными. Избегайте пробелов при копировании-вставке.


Шаг 3 — Определите ClusterIssuer или Issuer

Теперь создайте ресурс ClusterIssuer (для всех пространств имен) или Issuer (для одного пространства имен), который соединит cert-manager с Вашим ACME CA, используя учетные данные EAB.

Вот пример ClusterIssuer YAML:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: acme-issuer
spec:
acme:
server: https://your.acme-server.com/v2/DV
email: [email protected]
privateKeySecretRef:
name: acme-private-key
externalAccountBinding:
keyID: YOUR_EAB_KID
keySecretRef:
name: acme-eab-secret
key: eab-hmac-key
solvers:
- http01:
ingress:
class: nginx

Примените его:

kubectl apply -f clusterissuer.yaml

Замените ingress.class: nginx на traefik, nginx-internal или любой другой класс Вашего ingress. Вы можете найти это в документации к Вашему контроллеру ingress.


Шаг 4 — Создание ресурса сертификата

Когда Ваш ClusterIssuer будет готов, создайте ресурс Certificate, который укажет cert-manager, какой домен необходимо защитить. Вот пример:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-ssl-cert
namespace: default
spec:
secretName: my-ssl-cert-tls
issuerRef:
name: acme-issuer
kind: ClusterIssuer
commonName: yourdomain.com
dnsNames:
- yourdomain.com
- www.yourdomain.com

Примените его:

kubectl apply -f certificate.yaml

cert-manager будет использовать эмитента, решать задачу через ingress и хранить выданный сертификат в качестве TLS-секрета Kubernetes.


Шаг 5 — Ссылка на сертификат в Вашем Ingress

Обновите правило входа, чтобы использовать созданный сертификат:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
cert-manager.io/cluster-issuer: acme-issuer
spec:
tls:
- hosts:
- yourdomain.com
- www.yourdomain.com
secretName: my-ssl-cert-tls
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80

Примените его:

kubectl apply -f ingress.yaml

Как только cert-manager обнаружит аннотацию, он начнет решать задачу ACME и выдаст Ваш сертификат.


Шаг 6 — Проверка сертификата и автопродление

Чтобы убедиться, что все работает:

kubectl describe certificate my-ssl-cert

Ищите сертификат, выданный успешно.

Чтобы проверить настройку обновления, выполните команду:

kubectl get certificaterequests

cert-manager выполняет обновление автоматически за ~30 дней до истечения срока действия. Вы можете смоделировать обновление следующим образом:

kubectl cert-manager renew my-ssl-cert


Общие вопросы

Настройка ACME SSL в Kubernetes может показаться несколько абстрактной, особенно когда приходится жонглировать контроллерами входа, секретами и DNS-записями. Ниже мы ответим на некоторые распространенные вопросы, с которыми сталкиваются разработчики при установке сертификатов ACME в среде Kubernetes, независимо от того, используете ли Вы cert-manager или альтернативную настройку.

Могу ли я использовать DNS-01 вместо HTTP-01?

Да, cert-manager поддерживает проверку DNS с помощью таких провайдеров, как Cloudflare, AWS и Google Cloud DNS. Используйте ее, если Вы не открываете порт 80.

Готов ли cert-manager к производству?

Безусловно. Он обеспечивает SSL для больших кластеров Kubernetes на предприятиях и в публичных облаках.

Могу ли я использовать сертификат с подстановочным знаком с ACME в Kubernetes?

Да, но сертификаты wildcard требуют проверки DNS-01, что предполагает обновление записей DNS вместо использования HTTP-запросов. Убедитесь, что Ваш DNS-провайдер поддерживает автоматизацию (через API), и соответствующим образом настройте решатель dns01 в настройках cert-manager.

Заключительные слова

Теперь Вы знаете, как установить SSL-сертификат ACME в Kubernetes с помощью cert-manager и совместимого с ACME центра сертификации. Эта установка полностью автоматизирована и масштабируема для современных сред Kubernetes. Вы получите безопасный HTTPS, автообновление и бесшовную интеграцию с Ingress, и все это не покидая кластера.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.