Install with Helm⚓︎
xRouter is installed as one Helm release from Expeto's chart repository. This page covers adding the repository, writing the values file, installing MetalLB where BGP or LoadBalancer addresses are needed, and the install itself. The IPX-facing HSS settings have their own configuration page.
Add the Helm repository⚓︎
helm repo add expeto https://repo.expeto.io/repository/ngc \
--username '<username>' --password '<password>'
helm repo update
helm search repo expeto/xrouter
Write the values file⚓︎
Important
The values file for a deployment is agreed with Expeto Support during the design phase and applied as agreed. Route later changes through Expeto Support as well: interconnect and routing settings changed on your own are unsupported and can block a future upgrade.
The chart validates its values against a schema: an install without the required keys is refused
before anything is created. A minimal values.yaml:
global:
plmn:
mcc: "001"
mnc: "001"
ueConfig:
defaultIpRanges:
ipv4Cidr: 100.64.0.0/20 # default UE address range
defaultDnsServers:
ipv4: [192.0.2.53]
apn: internet
agent:
connections:
customerId: "2851" # from xControl
siteId: "3051"
systemId: "3351"
serverUri: https://xcontrol.example.com
brokerUri: https://xcontrol.example.com
hss:
diameter:
tcp: false # SCTP towards the IPX
host: hss01
realm: epc.mnc001.mcc001.3gppnetwork.org
map:
enabled: true
smsc:
enabled: true
global.plmnandglobal.ueConfigset the home network identity and the defaults for UE address assignment.agent.connectionsidentifies the installation to xControl. The token is a secret and is passed on the command line.- The
hssblock is where the interconnect configuration lives; the HSS configuration page walks through it.
The chart's examples/ directory holds complete values files for typical deployments, including
BGP towards both sides and a geo-redundant HSS:
helm pull expeto/xrouter --untar
ls xrouter/examples
The values reference lists the top-level sections.
Install MetalLB⚓︎
Skip this step on a managed cloud or when the cluster already runs MetalLB. Otherwise install MetalLB with FRR-K8s before the core, from Expeto's repository:
helm install metallb expeto/metallb -n metallb-system --create-namespace \
--set metallb.frrk8s.nodeSelector.'node-role\.kubernetes\.io/worker'='' \
--set imageCredentials.username='<username>' \
--set imageCredentials.password='<password>' \
--set imageCredentials.email='user@example.com'
The chart can also bundle MetalLB (metallb.enabled=true); because MetalLB's
CustomResourceDefinitions must exist before the core's address pools are rendered, that route takes
an install followed by an upgrade.
Install xRouter⚓︎
kubectl create namespace xrouter
helm install xrouter expeto/xrouter -n xrouter -f values.yaml \
--set imageCredentials.username='<username>' \
--set imageCredentials.password='<password>' \
--set imageCredentials.email='user@example.com' \
--set agent.connections.apiToken='<site API token>'
Quote every --set value in single quotes so the shell and Helm's type coercion leave it alone.
The release installs MariaDB Galera and Redis, then the network functions; expect several minutes
on a fresh cluster.
kubectl -n xrouter get pods -w
The first install creates a Secret named expeto-seed in the namespace. Every generated password
is derived from it, so the release can be reinstalled with the same credentials as long as the
Secret is kept. Back it up with the values file.
OpenShift⚓︎
Create a project instead of a namespace and use oc where this guide says kubectl. The chart
detects OpenShift, renders Routes instead of Ingress objects and ships the security context
constraints the user plane needs. Set the node port range with the cluster network operator:
oc patch network.config.openshift.io cluster --type=merge \
-p '{"spec":{"serviceNodePortRange":"1024-38413"}}'
Next steps⚓︎
Continue with Verify the installation.