What you’ll build
You create a k3s cluster on Civo with thecivo CLI, install the routr-connect Helm chart, and expose EdgePort through a cloud load balancer so SIP clients on the internet can reach it. You finish by connecting rctl to the API and registering a softphone.
Prerequisites
- A Civo account and an API key
- The
civoCLI, logged in with your API key (civo apikey addandcivo apikey current) kubectland Helm 3- Node.js and npm, to install
rctl - A SIP softphone
Steps
1
Create the cluster
Create a Kubernetes cluster named This uses your account’s default region, node size, and node count. Add
routr and wait until it’s ready.--nodes, --size, or --region to change them.Civo’s flags and defaults change over time. Run
civo kubernetes create --help to see the options your CLI version supports.2
Point kubectl at the cluster
Save the cluster’s kubeconfig into your local configuration.Switch to the new context if the CLI didn’t do it for you, then check the nodes.
kubectl get nodes lists your Civo nodes with status Ready.3
Add the Helm repository and a namespace
Add the Routr chart repository, refresh it, and create a namespace for the release.
4
Install the chart with a public EdgePort
Create a Install the chart as a release named Civo creates a load balancer for the
values.yaml file that exposes EdgePort’s UDP Service through a load balancer. Leave externalAddrs empty for now, because you don’t know the public address yet.Filename: values.yamlroutr.routr-routr-edgeport-udp Service. Wait until it has an external IP.The chart only sets the Service type; the cloud provider creates the load balancer. Confirm in the Civo dashboard that the load balancer forwards UDP port
5060. If your region or plan doesn’t support UDP load balancing, keep the default NodePort type and point clients at a node’s public IP and the assigned node port instead.5
Set the external address
Add the load balancer’s IP to Apply the change.Check that every pod is running.
values.yaml so EdgePort advertises it in SIP headers.Filename: values.yamlAll pods show
Running, including two EdgePort pods (routr-routr-edgeport-0 and routr-routr-edgeport-1).6
Verify with rctl
Install The API Server stays private. Forward its port in a separate terminal.Create a Domain, credentials, and an Agent. Answer the prompts as you did in the intercom tutorial.List the Agents to confirm the API works end to end.
rctl.7
Register a softphone
Configure a softphone with the Agent’s username and password, Routr carries signaling only. If your softphones sit behind different NATs and you hear no audio, add RTPEngine and enable RTPRelay. See Enable WebRTC for the
sip.local as the domain, and the load balancer IP (for example, 74.220.20.115:5060) as the outbound proxy over UDP.The softphone shows the account as registered. Register a second Agent on another device and call between them to confirm signaling works over the internet.
rtprelay values.Clean up
Delete the release, then the cluster. Deleting the cluster also removes its load balancer.Next steps
Deploy on Kubernetes
Production settings for the Helm chart.
Helm values
Every value the chart accepts.
Secure the server
Turn on TLS for the API and the signaling.
Deployment topologies
When to choose routr-one or routr-connect.