What you’ll build
You install theroutr-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
kubectlconnected 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 EdgePort needs
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.yamlexternalAddrs 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 Watch the pods until they are all
sipnet.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 Create the Agent and link it to the Domain and credentials.Repeat both commands for
1001 and password 1234.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 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.
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.Clean up
Remove the release and the namespace.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.