Skip to content

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.plmn and global.ueConfig set the home network identity and the defaults for UE address assignment.
  • agent.connections identifies the installation to xControl. The token is a secret and is passed on the command line.
  • The hss block 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.