User Tools

Site Tools


протокол_acme

This is an old revision of the document!


Все, что нужно знать про Let's Encrypt, от localhost до Kubernetes

Реклама

  • Расширение протокола TLS (Transport Layer Security) - SNI (Server Name Indication) и бесплатные сертификаты от Let's Encrypt, на основе DV (Domain Validation), открыли возможность сделать безопасными соединения во “всем интернете”, а протокол с мультяшной аббревиатурой ACME (Automated Certificate Management Environment), позволил автоматизировать процессы управления сертификатами
  • Давайте на практически полезных примерах разберемся, как все это устроено

Техническое задание

  • Получить Let's Encrypt сертификат для сайта в “ручном” режиме используя DNS и HTTP/HTTPS/code/file-based Domain Validation
  • Автоматизировать управление сертификатами с помощью ACME-клиента Certbot
  • Автоматизировать управление сертификатами в Kubernetes с помощью оператора cert-manager

Запись вебинара

  • Тэги: FQDN, HAProxy, Apache, Nginx, Linux, Docker, Kubernetes, Minikube, Ingress, Certbot, cert-manager, …

Шаг 1. Что у нас есть, для начала

Шаг 2. Управление сертификатами Let's Encrypt "вручную"

Шаг 3. Автоматическое управление сертификатами Let's Encrypt

vps:~# systemctl disable apache2.service --now

...

vps:~# systemctl disable nginx.service --now

Шаг 4. Управление сертификатами Let's Encrypt в Kubernetes

student@vps:~/webd-k8s$ curl -H "Host: siteN.mgtu.ru" http://192.168.49.2 -v

student@vps:~/webd-k8s$ curl -H "Host: siteN.mgtu.ru" https://192.168.49.2 -kv
#Add port 80 for demonstration how does a cert-manager work 
virtual_server 195.19.40.42 443 {
  lb_algo wlc
  lb_kind NAT
  protocol TCP
  real_server 192.168.49.2 443 {}
}
$ curl http://siteN.mgtu.ru -v

$ curl https://siteN.mgtu.ru -k
student@vps:~$ kubectl -n my-ns get pods
...
cm-acme-http-solver-...
...

student@vps:~/webd-k8s$ kubectl -n my-ns get ingress -o yaml | grep acme-challenge

student@vps:~/webd-k8s$ curl http://siteN.mgtu.ru/.well-known/acme-challenge/NNNNNNNNNNNNNNNNNNNNN

student@vps:~/webd-k8s$ kubectl -n my-ns exec -ti pods/my-webd-<TAB> -- bash
  ИЛИ
student@vps:~/webd-k8s$ kubectl run -ti my-debian --image=debian -- bash

:/# apt update; apt install curl

:/# curl http://siteN.mgtu.ru/.well-known/acme-challenge/NNNNNNNNNNNNNNNNNNNNN     
  • Убираем 80-й порт из Keepalive
...
frontend ft-vps
    mode http
    bind *:80
    default_backend      bk-minikube-ingress
backend bk-minikube-ingress
    mode        http
    server  minikube 192.168.49.2:80 check
$ curl https://siteN.mgtu.ru -v
протокол_acme.1765957489.txt.gz · Last modified: 2025/12/17 10:44 by val