Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Оцените статью

Безопасность веб‑приложений сегодня — не опция, а необходимость. Шифрование трафика через HTTPS стало стандартом: поисковые системы отдают приоритет защищённым сайтам, а браузеры явно предупреждают пользователей о небезопасных соединениях.

Let’s Encrypt предоставляет бесплатные SSL‑сертификаты, делая переход на HTTPS доступным для любого проекта. Но ручная настройка и обновление сертификатов отнимают время и несут риски: просроченный сертификат ломает доступ к сервису и подрывает доверие пользователей.

В средах на базе Kubernetes задача усложняется: нужно интегрировать управление сертификатами в динамичную инфраструктуру.

Установка cert‑manager

Cert‑manager — оператор Kubernetes для управления SSL‑сертификатами.

Добавьте репозиторий Helm:

$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update

Установите cert‑manager:

$ helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.20.2 \
  --set crds.enabled=true

Доступ из России до https://charts.jetstack.io заблокирован. Используйте Proxy или VPN.

Проверьте установку:

$ kubectl get pods -n cert-manager

Должны быть запущены cert-manager, cert-manager-webhook, cert-manager-cainjector. Выглядит вот так:

$ kubectl get pods -n cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-75f9c8f9bc-x87mx              1/1     Running   0          30s
cert-manager-cainjector-65c5c8dd5b-dnd2w   1/1     Running   0          30s
cert-manager-webhook-5ddfdd5d55-25hs8      1/1     Running   0          30s

Создание ClusterIssuer для Let’s Encrypt

Создайте файл cluster-issuer.yaml:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com  # замените на ваш email
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

Примените конфигурацию:

kubectl apply -f cluster-issuer.yaml

Настройка Ingress‑ресурса

Создайте файл ingress.yaml для вашего приложения:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: anton-c-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "letsencrypt-prod"  # указывает на ClusterIssuer
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - anton-c.ru
    secretName: anton-c-tls  # имя секрета для сертификата
  rules:
  - host: anton-c.ru
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: your-service  # замените на имя вашего сервиса
            port:
              number: 80

Примените конфигурацию:

kubectl apply -f ingress.yaml

Проверка работы

Проверьте статус Ingress:

$ kubectl get ingress anton-c-ingress

В колонке ADDRESS должен появиться IP‑адрес балансировщика.

Проверьте сертификат:

    $ kubectl get certificate
    

    Статус должен быть Ready.

    $ kubectl get certificate
    NAME             READY   SECRET           AGE
    anton-c-tls      True    anton-c-tls      6m52s
    shiskitech-tls   True    shiskitech-tls   6m52s

    Проверьте секрет с сертификатом:

    $ kubectl get secret anton-c-tls
    

    Проверьте логи cert‑manager:

    $ kubectl logs -l app=cert-manager -n cert-manager --tail=50
    

    Проверка SSL

    Откройте в браузере ваш сайт для которого настраивали сертификат.

    Убедитесь, что:

    • сайт загружается по HTTPS;
    • в адресной строке отображается значок замка;
    • сертификат выдан Let’s Encrypt.

    Похожие записи

    Тестовый кластер Kubernetes в Docker Desktop

    Продолжаю переносить свои сервисы в кластер Kubernetes в Cloud.ru и естественно мне нужен локальный тестовый кластер для проработки миграции идентичный кластеру в Cloud.ru. Установка Docker Desktop в Ubuntu Linux Убедитесь,…

    Хранилище артефактов (Docker) Cloud.ru

    Продолжаем разбираться с облачной платформой cloud.ru и сегодня займемся хранилищем артефактов. Достоинства хранилища артефактов Docker в Cloud.ru 1. Интеграция с экосистемой Cloud.ru 2. Безопасность 3. Надёжность и доступность 4. Производительность…

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Читать еще статьи

    Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

    Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

    Тестовый кластер Kubernetes в Docker Desktop

    Тестовый кластер Kubernetes в Docker Desktop

    Хранилище артефактов (Docker) Cloud.ru

    Хранилище артефактов (Docker) Cloud.ru

    Хранение медиа-файлов WordPress в S3-хранилище

    Хранение медиа-файлов WordPress в S3-хранилище

    Настройка кэширования WordPress при помоши Redis

    Настройка кэширования WordPress при помоши Redis

    Создание кластера Managed Kubernetes в облаке Cloud.ru

    Создание кластера Managed Kubernetes в облаке Cloud.ru