- CI: replace GitLab pipeline with Gitea Actions (.gitea/workflows/release.yaml); publish .deb/image/hosted/chart to Gitea registries; gate image+hosted on .deb (needs + registry pre-check) - drop connectone/Nexus; apt now from the Gitea Debian registry - single version source (/VERSION=3.2.8); CI enforces .env/Chart consistency - restructure: build/->packaging/deb, root Dockerfile->packaging/image, hosted/->packaging/hosted, .kube/->charts/freeradius - Helm chart: documented values, DB password via Secret/$ENV, configurable scheduling/persistence; remove plaintext creds and hostPath PV - gitignore *.env_cnf; docs for hosted (RU)/helm/root + agent KB sync Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
FreeRADIUS Helm chart
Deploys the custom FreeRADIUS 3.2.x build — with the rlm_raw
module, PostgreSQL backend and REST-based dynamic clients — to Kubernetes.
The chart is published to the Gitea Helm registry by CI:
https://git.ahax86.ru/api/packages/pub/helm
Prerequisites
- The container image must be published (CI job
build-image):git.ahax86.ru/pub/freeradius:<version>. - A reachable PostgreSQL with the RADIUS schema (
radacct,radcheck,nas, ...). - The REST
hotspotterservice (fallback NAS authorization). - If the image registry is private: a pre-created
docker-registrySecret, referenced viaimagePullSecrets.
Install
helm repo add --username <user> --password <token> \
ahax86 https://git.ahax86.ru/api/packages/pub/helm
helm repo update
helm upgrade --install freeradius ahax86/freeradius \
--namespace radius --create-namespace \
--set db.host=postgresql-pgbouncer \
--set db.password=<db-password>
Use an existing Secret for the DB password instead of --set db.password:
helm upgrade --install freeradius ahax86/freeradius -n radius \
--set db.existingSecret=freeradius-db --set db.passwordKey=password
db.password (or db.existingSecret) is required — install fails otherwise.
How config is delivered
default(virtual server) andrest(hotspotter) render into a ConfigMap.sqlrenders into the same ConfigMap but the password is not stored there: it is read at runtime via$ENV{DB_PASSWORD}, injected from the DB Secret.- The entrypoint copies
/configs/{default,sql,rest}into/etc/freeradius. - Certificates live on a PVC and survive restarts.
Values
| Key | Default | Description |
|---|---|---|
replicaCount |
1 |
Pod replicas. |
image.repository |
git.ahax86.ru/pub/freeradius |
Image repo. |
image.tag |
"" |
Empty → chart appVersion. |
image.pullPolicy |
IfNotPresent |
|
imagePullSecrets |
[] |
Names of pull secrets. |
args |
[freeradius, -f] |
Use [freeradius, -X] for debug. |
service.type |
NodePort |
ClusterIP / NodePort / LoadBalancer. |
service.authPort / service.acctPort |
31812 / 31813 |
UDP ports. |
service.authNodePort / service.acctNodePort |
31812 / 31813 |
NodePort only. |
service.externalTrafficPolicy |
Local |
NodePort only. |
db.host / db.port |
postgresql-pgbouncer / 6432 |
PostgreSQL. |
db.user / db.name |
admin / radius_db |
|
db.password |
"" |
Required unless db.existingSecret. |
db.existingSecret / db.passwordKey |
"" / db-password |
Use an existing Secret. |
api.host / api.port |
hotspotter / 8080 |
REST hotspotter. |
persistence.enabled |
true |
Cert PVC (else emptyDir). |
persistence.existingClaim |
"" |
Use a pre-created PVC. |
persistence.storageClass |
"" |
|
persistence.size |
32Mi |
|
resources / nodeSelector / tolerations / affinity |
{} / {} / [] / {} |
Scheduling. |
env |
{TZ: UTC} |
Extra container env. |
Note: the previous deployment pinned
nodeSelector freeradius=enabledand a matching toleration. These are no longer hardcoded — set them vianodeSelector/tolerationsif your nodes are tainted.
Render locally
helm template freeradius charts/freeradius --set db.password=test | less
helm lint charts/freeradius --set db.password=test