Owner-scoped package registry (pub) hosts all freeradius artifacts; give the bare-metal bundle a self-explanatory name. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
FreeRADIUS - обзор инфраструктуры
Профиль: infra-lite. Бизнес-логику самого FreeRADIUS здесь не описываем.
Назначение
Сборка и поставка кастомного FreeRADIUS 3.2.x для hotspot/captive-portal сценариев.
Репозиторий не содержит сервиса - он упаковывает апстримный FreeRADIUS с
доп. модулем rlm_raw и накладывает конфиги под две среды выполнения.
Версия - единый источник
VERSION (корень) = 3.2.8. Из него CI выводит:
RADIUS_TAG=release_3_2_8(тег исходников FreeRADIUS для сборки .deb),- пин пакетов
3.2.8+git(образ и hosted), appVersionчарта.
CI (prepare) падает, если packaging/hosted/.env (FREERADIUS_TAG) или
charts/freeradius/Chart.yaml (appVersion) разошлись с VERSION. Ветка
rlm_raw - отдельный параметр (workflow_dispatch input, дефолт v3.2.4).
Артефакты (Gitea, owner pub)
| Артефакт | Реестр |
|---|---|
.deb |
https://git.ahax86.ru/api/packages/pub/debian (distribution noble, component main) |
| Образ | git.ahax86.ru/pub/freeradius:<version> (+ latest) |
| Hosted-бандл | .../api/packages/pub/generic/freeradius-hosted/<version>/freeradius-hosted.tar.gz |
| Helm-чарт | https://git.ahax86.ru/api/packages/pub/helm |
Соглашение: локальный alias helm-репо - ahax86 (helm repo add ahax86 ...).
Релизный поток (.gitea/workflows/release.yaml, workflow_dispatch)
prepare ──► build-deb ──► build-image ──► package-helm
└──► package-hosted
.deb- источник истины:build-imageиpackage-hostedимеютneeds: build-debИ дополнительно проверяют, что версия3.2.8+gitуже опубликована в Debian-реестре (GETdists/noble/main/binary-amd64/Packages), иначе fail.- Авторизация: репо-секреты
PACKAGES_USER/PACKAGES_TOKEN(Gitea token, scopewrite:package). - Раннер:
ubuntu-latestс доступным Docker.
Режимы развёртывания
- Kubernetes (
charts/freeradius/): продуктовый Helm-чарт. Образ изbuild-image. Конфигиdefault/rest- в ConfigMap;sql- тоже в ConfigMap, но пароль БД не хранится там, а подставляется в рантайме через$ENV{DB_PASSWORD}из Secret (db.passwordилиdb.existingSecret).entrypoint.shкопирует/configs/*в/etc/freeradius. Сертификаты на PVC (persistence). nodeSelector/tolerations - конфигурируемые (по умолчанию пусто). Установка - из Helm-реестра Gitea. - Hosted / bare-metal (
packaging/hosted/install.sh, root): ставит запиненные .deb из Debian-реестра Gitea (apt-mark hold), подставляет хосты/порты/креды в конфиги черезsedиз.env_cnf, ставит systemd-юнит и cron на ежемесячный перевыпуск сертификатов (cron/radius-renew.sh).update.shбампит версию пакета (unhold-> install -> hold). Для приватного реестра -DEB_AUTH="user:token".
Внешние зависимости и хосты
- Gitea:
git.ahax86.ru, ownerpub. Образы - container registry, .deb - Debian-реестр, чарт - Helm-реестр, hosted - generic-пакет. GPG-ключ apt-репо:https://git.ahax86.ru/api/packages/pub/debian/repository.key. - PostgreSQL
radius_db(схема RADIUS:radacct,radcheck,nas, ...). В k8s -postgresql-pgbouncer:6432, юзерadmin; в hosted - из.env_cnf. - REST API
hotspotter(k8s:hotspotter:8080, эндпоинтradius/auth). Используется как fallback-авторизация NAS, когда клиента нет в таблицеnas.
Сетевые порты
- Auth/acct: 31812 / 31813 (см. site
default,values.yamlservice.*,.env_cnf). - В k8s публикуются Service'ом (по умолчанию NodePort 31812/31813).
Инварианты
- Клиенты (NAS) резолвятся динамически: site
dynamic-clientsищет NAS поshortname(=NAS-Identifier) в таблицеnas; если нет - идётrestкhotspotter. Статическийclients.confминимален. - Включён модуль
delay(delay_reject); удаленыeap,inner-tunnel,proxy_rate_limit(синхронно в образе и hosted). - Модуль
rlm_rawобязателен: конфиги используют%{raw:...}(Called-Station-Id, NAS-Identifier). Без него сборка/конфиг не работают. - Сертификаты в k8s переживают рестарты через PVC;
entrypoint.shкопирует дефолтные только если каталогcertsпуст.
Риски и known warts
- Образ при сборке тянет .deb из Debian-реестра Gitea - предполагается публичный read для
owner
pub. Если реестр приватный, сборку образа надо чинить (read-токен/buildkit secret), а на нодах нуженDEB_AUTHдля apt. - Реестр может отклонить повторную заливку той же версии .deb (релиз - переиздание версии
требует bump
VERSION). - Пароль БД: в hosted - в
.env_cnf(gitignored,*.env_cnf); в k8s - в Secret. В git не попадает.
Рабочие правила
- Менять конфиги/версии осознанно: одно изменение часто нужно отразить и в чарте
(
charts/freeradius/), и в hosted (packaging/hosted/), и в образе (packaging/image/). - Версию менять только в
VERSION(плюс синхронно.env/Chart.yaml, иначе CI упадёт). - Прод-выкладка только вручную через Gitea Actions и только по команде пользователя.
- Долгоживущие решения дописывать сюда. Держать обзор кратким и актуальным.