Radius Listener
Parameters which can be used to configure Radius Listener:
| Parameter | Type | Default | Description |
|---|---|---|---|
ack |
boolean |
true |
If false, RADIUS messages will not be acknowledged |
affinity |
k8s:Affinity |
pod affinity (Kubernetes docs: Affinity and anti-affinity). If unset, a default anti-affinity is applied using antiAffinityPreset to spread pods across nodes |
|
agentLogLevel |
string |
"info" |
Verbosity of logging for the agent container. Available options: "debug" "info" "warn" "error" |
agentLogFormat |
string |
"text" |
Format of logging for the agent container. Available options: "text" "json" |
agentResources |
k8s:Resources |
|
Resources allocated to the agent container if resourceDefaults (global) is true |
antiAffinityPreset |
string |
"preferred" |
pod anti affinity preset. Available options: "preferred" "required" |
checkMessageTimestamps |
boolean |
false |
If true, check to ensure the time difference measured against a timestamp tracked in Redis does not exceed the maximum allowed skew (checkMessageTimestampsAllowSkew) |
checkMessageTimestampsAllowSkew |
integer |
1 |
Number of seconds of skew allowed when checkMessageTimestamps is enabled |
containerSecurityContext |
k8s:SecurityContext |
|
SecurityContext applied to each container |
enabled |
boolean |
false |
If true, enable deployment of Radius Listener & accompanying IP Mapper |
hostNetwork |
boolean |
false |
Use host networking for pods |
lua |
Lua | Lua script to parse and process each inbound RADIUS message. Note: This must be configured for Radius Listener to function properly |
|
nodeSelector |
k8s:NodeSelector |
{} |
Kubernetes pod nodeSelector |
podAnnotations |
k8s:Annotations |
{} |
Annotations to be added to each pod |
podDisruptionBudget |
k8s:PodDisruptionBudgetSpec |
{} |
Spec of PodDisruptionBudget to be applied to deployment |
podLabels |
k8s:Labels |
{} |
Labels to be added to each pod |
podSecurityContext |
k8s:PodSecurityContext |
|
SecurityContext applied to each pod |
radiusListenerSecretName |
string |
Name of a Secret from which to grab the authentication secret. If not supplied a random password is generated and stored in a Secret |
|
radiusListenerSecretPasswordKey |
string |
"password" |
Name of the item in the radiusListenerSecretName Secret from which to grab the password |
redis |
Redis Configuration | If deployed in the Userplane: Configuration of the Redis read-write cluster used to store data parsed from RADIUS messages | |
readyInterval |
integer |
5 |
How often readiness of Radius Listener should be calculated in seconds |
remotes |
Map of Remote | {} |
Map of remote RADIUS servers to apply authentication to RADIUS servers individually |
replicas |
integer |
1 |
Default number of replicas in a Deployment |
resources |
k8s:Resources |
|
Resources allocated to the Radius Listener container if resourceDefaults (global) is true |
secretName |
string |
yes |
|
secretKey |
string |
"secret" |
|
service |
Service | |
Radius Listener UDP Service configuration |
serviceLabels |
k8s:Labels |
{} |
Labels to be added to each service |
sessionExpireInterval |
go:DurationString |
24h |
Duration after which a RADIUS session expires. If set to 0, sessions never expire. |
tolerations |
List of k8s:Tolerations |
[] |
Kubernetes pod Tolerations |
topologySpreadConstraints |
List of k8s:TopologySpreadConstraint |
[] |
Kubernetes pod topology spread constraints |
Lua
Radius Listener requires a lua script to be provided which will apply logic to the inbound RADIUS message to convert it to the data which you need for filtering policies. As these are dependent on the RADIUS implementation which is used and differ in each user's environment, we cannot supply a useful default.
An example of a very simple script:
<parent>:
radiusListener:
enabled: true
lua:
script: |
local AcctSessionID = 44
function handle()
setSession(getString(AcctSessionID))
setUsername(getClassWithPrefix('CCUSERNAME!'))
setOpaqueID('-')
end
Configuration options for Radius Listener lua script:
| Parameter | Type | Default | Description |
|---|---|---|---|
options |
dictionary |
{} |
Set of key:value pairs to be exposed as options to the lua script at runtime. Example: |
script |
string |
"secret" |
Lua script, provided inline in the values overrides |
scriptConfigMap |
integer |
Name of a ConfigMap holding the lua script | |
scriptName |
string |
"radius.lua" |
Name of the data item within scriptConfigMap from which to attempt to grab the script |
Remotes
You can configure Radius Listener to apply fine-grained access control to remotes, by specifying entries in the remotes map. Each inbound RADIUS message originating from a source matched to an entry in remotes has the authentication tested against the secret configured for that remote. For example:
<parent>:
radiusListener:
enabled: true
remotes:
remote1:
address: 12.34.56.78
port: 12345
secretName: remote1-secret
remote2:
address: "fc00:cc:28:11:c975:4f54:c5e1:5479"
secretName: remote2-secret
secretKey: custom_item
Configuration options for remotes:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
address |
string |
yes |
Source address of the incoming RADIUS messages to match against | |
port |
integer |
Source port of the incoming RADIUS messages to match against. If empty, any source port is matched | ||
secretName |
string |
yes |
Name of a Secret from which to grab the authentication secret | |
secretKey |
string |
"secret" |
Name of the item in the secretName Secret from which to grab the secret |
Service Configuration
Parameters to configure the service object for this deployment. For example:
<parent>:
radiusListener:
enabled: true
service:
type: LoadBalancer
annotations:
metallb.universe.tf/address-pool: name_of_pool
| Parameter | Type | Default | Description |
|---|---|---|---|
allocateLoadBalancerNodePorts |
boolean |
true |
If true, services with type LoadBalancer automatically assign NodePorts. Can be set to false if the LoadBalancer provider does not rely on NodePorts |
annotations |
k8s:Annotations |
{} |
Annotations for the service |
clusterIP |
string |
Static cluster IP, must be in the cluster's range of cluster IPs and not in use. Randomly assigned when not specified. | |
clusterIPs |
List of string |
List of static cluster IPs, must be in the cluster's range of cluster IPs and not in use. | |
externalIPs |
List of string |
List of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes and must be user-defined on the cluster's nodes | |
externalTrafficPolicy |
string |
Cluster |
Can be set to Local to let nodes distribute traffic received on one of the externally-facing addresses (NodePort and LoadBalancer) solely to endpoints on the node itself |
healthCheckNodePort |
integer |
For services with type LoadBalancer and externalTrafficPolicy Local you can configure this value to choose a static port for the NodePort which external systems (LoadBalancer provider mainly) can use to determine which node holds endpoints for this service |
|
internalTrafficPolicy |
string |
Cluster |
Can be set to Local to let nodes distribute traffic received on the ClusterIP solely to endpoints on the node itself |
ipv4 |
boolean |
false |
If true, force the Service to include support for IPv4, ignoring globally configured IP Family settings and/or cluster defaults. If ipv4 is set to true and ipv6 remains false, the result will be an ipv4-only SingleStack Service. If both are false, global settings and/or cluster defaults are used. If both are true, a PreferDualStack Service is created |
ipv6 |
boolean |
false |
If true, force the Service to include support for IPv6, ignoring globally configured IP Family settings and/or cluster defaults. If ipv6 is set to true and ipv4 remains false, the result will be an ipv6-only SingleStack Service. If both are false, global settings and/or cluster defaults are used. If both are true, a PreferDualStack Service is created |
labels |
k8s:Labels |
{} |
Labels to be added to the service |
loadBalancerIP |
string |
Deprecated Kubernetes feature, available for backwards compatibility: IP address to attempt to claim for use by this LoadBalancer. Replaced by annotations specific to each LoadBalancer provider |
|
loadBalancerSourceRanges |
List of string |
If supported by the LoadBalancer provider, restrict traffic to this LoadBalancer to these ranges | |
loadBalancerClass |
string |
Used to select a non-default type of LoadBalancer class to ensure the appropriate LoadBalancer provisioner attempt to manage this LoadBalancer service | |
publishNotReadyAddresses |
boolean |
false |
Service is populated with endpoints regardless of readiness state |
sessionAffinity |
string |
None |
Can be set to ClientIP to attempt to maintain session affinity. |
sessionAffinityConfig |
k8s:SessionAffinityConfig |
{} |
Configuration of session affinity |
type |
string |
ClusterIP |
Type of service. Available options: "ClusterIP" "LoadBalancer" "NodePort" |