For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
CommunitySign Up
HomeGuidesVerbsAPI ReferenceSelf-HostingClient SDKsTutorialsChangelog
HomeGuidesVerbsAPI ReferenceSelf-HostingClient SDKsTutorialsChangelog
  • Overview
    • Licensing
    • Post-Install Steps
    • Setting up WebRTC and SIP TLS
    • Krisp Turn-Taking
  • Hosting Providers
    • AWS
    • Azure
    • GCP
    • OCI
  • Bare metal / VPS
    • Debian package
  • Kubernetes
    • AWS (EKS)
    • Azure (AKS)
    • GCP (GKE)
    • Exoscale (SKS)
LogoLogo
CommunitySign Up
On this page
  • Overview
  • VoIP and Kubernetes: Why Host Networking is Required
  • Cluster Architecture
  • Deployment Workflow
  • Supported Providers
  • Resources

Kubernetes Deployment

Deploy jambonz on Kubernetes
Was this page helpful?
Edit this page
Previous

AWS (EKS)

Deploy jambonz on Amazon Elastic Kubernetes Service
Next
Built with

Overview

jambonz can be deployed on Kubernetes using a two-step process:

  1. Provision a Kubernetes cluster using the provided Terraform templates for your cloud provider.
  2. Deploy jambonz into the cluster using the jambonz Helm chart.

VoIP and Kubernetes: Why Host Networking is Required

Deploying VoIP applications on Kubernetes has some unique requirements that differ from typical web workloads. Most jambonz components — the web portal, monitoring, databases, Redis, and application-layer feature servers — run normally using Kubernetes’ default overlay networking on the system node pool. However, the SIP and RTP pods that handle the front-end telephony processing must run with host networking enabled (hostNetwork: true).

This is not optional — it is a hard requirement of the SIP protocol. SIP embeds IP addresses directly in the signaling messages (SDP, Via headers, Contact headers). If a SIP or RTP pod uses overlay networking, the IP addresses in the SIP messages will be internal cluster IPs that are unreachable from the outside world. Calls will fail because remote endpoints cannot route media or signaling back to an internal pod IP.

By running the SIP and RTP pods with host networking, these pods use the node’s actual network interface and public IP address. This ensures that the IP addresses advertised in SIP signaling are routable and that carriers and endpoints can reach the jambonz SBC directly.

If you’re experienced with Kubernetes, host networking may feel like an anti-pattern. For VoIP workloads it is an absolute necessity due to how SIP and RTP protocols operate at the network level.

Cluster Architecture

All supported cloud providers use the same general cluster architecture with three node pools:

Node PoolPurposePublic IPsHost NetworkingTaintLabel
SystemWeb portal, monitoring, databases, RedisNoNoNonepool=system
SIPSBC for SIP signalingYesYessip=true:NoSchedulevoip-environment=sip
RTPMedia processing (RTP streams)YesYesrtp=true:NoSchedulevoip-environment=rtp

The SIP and RTP node pools require public IP addresses and host networking so they can be reached directly by SIP trunking carriers and endpoints. The taints ensure that only jambonz VoIP workloads are scheduled onto those nodes.

Deployment Workflow

The general deployment workflow is the same for all providers:

  1. Clone the Terraform repository.
  2. Navigate to the appropriate provider directory and configure terraform.tfvars.
  3. Run terraform init && terraform plan && terraform apply to provision the cluster.
  4. Configure kubectl to connect to your new cluster.
  5. Deploy jambonz using the Helm chart.
  6. Complete the Post-Install Steps.
  7. Generate a software license key as described in Software Licensing.

Supported Providers

  • AWS (EKS)
  • Azure (AKS)
  • GCP (GKE)
  • Exoscale (SKS)

Resources

  • Terraform templates repository
  • jambonz Helm chart