← К программе курса

Модуль 18 / 24

Ingress, reverse proxy и TLS

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы проведёте HTTPS-запрос через Cloudflare и внешний reverse proxy к Swarm service, различите уровни балансировки и проверите исключение недоступного backend.

  • объяснить путь запроса
  • различить edge и origin TLS
  • проверить health check
  • безопасно вернуть endpoint
02

2. Теория: путь запроса

Запрос проходит Cloudflare edge, домашний router, Traefik на devops-vm, один из трёх routing mesh endpoints и task. DNS выбирает edge, Traefik — node endpoint, mesh доставляет запрос task независимо от его размещения.

Внешний HTTP 200 подтверждает весь путь, но не исправность каждого backend. Поэтому нужны прямые probes и состояние service.

03

3. TLS на edge и origin

Клиентский сертификат предъявляет Cloudflare. Соединение Cloudflare с Traefik — отдельная TLS-сессия и зависит от режима SSL/TLS зоны. Клиентский сертификат не доказывает шифрование origin leg.

Traefik ограничивает Host rule шаблоном Swarm, а DNS использует точную запись. Control-plane порты 2377, 7946 и 4789 наружу не публикуются.

04

4. Reverse proxy и health checks

Traefik проверяет root URL каждого node endpoint раз в 10 секунд. Недоступный endpoint исключается из пула и возвращается после успешных probes.

Routing mesh принимает published port на node без локального task. Proxy проверяет mesh endpoint, а не конкретный container.

05

5. Методические указания

  • Подтвердите quorum и три backend
  • Останавливайте только один Engine
  • Держите restore отдельным блоком
  • Проверяйте direct и public URL
  • Не меняйте DNS/TLS во время drill
  • Дождитесь Ready и 3/3
06

6. Лабораторная работа: baseline

Проверьте service spec, tasks и каждый endpoint. Порт 18080 опубликован в ingress mode.

terminal
ssh swarm-manager-3 docker service inspect swarm-ingress-demo --pretty
ssh swarm-manager-3 docker service ps swarm-ingress-demo
for ip in 10.77.0.11 10.77.0.12 10.77.0.13; do curl --fail --show-error --connect-timeout 3 "http://${ip}:18080/"; done
07

7. Лабораторная работа: публичный HTTPS

Сравните HTTP и HTTPS, изучите сертификат по SNI и журнал Traefik. Команды не раскрывают tokens или private keys.

terminal
curl --fail --show-error --head http://swarm-demo.goretskiy.pro/
curl --fail --show-error --head https://swarm-demo.goretskiy.pro/
openssl s_client -connect swarm-demo.goretskiy.pro:443 -servername swarm-demo.goretskiy.pro </dev/null
docker logs --since 5m traefik
08

8. Лабораторная работа: исключение backend

Остановите Engine только на manager-1. Endpoint .11 не отвечает, .12 и .13 отвечают, пять public requests успешны. Ошибка первого curl ожидаема.

terminal
ssh swarm-manager-1 sudo systemctl stop docker
sleep 12
curl --connect-timeout 2 --max-time 4 http://10.77.0.11:18080/
curl --fail --show-error --connect-timeout 3 http://10.77.0.12:18080/
curl --fail --show-error --connect-timeout 3 http://10.77.0.13:18080/
for n in 1 2 3 4 5; do curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/; done
docker logs --since 2m traefik
09

9. Восстановление и диагностика

Сразу верните Engine и проверьте endpoint, cluster state и HTTPS.

terminal
ssh swarm-manager-1 sudo systemctl start docker
sleep 15
ssh swarm-manager-3 docker node ls
ssh swarm-manager-3 docker service ls
curl --fail --show-error --connect-timeout 3 http://10.77.0.11:18080/
curl --fail --show-error --output /dev/null https://swarm-demo.goretskiy.pro/
  • 502/504 — нет доступного origin
  • 404 — Host rule не совпал
  • TLS error — SNI, certificate или Cloudflare mode
  • direct работает, public нет — DNS, router или Traefik
10

10. Контроль, критерии освоения и cleanup

  • Какие балансировщики участвуют?
  • Почему task не обязан быть на выбранном node?
  • Чем edge TLS отличается от origin TLS?
  • Что проверяет Traefik?
  • Когда возникает 502?
  • Почему допустим отказ одного manager?

Модуль освоен, если один endpoint отказал без ошибок пяти public requests, а после restore node Ready и service 3/3. Cleanup — восстановленный Engine; demo service и route сохраняются.