Автоматизированное получение 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.

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

    Резервное копирование баз данных MySQL в Linux: краткое руководство с примерами

    Резервное копирование — ключевой элемент стратегии обеспечения безопасности и надёжности данных. Для баз данных MySQL, которые широко используются в веб-разработке и других областях, регулярное создание резервных копий особенно важно. В…

    Клонирование работающего Linux-сервера с помощью rsync (немного из практики).

    Клонирование живого (работающего) Linux-сервера — задача, которая часто возникает при создании резервной копии, переносе системы на новое оборудование или подготовке «горячего» запасного сервера (дурка еще та и именно для подготовки…

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

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

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

    Резервное копирование баз данных MySQL в Linux: краткое руководство с примерами

    Резервное копирование баз данных MySQL в Linux: краткое руководство с примерами

    Клонирование работающего Linux-сервера с помощью rsync (немного из практики).

    Клонирование работающего Linux-сервера с помощью rsync (немного из практики).

    Установка Keycloak в Ubuntu 24.04: от тестового запуска до production-конфигурации

    Установка Keycloak в Ubuntu 24.04: от тестового запуска до production-конфигурации

    Оптимизация хранения медиафайлов WordPress: перенос в облачное S3-хранилище Cloud.ru

    Оптимизация хранения медиафайлов WordPress: перенос в облачное S3-хранилище Cloud.ru

    Настройка ProxySQL для распределения запросов в кластере MySQL

    Настройка ProxySQL для распределения запросов в кластере MySQL

    Конфигурация MySQL для микро-vps (минимизация потребления памяти)

    Конфигурация MySQL для микро-vps (минимизация потребления памяти)