coturn

February 1, 2026 ยท View on GitHub

Version: 9.4.0 Type: application AppVersion: 4.8.0

A Helm chart to deploy coturn

Homepage: https://github.com/small-hack/coturn-chart

Maintainers

NameEmailUrl
jessebotjessebot@linux.comhttps://github.com/jessebot/

Source Code

Requirements

RepositoryNameVersion
oci://registry-1.docker.io/bitnamichartsmysql13.0.1
oci://registry-1.docker.io/bitnamichartspostgresql16.7.10

Values

KeyTypeDefaultDescription
certificate.enabledboolfalseEnables auto issuing certificates over cert-manager certificates https://cert-manager.io/docs/concepts/certificate/
certificate.issuerNamestring"letsencrypt-staging"name of cert-manager issuer to use for cert generation. change to production issuer when you're stable
certificate.secretstring"turn-tls"name of secret to create for ssl cert
containerSecurityContext.allowPrivilegeEscalationboolfalseallow priviledged access
containerSecurityContext.capabilities.addlist["NET_BIND_SERVICE"]linux cabilities to allow for the coturn k8s pod
containerSecurityContext.capabilities.droplist["ALL"]linux cabilities to disallow for the coturn k8s pod
containerSecurityContext.enabledbooltrueEnables Security Context
containerSecurityContext.readOnlyRootFilesystemboolfalseallow modificatin to root filesystem
coturn.auth.existingSecretstring""existing secret with keys username/password for coturn
coturn.auth.passwordstring""password for the main user of the turn server
coturn.auth.secretKeys.passwordstring"password"key in existing secret for turn server user's password
coturn.auth.secretKeys.staticAuthSecretstring""key in existing secret for coturn static-auth-secret
coturn.auth.secretKeys.usernamestring"username"key in existing secret for turn server user
coturn.auth.staticAuthSecretstring""'Static' authentication secret value (a string) for TURN REST API only. If not set, then the turn server will try to use the 'dynamic' value in the turn_secret table in the user database (if present). The database-stored value can be changed on-the-fly by a separate program, so this is why that mode is considered 'dynamic'.
coturn.auth.usernamestring"coturn"username for the main user of the turn server
coturn.extraEnvVarslist[]Extra environment variables to pass to the Coturn container example: - name: STATIC_AUTH_SECRET_VAL_OPT value: supersecretpassword123abcyes
coturn.extraTurnserverConfigurationstring"verbose\n"extra configuration for turnserver.conf
coturn.initContainer.image.repositorystring"mikefarah/yq"registry and repository for init container config generator image
coturn.initContainer.image.tagstring"latest"tag for init container config generator image
coturn.listeningIPstring"0.0.0.0"coturn's listening IP address
coturn.logFilestring"stdout"set the logfile. Defaults to stdout for use with kubectl logs
coturn.ports.listeningint3478insecure listening port
coturn.ports.maxint65535maximum ephemeral port for coturn
coturn.ports.minint49152minimum ephemeral port for coturn
coturn.ports.tlsListeningint5349secure listening port
coturn.realmstring"turn.example.com"hostname for the coturn server realm
externalDatabase.databasestring""database to create, ignored if existingSecret is passed in
externalDatabase.enabledboolfalseenables the use of postgresql instead of the default sqlite to use the bundled subchart, enable this, and postgresql.enable
externalDatabase.existingSecretstring""name of existing Secret to use for postgresql credentials
externalDatabase.hostnamestring""required if externalDatabase.enabled: true and postgresql.enabled: false
externalDatabase.image.repositorystring""container registry and repo for database readiness docker image
externalDatabase.image.tagstring""container tag for coturn database readiness docker image
externalDatabase.passwordstring""password for database, ignored if existingSecret is passed in
externalDatabase.secretKeys.databasestring""key in existing Secret to use for the database name
externalDatabase.secretKeys.hostnamestring""key in existing Secret to use for the db's hostname
externalDatabase.secretKeys.passwordstring""key in existing Secret to use for db user's password
externalDatabase.secretKeys.usernamestring""key in existing Secret to use for the db user
externalDatabase.typestring"postgresql"Currently postgresql and mysql are supported.
externalDatabase.usernamestring""username for database, ignored if existingSecret is passed in
image.pullPolicystring"IfNotPresent"image pull policy, set to Always if using image.tag: latest
image.repositorystring"coturn/coturn"container registry and repo for coturn docker image
image.tagstring""docker tag for coturn server
labelsobject{"component":"coturn"}Coturn specific labels
mysql.auth.databasestring"coturn"database to create, ignored if existingSecret is passed in
mysql.auth.existingSecretstring""Use existing secret for password details. The secret has to contain the keys mysql-root-password, mysql-replication-password and mysql-password
mysql.auth.passwordstring""password for db, autogenerated if empty & existingSecret empty
mysql.auth.secretKeys.passwordstring"password"key in existing Secret to use for coturn user's password
mysql.auth.secretKeys.usernamestring"username"key in exsiting Secret to use for the coturn user
mysql.auth.usernamestring"coturn"username for database, ignored if existingSecret is passed in
mysql.enabledboolfalseenables bitnami mysql subchart, you can disable to use external db
mysql.initdbScriptsConfigMapstring"initdb-scripts-config"ConfigMap with the initdb scripts (Note: Overrides initdbScripts)
nameOverridestring""different name for the helm release
podSecurityContext.enabledbooltrueEnables Pod Security Context
podSecurityContext.fsGroupint1000all processes of the container are also part of the supplementary groupID
podSecurityContext.runAsGroupint1000for all Containers in the Pod, all processes run w/ this GroupID
podSecurityContext.runAsNonRootbooltruefor all Containers in the Pod, all processes run as non-root
podSecurityContext.runAsUserint1000for all Containers in the Pod, all processes run w/ this userID
podSecurityContext.seccompProfile.typestring"RuntimeDefault"Filter a process's system calls
postgresql.enabledboolfalseenables bitnami postgresql subchart, you can disable to use external db
postgresql.global.postgresql.auth.databasestring"coturn"database to create, ignored if existingSecret is passed in
postgresql.global.postgresql.auth.existingSecretstring""name of existing Secret to use for postgresql credentials
postgresql.global.postgresql.auth.passwordstring""password for db, autogenerated if empty & existingSecret empty
postgresql.global.postgresql.auth.secretKeys.adminPasswordKeystring"postgresPassword"key in existing Secret to use for postgres admin user's password
postgresql.global.postgresql.auth.secretKeys.databasestring"database"key in existingSecret for database to create
postgresql.global.postgresql.auth.secretKeys.hostnamestring"hostname"key in existingSecret for database to create
postgresql.global.postgresql.auth.secretKeys.userPasswordKeystring"password"key in existing Secret to use for coturn user's password
postgresql.global.postgresql.auth.secretKeys.usernamestring"username"key in exsiting Secret to use for the coturn user
postgresql.global.postgresql.auth.usernamestring"coturn"username for database, ignored if existingSecret is passed in
postgresql.primary.initdb.scriptsConfigMapstring""ConfigMap with scripts to be run at first boot
replicasint1
resourcesobject{}ref: kubernetes.io/docs/concepts/configuration/manage-resources-containers
service.externalTrafficPolicystring"Cluster"determines how external traffic is routed to services. Options: Cluster: mask client source IP Local: preserve client source IP (requires service type of NodePort or LoadBalancer)
service.typestring"ClusterIP"The type of service to deploy for routing Coturn traffic. ClusterIP: Recommended for DaemonSet configurations. This will create a standard Kubernetes service for Coturn within the cluster. No external networking will be configured as the DaemonSet will handle binding to each Node's host networking NodePort: Recommended for Deployment configurations. This will open TURN ports on every node and route traffic on these ports to the Coturn pods. You will need to make sure your cloud provider supports the cluster config setting, apiserver.service-node-port-range, as this range must contain the ports defined above for the service to be created. LoadBalancer: This was what was originally set for this chart in the upstream of this fork, but with no details

Autogenerated from chart metadata using helm-docs v1.11.0