Что-то в последнее время затихли обсуждения (видимо, все в отпусках), ну что-же добавлю еще тему без обсуждения, хотя, очень хотелось бы почитать мысли саомохостят по поводу кластеризации и обеспечения высокой доступности
Вариантов тут несколько
- K8S и аналоги
- Костыли и страдания
Покажу свой вариант на примере реализации простого 4. 4. reverse proxy (данный пост является результатом предыдущих моих постов и изысканий)
Итак, дано:
- 3 ноды Proxmox VE на основе мини ПК (у меня их больше, но для простоты будет 3)
- 1 Роутер для выхода в интернет и публикации сервисов в оном через DNAT
- Ресурсы на то, чтобы обеспечить высокую доступность и отказоустойчивость критически важных сервисов, таких как
3.1. Reverse proxy
3.2. Секреты - Отсутствие ресурсов на то, чтобы обеспечить полное дублирование всех сервисов хомлабы
- Разворачивание сервисов в LXC контейнерах внутри PVE
За рамками данного описания поместим Proxmox HA, но его можно тоже обсудить
К чему я пришел, минимальная версия
Остановимся подробнее на компонентах
- На 3 ноде PVE развернут Komodo (почитать про него можно тут, на форуме) и в каждом LXC контейнере развернут komodo periphery, осуществляющий связь самого komodo с докером в LXC контейнерах - это надо для автоматического деплоя сервисов.
- На 3 ноде PVE развернут Fogejo сервер, которй хранит
2.1. Конфигурацию сервисов в виде git репозиторя с docker-compose.yml и конфигами
2.2. Собственные docker образы для разворачивания в лабе
2.3. CI/CD для деплоя всего этого
2.4. Конфигурацию traefik (CI/CD пайплайн загружает конфиги в consul) - На каждой ноде PVE развернут OpenBao - открытый форк HashiCorp Vault для хранения секретов - тут мы имеем отказоустойчивый кластер
- На 1 Ноде PVE есть сервис Certbot, который занимается выпуском и обновлением сертификатов через Letsencrypt и Cloudflare DNS Challenge - он выпускает сертификаты и складывает их в openbao для дальнейшего переиспользования. Только он занимается выпуском сертификатов, а остальные потребители их только запрашвают
- На каждой PVE ноде развернут Traefik Node, который состоит из
5.1. Vault agent - он подключается к кластеру OpenBao и вытягивает секреты и tls сертификаты. При обновлении сертификата агент отправляет traefik команду перечитать конфиги и подтягуть новый сертификат
5.2. Нода кластера consul - это еще одно KV хранилище от HashCorp, по сути, распределенная БД, где каждая нода хранит в себе весь набор данных
5.3. Сам traefik, который получает секреты и сертификаты из openbao, а конфигурацию роутеров, миделваров и сервисов из consul
5.4. Authentik Autentication Proxy Outpost - сервис authentication proxy, для приложений, которые не поддерживают собственную аутентификацию (или поддерживают, но простую), например Pulse, Traefik Dashboard, Uptime Kuma Traefik может реализовать собственную аутентификацию в Authentik с перенаправлением в Authentik для аутентификации и проксированием в приложение только если есть валидная кука. В самом Authentik есть встроенный Embeded Proxy Outpost (в зависимости от разворачивания), но я развернул по инстансу в каждой ноде и Authetik Proxy ходит в Authentik только за конфигурацией и токенами
5.5. VRRP демона (точнее kepalived демона, если быть точным), который отслеживает доступность трафика на своей ноде, связывается с другими нодами для определения мастера. На выходе мы имеем один виртуальный IP адрес, который назначается одной из нод VRRP - Роутер входящий запрос направляет на VRRP адрес, который обслуживается одним их traefik node.
Зелеными стрелками показан путь HTTPS трафика:
- Роутер направляет входящий трафик по 80 и 443 порту на VRRP адрес
- На VRRP адресе висит один из traefik, который имеет в себе полную конфигурацию проксирования, он терминирует TLS и направляет запрос на конкретный сервис
Внутри локалки ситуалция похожая:
- ПО DNS запрос направляется на ближайший VRRP Traefik адрес
- Traefik нода направляет запрос на свой сервис
Тут у меня пока в ручном режиме происходит привязывания трафика к сервису на своей ноде, но я в процессе делегирования этого netbox
Синими стрелками показаны связи внутри кластера
Что в итоге имеем (без учета кворума, но я тоже кое-что реализовал за рамками данной статьи):
- При наличии хотя бы одного включенного мини ПК с запущенным на нем traefik и openbao у нас имеется локальный IP адрес, на котором работает reverse proxy
- Поскольку IP адрес один, то на роутере легко оккрыть порст с пробросом трафика на этот IP
- На уровне DNS и VRRP сервис
service.domain.comв локальной сети обслуживается или traefik на этой же PVE Node (для минимизации пересылки трафика по сети) или любой другой, доступной в сети - Сервис certbot занимается централизованным выпуском и обновлением сертификатов, поэтому, я не сталкиваюсь с лимитами по получению сертификатов от certbot, а потребитель сертификата получает его сразу же при помощи vault-agent
- Обновление конфигурации роутинга трафика происходит путем правки git репозитория, который потом при помощи Ci/CD загружается в consul кластер, а их consul кластера разносится уже в traefik с автоматическим подтягиванием изменений
- Часть сервисов, таких, как komodo, certbot, forgejo, либо не отказоустойчивые, либо отказоустойчивость организована другими методами (например proxmox HA)
- Балансировка трафика частично реализована средствами traefik, например, consul и openbao в service указаны внутренние адреса всех нод, соостветственно, по адресу https://openbao.domain.com отвечает любая из доступных traefik нод (не любая, а одна из доступных в соответствии с приоритезацией), которая направляет запрос на любую из доступных нод
openbao - На каждой Traefik ноде развернут еще и Authentik Authentication Proxy, который занимается фильтрацией трафика для сервисов, не поддерживающих собственную аутентификацию и в “основной” Authentik ходят только за конфигурацией
- Traefik и OpenBao ноды, развернутые на каждой PVE ноде потребляют 400-500МБ оперативки в сумме + 1-3% CPU
- Для провижининга новых нод испольузется Ansible, для раскатки сервисов используется Komodo
А как вы реализуете отказоустойчивость в своих домашних лабах?




