Автоматизированное получение 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 в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

    В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

    Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

    В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

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

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

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

    Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

    Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

    Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

    Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

    Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

    Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

    Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

    Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

    Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

    Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

    Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

    Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования