<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>KubeVoIP documentation on KubeVoIP Docs</title><link>https://docs.kubevoip.com/</link><description>Recent content in KubeVoIP documentation on KubeVoIP Docs</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright (c) 2026 KubeVoIP</copyright><atom:link href="https://docs.kubevoip.com/index.xml" rel="self" type="application/rss+xml"/><item><title>API reference</title><link>https://docs.kubevoip.com/reference/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/reference/api/</guid><description>&lt;h1 id="api-reference"&gt;API reference&lt;/h1&gt;
&lt;!-- generated by scripts/export-docs-reference.py; do not edit by hand --&gt;
&lt;p&gt;This page is generated from the KubeVoIP CRDs in the platform repository.
Update the CRDs there, then regenerate this page.&lt;/p&gt;</description></item><item><title>Asterisk on Kubernetes</title><link>https://docs.kubevoip.com/asterisk-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/asterisk-on-kubernetes/</guid><description>&lt;h1 id="asterisk-on-kubernetes"&gt;Asterisk on Kubernetes&lt;/h1&gt;
&lt;p&gt;KubeVoIP uses Asterisk application pods for call flows that need application
behavior. Direct trunk-to-phone calls can avoid Asterisk and keep less state in
application pods.&lt;/p&gt;</description></item><item><title>Cleanup</title><link>https://docs.kubevoip.com/getting-started/cleanup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/getting-started/cleanup/</guid><description>&lt;h1 id="cleanup"&gt;Cleanup&lt;/h1&gt;
&lt;p&gt;If you used a dedicated &lt;code&gt;telephony&lt;/code&gt; namespace for the quickstart, uninstall the
operator and delete the namespace:&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm uninstall kubevoip --namespace telephony
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl delete namespace telephony&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;If you used an existing namespace, delete only the quickstart objects instead:&lt;/p&gt;</description></item><item><title>Component images</title><link>https://docs.kubevoip.com/reference/components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/reference/components/</guid><description>&lt;h1 id="component-images"&gt;Component images&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ghcr.io/kubevoip/kubevoip&lt;/code&gt;: operator.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ghcr.io/kubevoip/kubevoip-kamailio&lt;/code&gt;: Kamailio runtime.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ghcr.io/kubevoip/kubevoip-rtpengine&lt;/code&gt;: RTPengine runtime.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ghcr.io/kubevoip/kubevoip-asterisk&lt;/code&gt;: Asterisk application runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install the platform chart instead of selecting component tags manually.&lt;/p&gt;</description></item><item><title>FAQ</title><link>https://docs.kubevoip.com/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/faq/</guid><description>&lt;h1 id="faq"&gt;FAQ&lt;/h1&gt;
&lt;h2 id="is-kubevoip-related-to-kube-vip"&gt;Is KubeVoIP related to kube-vip?&lt;/h2&gt;
&lt;p&gt;No. KubeVoIP is a SIP and VoIP platform for Kubernetes. kube-vip is a
Kubernetes virtual IP project.&lt;/p&gt;</description></item><item><title>Helm values</title><link>https://docs.kubevoip.com/reference/helm-values/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/reference/helm-values/</guid><description>&lt;h1 id="helm-values"&gt;Helm values&lt;/h1&gt;
&lt;p&gt;The Helm chart exposes image repositories and tags for the operator and runtime
components, plus standard Kubernetes settings such as ServiceAccount, RBAC,
resources, node selectors, tolerations, and affinity.&lt;/p&gt;</description></item><item><title>HostNetwork media mode</title><link>https://docs.kubevoip.com/networking/hostnetwork/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/networking/hostnetwork/</guid><description>&lt;h1 id="hostnetwork-media-mode"&gt;HostNetwork media mode&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;HostNetwork&lt;/code&gt; avoids Kubernetes Service NAT for media but binds RTPengine ports
directly on selected nodes. The cluster operator must handle node selection,
public addresses, firewall rules, and port conflicts.&lt;/p&gt;</description></item><item><title>Install KubeVoIP</title><link>https://docs.kubevoip.com/getting-started/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/getting-started/install/</guid><description>&lt;h1 id="install-kubevoip"&gt;Install KubeVoIP&lt;/h1&gt;
&lt;p&gt;Install the operator with Helm:&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install kubevoip oci://ghcr.io/kubevoip/charts/kubevoip &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --version 0.5.0 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --namespace telephony --create-namespace&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Each Helm release watches only its installation namespace. Install a separate
release for each telephony namespace. CRDs remain cluster-scoped Kubernetes
resources shared by all releases.&lt;/p&gt;</description></item><item><title>Kamailio on Kubernetes</title><link>https://docs.kubevoip.com/kamailio-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/kamailio-on-kubernetes/</guid><description>&lt;h1 id="kamailio-on-kubernetes"&gt;Kamailio on Kubernetes&lt;/h1&gt;
&lt;p&gt;KubeVoIP runs Kamailio as the SIP gateway layer. Kamailio handles registration,
authentication, routing, Record-Route behavior, and RTPengine integration.&lt;/p&gt;</description></item><item><title>Kubernetes SIP trunking</title><link>https://docs.kubevoip.com/kubernetes-sip-trunking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/kubernetes-sip-trunking/</guid><description>&lt;h1 id="kubernetes-sip-trunking"&gt;Kubernetes SIP trunking&lt;/h1&gt;
&lt;p&gt;KubeVoIP models trunks with &lt;code&gt;SIPTrunk&lt;/code&gt; resources. Inbound trunks can trust
configured source CIDRs and use an inbound &lt;code&gt;DialPolicy&lt;/code&gt;. Outbound trunks can
present caller ID and answer digest challenges.&lt;/p&gt;</description></item><item><title>Kubernetes VoIP</title><link>https://docs.kubevoip.com/kubernetes-voip/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/kubernetes-voip/</guid><description>&lt;h1 id="kubernetes-voip"&gt;Kubernetes VoIP&lt;/h1&gt;
&lt;p&gt;KubeVoIP brings VoIP on Kubernetes into Kubernetes-native resources. It focuses
on SIP signaling, RTP media relay, runtime routing, and operator-managed
deployments.&lt;/p&gt;</description></item><item><title>Kubernetes VoIP quickstart</title><link>https://docs.kubevoip.com/getting-started/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/getting-started/quickstart/</guid><description>&lt;h1 id="kubernetes-voip-quickstart"&gt;Kubernetes VoIP quickstart&lt;/h1&gt;
&lt;p&gt;This quickstart creates a small SIP on Kubernetes deployment with two users:
&lt;code&gt;alice&lt;/code&gt; on extension &lt;code&gt;100&lt;/code&gt; and &lt;code&gt;bob&lt;/code&gt; on extension &lt;code&gt;101&lt;/code&gt;. Helm installs the
operator, a short inline manifest creates the temporary database and base
platform, and the &lt;code&gt;kubevoip&lt;/code&gt; CLI creates the SIP users and routes.&lt;/p&gt;</description></item><item><title>LoadBalancer networking</title><link>https://docs.kubevoip.com/networking/loadbalancer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/networking/loadbalancer/</guid><description>&lt;h1 id="loadbalancer-networking"&gt;LoadBalancer networking&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;LoadBalancer&lt;/code&gt; mode lets Kubernetes or your infrastructure allocate addresses
for SIP and RTP Services. If KubeVoIP cannot resolve an address yet, it reports
a waiting condition until the Service ingress is available.&lt;/p&gt;</description></item><item><title>Local development</title><link>https://docs.kubevoip.com/contributing/local-development/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/contributing/local-development/</guid><description>&lt;h1 id="local-development"&gt;Local development&lt;/h1&gt;
&lt;p&gt;In the platform repository:&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv sync --extra dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv run ruff check .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv run pytest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm lint charts/kubevoip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm template kubevoip charts/kubevoip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;</description></item><item><title>Platform resources</title><link>https://docs.kubevoip.com/concepts/platform-resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/concepts/platform-resources/</guid><description>&lt;h1 id="platform-resources"&gt;Platform resources&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NetworkProfile&lt;/code&gt; defines shared external addressing and local networks.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SIPGateway&lt;/code&gt; manages Kamailio registration, routing, and SIP edge behavior.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MediaRelay&lt;/code&gt; manages RTPengine replicas and media port ranges.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AsteriskPool&lt;/code&gt; manages private Asterisk application pods.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SIPUser&lt;/code&gt; represents a phone identity registered through Kamailio.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SIPTrunk&lt;/code&gt; represents provider-neutral inbound and outbound trunk policy.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CallScope&lt;/code&gt; groups searchable routes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DialPolicy&lt;/code&gt; defines which scopes a caller can search.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CallRoute&lt;/code&gt; routes calls to users, trunks, or Asterisk applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See the 

&lt;a class="link link--text" href="https://docs.kubevoip.com/reference/api/"&gt;API reference&lt;/a&gt; for generated field details.&lt;/p&gt;</description></item><item><title>PostgreSQL</title><link>https://docs.kubevoip.com/operations/postgresql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/operations/postgresql/</guid><description>&lt;h1 id="postgresql"&gt;PostgreSQL&lt;/h1&gt;
&lt;p&gt;KubeVoIP requires a PostgreSQL database and a standard connection Secret with
&lt;code&gt;host&lt;/code&gt;, &lt;code&gt;port&lt;/code&gt;, &lt;code&gt;dbname&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, and &lt;code&gt;password&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The operator runs forward database migrations automatically during
reconciliation. PostgreSQL stores route data, dial policies, subscriber hashes,
registrations, trunk metadata, and digest HA1 values. HA1 is
credential-equivalent for its SIP realm.&lt;/p&gt;</description></item><item><title>Release process</title><link>https://docs.kubevoip.com/contributing/release-process/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/contributing/release-process/</guid><description>&lt;h1 id="release-process"&gt;Release process&lt;/h1&gt;
&lt;p&gt;Platform releases publish the operator image, Helm chart, and GitHub release.
Runtime component images are versioned separately and pinned by the platform
chart.&lt;/p&gt;</description></item><item><title>RTPengine on Kubernetes</title><link>https://docs.kubevoip.com/rtpengine-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/rtpengine-on-kubernetes/</guid><description>&lt;h1 id="rtpengine-on-kubernetes"&gt;RTPengine on Kubernetes&lt;/h1&gt;
&lt;p&gt;KubeVoIP manages RTPengine replicas with stable Services, media port ranges,
and advertised external addresses.&lt;/p&gt;</description></item><item><title>Secrets</title><link>https://docs.kubevoip.com/operations/secrets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/operations/secrets/</guid><description>&lt;h1 id="secrets"&gt;Secrets&lt;/h1&gt;
&lt;p&gt;KubeVoIP reads Secrets only in the operator installation namespace. SIP user
passwords, trunk digest credentials, caller ID values, and database credentials
should stay out of Git and ConfigMaps.&lt;/p&gt;
&lt;p&gt;Rendered ConfigMaps, statuses, Events, and logs must not expose raw passwords
or digest HA1 values.&lt;/p&gt;</description></item><item><title>SIP on Kubernetes</title><link>https://docs.kubevoip.com/networking/sip-on-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/networking/sip-on-kubernetes/</guid><description>&lt;h1 id="sip-on-kubernetes"&gt;SIP on Kubernetes&lt;/h1&gt;
&lt;p&gt;SIP clients and trunks send requests to a &lt;code&gt;SIPGateway&lt;/code&gt;. Kamailio authenticates
callers, selects routes from PostgreSQL runtime data, and asks RTPengine to
rewrite SDP for media relay. Calls can target registered SIP users, outbound
trunks, or Asterisk application pods.&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://docs.kubevoip.com/operations/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.kubevoip.com/operations/troubleshooting/</guid><description>&lt;h1 id="troubleshooting"&gt;Troubleshooting&lt;/h1&gt;
&lt;p&gt;Start with resource status:&lt;/p&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame is-terminal not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n telephony get networkprofile,sipgateway,mediarelay,asteriskpool,sipuser,siptrunk,callscope,dialpolicy,callroute
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n telephony describe sipgateway main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n telephony logs deployment/kubevoip-kubevoip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;For one-way audio, check RTPengine Service addresses, firewall rules, and RTP
port forwarding. SIP and RTP public ports must match the private ports.&lt;/p&gt;</description></item></channel></rss>