KV-кластер (etcd)
Содержание
Размещение #
etcd развёрнут на управляющем кластере — трёх серверах под управлением администратора сети. Три узла etcd обеспечивают кворум: кластер продолжает работу при потере одного сервера.
| Аспект | Значение |
|---|---|
| Расположение | Только на управляющем кластере (3 узла) |
| Отказоустойчивость | Выдерживает потерю 1 из 3 узлов |
| Консистентность | Строгая (протокол Raft) |
Это принципиальное изменение по сравнению с предыдущей архитектурой, где etcd размещался на Core-нодах. Теперь Core-ноды полностью выведены из плоскости управления.
Хранимые данные #
| Категория | Содержимое |
|---|---|
| Маршруты клиентов | UUID → адрес Core-ноды, SNI ячейки |
| Core-ноды | Адрес, ячейка, статус heartbeat, параметры соединения |
| Entry-конфигурации | serviceName, параметры Xray для каждой ячейки |
| Сертификаты | Метаданные, статусы отзыва |
| Пользователи | UUID устройств, статусы активности |
| Ячейки | Домены, список Core-нод, параметры |
Управление доступом (ACL) #
| Клиент | Права | Область |
|---|---|---|
| Управляющий кластер | Чтение / запись | Все данные |
| Entry-поды | Только чтение | Маршруты, serviceName, статусы Core-нод |
| Core-ноды | Нет прямого доступа | — |
Entry-поды получают доступ к etcd через API-прокси управляющего кластера с минимальными правами. Прямое подключение Entry к etcd не предусмотрено.
Запросы Entry-подов #
При установке нового клиентского соединения Entry-под выполняет единственный запрос:
GET /routes/{UUID} → {core_address, sni, service_name, cert_id}
Результат кешируется на время сессии. Повторные запросы не выполняются до завершения соединения.
API для автоматизации #
etcd предоставляет gRPC API, на базе которого строятся инструменты управления сетью:
- Telegram-бот для административных операций.
- Subscription-сервис для выдачи клиентских конфигураций.
- Механизм phone-home для регистрации Core-нод.