Skip to main content

What you’ll build

You install the routr-connect Helm chart on a Kubernetes cluster, create a SIP Domain and three Agents (1001, 1002, 1003), register softphones, and call from one extension to another. Routr routes these calls as agent-to-agent. This is the same setup you would use for an office intercom: every desk phone or softphone is an Agent, and anyone can dial anyone else by extension.

Prerequisites

  • A Kubernetes cluster: Docker Desktop with Kubernetes enabled, minikube, or k3s
  • kubectl connected to that cluster
  • Helm 3
  • Node.js and npm, to install rctl
  • Two SIP softphones (for example, Zoiper on your laptop and Linphone on your phone), on the same network as the cluster
  • The IP address of your machine on your local network (for example, 192.168.1.3)

Steps

1

Add the Helm repository

Add the Routr chart repository and refresh the local cache.
2

Create a namespace

Create a namespace to hold the release.
3

Write your values file

Create a values.yaml file. It sets the address that EdgePort advertises to softphones, exposes SIP over UDP with a LoadBalancer Service, and turns off TLS on the API for this local test.Filename: values.yaml
EdgePort needs externalAddrs to write the right address into SIP headers. The chart’s default Service type is NodePort, which exposes SIP on a high port. LoadBalancer exposes it on port 5060.
Docker Desktop and k3s publish LoadBalancer Services on the node’s address. On minikube, run minikube tunnel in a separate terminal so the Service gets an address.
4

Install the chart

Install the chart as a release named sipnet.
Watch the pods until they are all Running. This takes a few minutes the first time, while images download and PostgreSQL initializes.
Every pod shows Running, and kubectl get svc -n sipnet sipnet-routr-edgeport-udp shows type LoadBalancer on port 5060/UDP.
5

Connect rctl to the API

Install the command-line tool.
The API Server isn’t exposed outside the cluster. Forward its port to your machine and leave this command running in its own terminal.
rctl connects to localhost:51908 by default. Use --insecure on every command, because TLS is off.
6

Create the Domain

Create a Domain for the intercom.
7

Create credentials and Agents

Create a set of credentials for the first extension, with username 1001 and password 1234.
Create the Agent and link it to the Domain and credentials.
Repeat both commands for 1002 and 1003, each with its own credentials. Then list the Agents.
8

Register the softphones

Configure each softphone with one extension.The Domain must be sip.local, because Routr finds the Agent by the user and host in the request. The proxy setting tells the softphone where to send requests, since sip.local isn’t a real DNS name.
Each softphone shows its account as registered.
9

Call another extension

From the softphone registered as 1001, dial 1002. The other softphone rings. Answer it and talk.Routr sees that both the caller and the callee are Agents in the same Domain, looks up sip:1002@sip.local in the Location Service, and forwards the call.
The call connects in both directions: 1001 can call 1002, and 1002 can call 1001.
The chart runs two EdgePort replicas. If a softphone registered through one EdgePort and the call arrives on the other, the EdgePorts forward the request between them. See EdgePort cooperation.

Clean up

Remove the release and the namespace.
Deleting the namespace also deletes the PostgreSQL volume claim and its data.

Next steps

Deploy to Civo with Helm

Run the same chart on a public cloud cluster.

Secure the server

Turn TLS back on for the API and the signaling.

Helm values

Every value the chart accepts.

Routing

How Routr decides between agent-to-agent and the other routing types.