LiveKit SIP (livekit-sip)
SIP gateway that brings phone calls into LiveKit rooms (inbound INVITE, outbound CreateSIPParticipant, transfer TransferSIPParticipant by SIP REFER). It talks to LiveKit Server through Redis only; Navin Enterprise creates its trunks and dispatch rules through the LiveKit API.
Generated from catalog/services/livekit-sip.yaml: do not edit by hand.
Summary
| |
|---|
| Version | 1.22.0 |
| Use | install and configure |
| Layer | functional (AI catalog) |
| Category | AI serving |
| Installation methods | podman |
| External connection | no |
| Sandbox only | no |
Licence
| |
|---|
| SPDX identifier | Apache-2.0 |
| Licence policy | core licence (MIT or Apache-2.0) |
| Licence exception | - |
| Platform component | livekit-sip |
Packages and artifacts
A package the project of the service publishes (its image, its binary archive, its Python or OS package) carries the licence of the service; a third-party package carries the licence written on its row, read from the official upstream metadata.
| Kind | Package | Version | Licence | Details |
|---|
| container image | docker.io/livekit/sip | v1.22.0 | Apache-2.0 | image key sip, used by livekit-sip, digest sha256:ccca91b38e57b0565d965ee8e7db698f0d7fd1a44a4018c4cacae14eb95bed10 |
Images are pinned by tag in the descriptor, and by digest when the descriptor declares one (the offline bundle then refuses a pulled image that does not carry it); the digest is recorded in the mirror of the Manager when the offline bundle is imported, and every pull or load is checked against it.
Supported systems and architectures
| Method | Operating systems | Architectures |
|---|
podman | RHEL family (dnf), Debian family (apt), Arch Linux (pacman) | x86_64, aarch64 (not restricted by the descriptor) |
Certified host systems: RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). The host preflight accepts these systems (other releases of a known family give a warning, end of life releases are refused) and the x86_64 and aarch64 architectures.
Prerequisites
Host
- at least 2 CPU (warning,
cpu).
Network and ports
| Component | Port name | Port | Opened in the host firewall |
|---|
livekit-sip | sip | 5090/udp | yes |
livekit-sip | sip-tcp | 5090/tcp | yes |
livekit-sip | rtp | 20000-29999/udp | yes |
livekit-sip | health | 8590/tcp | no |
livekit-sip | metrics | 6790/tcp | yes |
Kernel parameters
| Parameter | Value |
|---|
net.core.rmem_max | 5000000 |
net.core.wmem_max | 5000000 |
Services and connections needed
Details and resolution: see Dependencies.
Installation methods and modes
| Method | Default | What the method uses |
|---|
podman | yes | the container images of the descriptor, run by Podman under systemd |
Components
| Component | Kind | Installation methods | Ports |
|---|
LiveKit SIP (livekit-sip) | worker | podman | 5090/udp, 5090/tcp, 20000-29999/udp, 8590/tcp, 6790/tcp |
Single instance (single) (default)
One SIP gateway.
What the mode deploys:
| Component | Placement |
|---|
livekit-sip | min 1, max 1 |
Redundant (redundant)
Several SIP gateways on the same Redis, Kamailio spreads the calls between them.
What the mode deploys:
| Component | Placement |
|---|
livekit-sip | min 2, recommended 2 |
Install this service
The install wizard of the Navin Manager plans, validates and runs the installation; you need the services:install permission on the cluster.
-
Open the wizard. In Clusters, choose the row action Install services of the target cluster. The wizard opens on its first step, Service.
-
Choose the service. On the Service step, select LiveKit SIP. The card shows the licence Apache-2.0 and the dependencies the installation needs.
-
Choose the hosts and the mode. On the Hosts step, tick the hosts, then choose the Mode: single (default), redundant. Each mode deploys the components listed in Installation methods and modes.
-
Bind the dependencies. On the Bindings step, choose for each dependency (livekit, redis) Install with the platform or Use an existing connection; an optional dependency can stay on No binding.
-
Configure. On the Configure step, review the parameters (see Configuration parameters). Passwords left empty with a generated default are generated and sealed by the Manager.
-
Review and install. On the Install step the Manager validates the plan and shows the installation order; when it says "The plan is valid. Ready to install.", choose Install. A highly available mode is installed only when its HA checks pass.
-
Verify. The operation ends when the health checks of every instance pass (see Health checks); the service then shows as running in Services.
High availability
Prerequisites
| Prerequisite | Must be highly available | Modes | Description |
|---|
redis | yes | redundant | Highly available Redis shared with LiveKit Server. |
Topology per mode
| Modes | Highest catalog level | Distribution | Quorum component | Fault domains | Description |
|---|
single | standalone (standalone) | single (single) | - | 1 | One gateway, no fault tolerance. |
redundant | ha (ha) | active-active (active-active) | - | 2 | Several gateways registered on the Redis bus; Kamailio sends each new call to a gateway its OPTIONS probe sees up. |
Notes
- A call lives on one gateway: the loss of that gateway cuts its calls in progress; new calls go to the other gateways.
Configuration parameters
Network
| Parameter | Type | Default | Allowed values | Required | Secret | Restart | Description |
|---|
SIP port (sip_port) | port | 5090 | - | no | no | yes | SIP signalling port, UDP and TCP (reached by Kamailio and Asterisk). |
First RTP port (rtp_port_start) | port | 20000 | - | no | no | yes | Start of the UDP media range. |
Last RTP port (rtp_port_end) | port | 29999 | - | no | no | yes | End of the UDP media range (keep the firewall rule in line). |
Health port (health_port) | port | 8590 | - | no | no | no | HTTP health endpoint (200 ready, 429 under load, 503 down), local to the host. |
Metrics port (metrics_port) | port | 6790 | - | no | no | no | Prometheus port. |
NAT external address (external_ip) | string | (empty) | ^$|^[0-9]{1,3}(\.[0-9]{1,3}){3}$ | no | no | yes | Public IPv4 address announced in SIP and SDP when the host is behind a one to one NAT (nat_1_to_1_ip); empty: the address of the host. |
LiveKit URL (livekit_url) | string | (empty) | - | no | no | no | ws:// or wss:// URL of LiveKit Server (its load balancer in the distributed mode); empty: the first server of the livekit binding. |
Security
| Parameter | Type | Default | Allowed values | Required | Secret | Restart | Description |
|---|
Hide from scanners (hide_inbound_port) | bool | true | - | no | no | no | Drop an INVITE that no trunk or dispatch rule accepts instead of answering it. |
Capacity
| Parameter | Type | Default | Allowed values | Required | Secret | Restart | Description |
|---|
Calls per instance (max_active_calls) | int | 0 | min 0, max 100000 | no | no | no | Calls an instance accepts before it reports itself loaded; 0: CPU only (max_cpu_utilization 0.9). |
Dependencies
For each active dependency the Manager takes the first of: the binding chosen in the wizard; a service of the same installation that provides it; a service already installed in the cluster; the only connection of the expected type. Otherwise an optional dependency stays unbound, and a required one is added to the installation in its default mode (the column below names the catalog service added).
| Binding | Provided by | Connection type | Endpoint | Optional | When nothing is bound | Description |
|---|
livekit | livekit | - | signal | no | livekit is added to the installation | LiveKit Server of the rooms: API key pair and WebSocket URL (its redis_bus must be on). |
redis | redis | redis | redis | no | redis is added to the installation | The Redis of LiveKit Server: message bus and SIP session state. |
Endpoints
| Endpoint | Scheme | Component | Port | Path | TLS parameter | Binding parameters | Binding secrets | Provisioning command |
|---|
sip | sip | livekit-sip | 5090 (sip_port) | - | - | - | - | - |
Commands
| Command | Component | Target | Description |
|---|
Health (health) | livekit-sip | every host | Health of every gateway (OK, under load or down). |
Recent logs (logs) | livekit-sip | chosen host | Last lines of the gateway journal. |
Health checks
Liveness (per instance)
| Component | Check | Details |
|---|
livekit-sip | HTTP http://127.0.0.1:{{ config.health_port }}/ | Expected 200, 429; 30 retries; interval 2 s; timeout 3 s |
Preflight checks
| Check | Type | Meaning | Severity | Components |
|---|
sip_port_free | port_free {"param": "sip_port"} | port 5090 free on the host | blocking | every component |
cpu | cpu_count {"min": 2} | at least 2 CPU | warning | every component |
Uninstall
Paths removed when the data is purged: {{ paths.log }}.
Quick links
- Metrics:
http://{{ host.fqdn }}:{{ config.metrics_port }}/metrics
Upstream documentation