====== Все, что нужно знать про Let's Encrypt, от localhost до Kubernetes ======
* [[https://habr.com/ru/companies/webo/articles/327410/|Распространение стандарта TLS SNI]]
* [[https://habr.com/ru/articles/708510/|Сертификаты Let's Encrypt и ACME вообще во внутренней сети]]
* [[https://www.ssl.com/ru/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D1%8E/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB-acme/|Что такое протокол ACME?]] Automatic Certificate Management Environment
* [[https://habr.com/ru/articles/792430/|Как выдавать бесплатные SSL сертификаты с помощью certbot, Nginx и Docker]]
===== Реклама =====
* Расширение протокола 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
===== Запись вебинара =====
* Ютуб: https://youtu.be/74KpYfTNffM
* Рутуб: https://rutube.ru/video/61ae7d137f22c4180c186e32683f731f/
* Вк: https://vkvideo.ru/video-2190892_456239496
* Тэги: HAProxy, Apache, Nginx, Linux, Docker, Kubernetes, Minikube, Ingress, ACME, Certbot, cert-manager
===== Шаг 1. Что у нас есть, для начала =====
* site*.mgtu.ru
# hostnamectl hostname vps
* [[Локализация системы#Локализация временной зоны]]
* [[Технология Docker]]
* [[Система Kubernetes#Установка minikube]]
===== Шаг 2. Управление сертификатами Let's Encrypt "вручную" =====
* [[Letsencrypt Certbot]]
===== Шаг 3. Автоматическое управление сертификатами Let's Encrypt =====
* [[Letsencrypt Certbot#Запрос и подтверждение сертификата "автоматически"]]
vps:~# systemctl disable apache2.service --now
...
vps:~# systemctl disable nginx.service --now
===== Шаг 4. Управление сертификатами Let's Encrypt в Kubernetes =====
* [[Технология Docker]]
* [[Система Kubernetes#Установка minikube]]
* Если есть время, можно:
* [[Система Kubernetes#Использование в minikube своих docker образов]]
* [[Технология Docker#Приложение golang gowebd]]
* или, использовать образ httpd и lifecycle postStart exec
* [[Система Kubernetes#Deployment]], [[Система Kubernetes#Service]]
* [[Система Kubernetes#"Внутри" minikube]]
* [[Система Kubernetes#Minikube ingress-nginx-controller]]
* [[Система Kubernetes#ingress example]] (с tls)
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
* [[Сервис Keepalived]] (для 443, можно, для демонстрации, и 80)
#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
* Kubernetes [[Система Kubernetes#cert-manager]]
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- -- 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
* Использование Nginx ([[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)]]) или [[Решение HAProxy]]
...
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