Безопасность веб‑приложений сегодня — не опция, а необходимость. Шифрование трафика через 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.




