Aller au contenu principal

Module Jitsi GKE — Guide de configuration

Ce guide décrit toutes les variables de configuration disponibles dans le module Jitsi_GKE. Jitsi_GKE est un module wrapper qui combine le module d'infrastructure générique App_GKE avec la configuration d'application partagée Jitsi_Common pour déployer Jitsi Meet — une solution de visioconférence open source basée sur un navigateur, sans compte requis pour participer — sur Google Kubernetes Engine (GKE) Autopilot.

La plupart des options de configuration de Jitsi GKE correspondent directement aux mêmes options de App GKE. Lorsqu'une variable a un comportement identique, ce guide fait référence au guide App GKE plutôt que de répéter la même documentation. Seules les variables et les valeurs par défaut spécifiques à Jitsi sont décrites en détail ici.

Note : Les variables marquées comme gérées par la plateforme sont définies et maintenues par la plateforme. Vous n'avez normalement pas besoin de les modifier.

GKE uniquement : Le pont vidéo de Jitsi transporte tout l'audio et la vidéo sur le port UDP 10000 et doit annoncer une adresse publique fixe aux navigateurs. Cloud Run ne peut pas accepter l'UDP entrant, donc Jitsi n'est proposé que sur GKE.


Référence de configuration standard​

Les zones de configuration suivantes sont fournies par le module sous-jacent App_GKE. Consultez les sections liées du Guide de configuration App_GKE pour une documentation complète.

Zone de configurationSection du guide App_GKENotes spécifiques à Jitsi
Projet et identitéGroupe 1 — Projet et identitéIdentique. region place également l'IP statique du pont vidéo.
Identité de l'applicationGroupe 3 — Identité de l'applicationapplication_version épingle les quatre images ; voir Groupe 3.
Exécution et mise à l'échelleGroupe 4 — Exécution et mise à l'échellecontainer_image_source = "prebuilt", container_port = 80 ; voir Groupe 4.
Variables d'environnement et secretsGroupe 5 — Variables d'environnement et secretsEntrées spécifiques à Jitsi public_url, xmpp_domain, enable_auth, enable_guests, timezone ; voir Groupe 5.
Configuration du backend GKEGroupe 6 — Configuration du backend GKEservice_type = "ClusterIP" ; ajoute jvb_port ; voir Groupe 6.
Services additionnelsGroupe 11 — Automatisation des charges de travailprosody, jicofo et jvb sont fournis par Jitsi Common ; voir Groupe 11.
Stockage — NFSGroupe 13 — Stockage NFSActivé par défaut mais inutilisé par Jitsi ; voir Groupe 13.
Stockage — GCSGroupe 14 — Cloud StorageUn bucket data est créé par défaut mais inutilisé par Jitsi ; voir Groupe 14.
Configuration de la base de donnéesGroupe 16 — Configuration de la base de donnéesPas de base de données — moteur fixé à NONE ; voir Groupe 16.
Planification et rétention des sauvegardesGroupe 17 — Sauvegarde et maintenanceNon applicable (pas de base de données).
Scripts SQL personnalisésGroupe 18 — Scripts SQL personnalisésNon applicable (pas de base de données).
Observabilité et vérifications de santéGroupe 10 — Observabilitéstartup_probe_config / health_check_config sont les sondes web déployées ; voir Groupe 10.
Cloud Armor WAFGroupe 21 — Cloud Armor et CDNProtège le point d'entrée web uniquement — pas l'équilibreur de charge UDP jvb.
Proxy sensible à l'identité (IAP)Groupe 20 — Proxy sensible à l'identitéProtège le point d'entrée web uniquement.
Autorisation binaireGroupe 12 — CI/CDIdentique.
Contrôles de service VPCGroupe 22 — Contrôles de service VPC et journalisation d'auditIdentique.
Pilote CSI du magasin de secretsGroupe 5 — Variables d'environnement et secretsToujours activé — aucune configuration requise.
Trafic et IngressGroupe 19 — Accès et réseauWeb via la passerelle ; média via un équilibreur de charge UDP séparé.
Domaine personnalisé et IP statiqueGroupe 19 — Accès et réseauDéfinir public_url pour correspondre ; voir Groupe 19.
Déclencheurs Cloud BuildGroupe 12 — CI/CDIdentique.
Pipeline Cloud DeployGroupe 12 — CI/CDIdentique.
Mise en miroir des imagesGroupe 4 — Exécution et mise à l'échelleS'applique à l'image web.
Budgets d'interruption de podGroupe 9 — FiabilitéActivé par défaut pour la charge de travail web.
Cache RedisGroupe 15 — Cache RedisNon utilisé par aucun composant Jitsi.

Comment Jitsi GKE est lié à App GKE​

Jitsi GKE transmet ses variables à App GKE et ajoute un sous-module Jitsi Common qui fournit la configuration spécifique à Jitsi. Il crée également une ressource propre. Les principaux effets sont les suivants :

  1. Quatre images, une étiquette. jitsi/web est le conteneur principal ; jitsi/prosody, jitsi/jicofo et jitsi/jvb sont fournis en tant que additional_services. Les quatre utilisent l'étiquette application_version (par défaut stable-11031). Le mélange de versions n'est pas pris en charge — jicofo et jvb utilisent un protocole versionné pour communiquer avec prosody — et aucune des images n'a d'étiquette latest.
  2. Pas de build, pas de base de données. container_image_source = "prebuilt" : les images amont sont entièrement configurées via des variables d'environnement, il n'y a donc pas de Dockerfile. database_type est fixé à NONE par Jitsi Common ; aucune instance Cloud SQL, aucun utilisateur de base de données ni aucun job d'initialisation n'est créé.
  3. Une adresse réservée pour le pont vidéo. Le wrapper crée une adresse google_compute_address externe régionale nommée <service-name>-jvb et la transmet à jvb en tant que JVB_ADVERTISE_IPS (et DOCKER_HOST_ADDRESS). jvb transmet cette adresse aux navigateurs dans les candidats ICE, elle doit donc être connue avant le démarrage de jvb — une IP éphémère d'équilibreur de charge n'est connue qu'après. JVB_DISABLE_STUN = "true" car l'adresse annoncée est déjà publique.
  4. Média sur son propre équilibreur de charge UDP. Le service de jvb est un LoadBalancer sur UDP 10000 épinglé à cette adresse. GCP ne permet pas à un service d'équilibreur de charge de mélanger TCP et UDP, donc jvb ne peut pas partager le service web. Il n'y a pas de repli TCP dans cette build.
  5. Web derrière la passerelle. service_type = "ClusterIP" ; le navigateur atteint jitsi/web sur le port 80 via la passerelle L7, qui termine le TLS. Le conteneur est configuré pour ne pas effectuer le TLS lui-même (ENABLE_LETSENCRYPT = 0, DISABLE_HTTPS = 1).
  6. prosody est trouvé par le nom du service. Le docker-compose amont atteint prosody via un alias réseau. Kubernetes n'en a pas, donc le wrapper calcule le nom du service prosody (<service-name>-prosody) à partir du même module deployment_id que App GKE utilise et le définit comme XMPP_SERVER.
  7. Mots de passe de composants générés. Jitsi Common génère JICOFO_AUTH_PASSWORD et JVB_AUTH_PASSWORD, les stocke dans Secret Manager (réplication régionale, gérée par l'utilisateur), et les trois conteneurs backend les lisent à partir du même secret Kubernetes, de sorte que prosody provisionne les comptes avec exactement les mots de passe utilisés par les composants.
  8. Les sondes atteignent le conteneur déployé. Contrairement à certains wrappers, Jitsi GKE transmet startup_probe_config et health_check_config à Jitsi Common en tant que sondes de démarrage/vivacité startup_probe/liveness_probe du conteneur web, de sorte que les modifier modifie les sondes déployées. Les conteneurs backend n'ont pas de sondes.

Groupe 1 : Projet et identité​

Identique à App_GKE. Voir App_GKE.

VariableValeur par défautDescription
project_id(obligatoire)Projet GCP dans lequel Services_GCP a été déployé.
tenant_id"demo"1 à 7 caractères alphanumériques minuscules ajoutés aux noms de ressources.
region"us-central1"Région de repli lorsque la découverte de sous-réseau VPC ne peut pas en déterminer une. La région découverte (ou de repli) est également l'endroit où l'IP statique jvb et les deux répliques Secret Manager sont créées.

Groupe 2 : Environnement de déploiement​

Identique à App_GKE : support_users ([]) reçoivent les alertes de surveillance ; resource_labels ({}) sont appliqués à chaque ressource.


Groupe 3 : Identité de l'application​

VariableValeur par défaut Jitsi GKEValeur par défaut App GKENotes
application_name"jitsi""gkeapp"Nom de base pour toutes les ressources GCP et Kubernetes. Ne pas modifier après le déploiement.
application_display_name"Jitsi Meet""App GKE Application"Affiché dans l'interface utilisateur de la plateforme. Peut être modifié librement.
application_description"Jitsi Meet — open-source video conferencing: browser-based meetings with no account required."—Étiquette descriptive.
application_version"stable-11031""1.0.0"Étiquette appliquée à toutes les quatre images. Ne la modifiez que pour une autre étiquette stable-NNNN publiée qui existe pour web, prosody, jicofo et jvb.

Groupe 4 : Exécution et mise à l'échelle​

VariableValeur par défaut Jitsi GKENotes
container_image_source"prebuilt"Gardez "prebuilt". Jitsi ne fournit pas de Dockerfile ; "custom" rendrait une étape Cloud Build sans Dockerfile à construire.
container_image"jitsi/web"L'image web ; l'étiquette provient de application_version.
enable_image_mirroringtrueMet en miroir l'image web dans Artifact Registry.
container_port80Fixé par Jitsi Common — jitsi/web sert du HTTP simple sur le port 80.
container_resources{ cpu_limit = "1000m", memory_limit = "2Gi" }S'applique uniquement au conteneur web, et seules les limites sont transmises. Les conteneurs backend ont des limites fixes : prosody 1000m/1Gi, jicofo 1000m/2Gi, jvb 1000m/2Gi.
min_instance_count1Répliques web minimales.
max_instance_count3Répliques web maximales. prosody, jicofo et jvb sont fixés à une réplique chacun et ne sont pas mis à l'échelle par ces variables.
enable_cloudsql_volumefalsePas de base de données. Le définir true est rejeté au moment de la planification tant que database_type = "NONE".

Les variables d'exécution restantes (deploy_application, container_build_config, cloudsql_volume_mount_path, service_annotations, service_labels) se comportent comme décrit dans App_GKE.


Groupe 5 : Variables d'environnement et secrets​

Ces variables spécifiques à Jitsi sont transmises à Jitsi Common :

VariableValeur par défautDescription
public_url""URL publique utilisée par les navigateurs, par exemple "https://meet.example.com". Définie comme PUBLIC_URL sur le web et prosody et écrite dans la configuration que l'application web sert — une mauvaise valeur donne une page qui se charge mais ne peut pas se connecter. Non dérivée automatiquement.
xmpp_domain"meet.jitsi"Racine de la famille de domaines XMPP interne. Les sous-domaines auth., guest., muc., internal-muc. et recorder. en sont dérivés. Ce sont les hôtes virtuels de prosody, jamais résolus dans le DNS public. Les quatre conteneurs doivent être d'accord — laissez la valeur par défaut à moins que vous ne sachiez pourquoi vous la modifiez.
enable_authfalseENABLE_AUTH : exige une authentification pour créer une salle.
enable_gueststrueENABLE_GUESTS : permet aux participants non authentifiés de rejoindre les salles créées par un utilisateur authentifié.
timezone"UTC"TZ sur chaque conteneur.

Variables d'environnement que le module définit sur jitsi/web :

VariableValeur
PUBLIC_URLvar.public_url
XMPP_DOMAIN, XMPP_AUTH_DOMAIN, XMPP_GUEST_DOMAIN, XMPP_MUC_DOMAIN, XMPP_INTERNAL_MUC_DOMAIN, XMPP_RECORDER_DOMAINDérivé de xmpp_domain
XMPP_SERVER<service-name>-prosody
XMPP_BOSH_URL_BASEhttp://<service-name>-prosody:5280
XMPP_WEBSOCKET/xmpp-websocket (un chemin sur l'origine publique, proxifié par le web)
ENABLE_AUTH, ENABLE_GUESTS"1"/"0" des variables ci-dessus
ENABLE_LETSENCRYPT"0"
DISABLE_HTTPS"1"

Les entrées environment_variables sont fusionnées sur celles-ci sur le conteneur web (elles n'atteignent pas prosody, jicofo ou jvb). secret_environment_variables s'ajoute aux deux mots de passe de composants générés.

Secrets créés par Jitsi Common :

SecretVariable d'environnementLu par
secret-<prefix>-jitsi-jicofo-authJICOFO_AUTH_PASSWORDprosody, jicofo
secret-<prefix>-jitsi-jvb-authJVB_AUTH_PASSWORDprosody, jvb

Les deux sont des valeurs aléatoires de 32 caractères sans caractères spéciaux, répliquées uniquement dans la région de déploiement (user_managed), car la politique d'emplacement de dossier sur les projets gérés par RAD refuse les secrets global.

Les variables restantes (protect_sensitive_environment_variables, secret_propagation_delay, secret_rotation_period) se comportent comme décrit dans App_GKE.


Groupe 6 : Configuration du backend GKE​

VariableValeur par défaut Jitsi GKENotes
service_type"ClusterIP"Le service web. La passerelle a déjà une adresse externe ; un LoadBalancer ici alloue une deuxième IP externe pour la même surface HTTP, ce qui, sur un projet soumis à un quota, peut laisser les équilibreurs de charge web et jvb bloqués en <pending>.
service_port80Port sur le service web.
jvb_port10000Port UDP du service videobridge et JVB_PORT. Le service jvb est toujours LoadBalancer et toujours UDP.
session_affinity"ClientIP"Affinité du service web.
workload_type"Deployment"La charge de travail web.
termination_grace_period_seconds30—
deployment_strategynullDéclaré mais non référencé — sans effet.

namespace_name et enable_network_segmentation se comportent comme décrit dans App_GKE.


Groupe 7 : Charges de travail avec état​

Identique à App_GKE. Jitsi ne stocke rien sur disque, donc stateful_pvc_enabled (par défaut false) devrait rester désactivé.


Groupe 9 : Politiques de fiabilité​

VariableValeur par défautNotes
enable_pod_disruption_budgettrueCrée un PodDisruptionBudget pour la charge de travail web.
pdb_min_available"1"Avec une seule réplique web, cela signifie que les évictions volontaires (mises à niveau de nœuds) attendent un remplacement.

Groupe 10 : Observabilité et santé​

startup_probe_config et health_check_config sont transmis à Jitsi Common en tant que sondes de démarrage et de vivacité du conteneur web, ce sont donc les sondes qui s'exécutent réellement.

SondeCheminDélai initialDélai d'expirationPériodeSeuil d'échec
Démarrage (startup_probe_config)/ (HTTP)60s5s10s3
Vivacité (health_check_config)/ (HTTP)60s5s30s3

prosody, jicofo et jvb n'ont pas de sondes, donc un conteneur backend qui est en cours d'exécution mais non connecté (par exemple jvb refusé par prosody) n'est pas redémarré automatiquement — vérifiez leurs logs.

uptime_check_config est par défaut { enabled = false, path = "/" }. alert_policies se comporte comme décrit dans App_GKE.


Groupe 11 : Automatisation des charges de travail​

Jitsi Common fournit toujours trois additional_services ; vos propres entrées additional_services leur sont ajoutées.

ServiceImageType de servicePortsLimites
prosodyjitsi/prosody:<version>ClusterIPTCP 5222, 5280 (bosh), 5347 (xmpp-component)1000m / 1Gi
jicofojitsi/jicofo:<version>ClusterIPTCP 8888 (requis pour construire un service ; rien ne s'y connecte)1000m / 2Gi
jvbjitsi/jvb:<version>LoadBalancer sur l'IP réservéeUDP jvb_port (10000)1000m / 2Gi

Chacun exécute une réplique. jicofo rejoint le MUC jvbbrewery sur le domaine MUC interne pour découvrir le pont ; prosody provisionne les comptes focus (jicofo) et jvb.

initialization_jobs est vide (Jitsi n'en a pas besoin) et cron_jobs se comporte comme décrit dans App_GKE.


Groupe 12 : CI/CD et intégration GitHub​

Identique à App_GKE. Voir App_GKE. Variables : enable_cicd_trigger, github_repository_url, github_token, github_app_installation_id, cicd_trigger_config, enable_cloud_deploy, cloud_deploy_stages, enable_binary_authorization.


Groupe 13 : NFS​

VariableValeur par défautNotes
enable_nfstrueMonte le partage NFS Services_GCP dans le pod web. Aucun composant Jitsi ne le lit ou ne l'écrit.
nfs_mount_path"/mnt/nfs"—

nfs_volume_name, nfs_instance_name et nfs_instance_base_name se comportent comme décrit dans App_GKE.


Groupe 14 : Cloud Storage​

create_cloud_storage = true avec la valeur par défaut storage_buckets = [{ name_suffix = "data" }] crée un bucket. Jitsi ne l'utilise pas, et Jitsi Common ne déclare aucun bucket propre. Les variables restantes de stockage et de rétention d'images se comportent comme décrit dans App_GKE.


Groupe 15 : Redis​

enable_redis (par défaut false), redis_host, redis_port, redis_auth se comportent comme dans App_GKE. Aucun composant Jitsi n'utilise Redis.


Groupe 16 : Base de données​

Jitsi n'a pas de base de données. Jitsi Common définit database_type = "NONE" dans la configuration de l'application, et c'est ce que App GKE provisionne indépendamment du propre database_type du wrapper (par défaut "NONE"), qui ne fait qu'alimenter les gardes de validation au moment de la planification. application_database_name/application_database_user ("jitsi"), database_password_length, les variables d'extension PostgreSQL/MySQL, enable_auto_password_rotation et les alias db_*_env_var_name n'ont aucun effet.


Groupes 17-18 : Sauvegarde et maintenance, SQL personnalisé​

Non applicable. enable_backup_import et enable_custom_sql_scripts sont rejetés au moment de la planification tant que database_type = "NONE".


Groupe 19 : Domaine personnalisé et réseau​

Identique à App_GKE. Voir App_GKE.

VariableValeur par défautNotes
enable_custom_domaintrueProvisionne la passerelle pour le service web.
application_domains[]Vide utilise un nom d'hôte nip.io gratuit dérivé de l'IP réservée de la passerelle, avec un certificat géré par Google.
reserve_static_iptrueIP statique globale pour la passerelle (séparée de l'IP régionale jvb).

Définissez public_url pour qu'il corresponde. Lorsque vous servez sur un domaine personnalisé, définissez public_url = "https://<your-domain>". Les navigateurs n'accordent l'accès à la caméra et au microphone que sur des origines sécurisées (HTTPS), alors testez les appels via l'URL HTTPS.


Groupes 20-22 : IAP, Cloud Armor, contrôles de service VPC​

Identique à App_GKE — voir App_GKE. IAP et Cloud Armor s'appliquent à la passerelle (le point d'entrée web). Ils ne se trouvent pas devant l'équilibreur de charge UDP jvb, qui doit accepter les médias du réseau de chaque participant.


Exploration du déploiement​

Console Google Cloud​

Charges de travail : Kubernetes Engine → Charges de travail, filtré sur l'espace de noms du déploiement, affiche quatre déploiements — la charge de travail web plus <service-name>-prosody, <service-name>-jicofo et <service-name>-jvb.

Services : Kubernetes Engine → Passerelles, services et Ingress affiche le service web (ClusterIP), les services prosody et jicofo (ClusterIP) et le service jvb (LoadBalancer, UDP).

Adresses IP : Réseau VPC → Adresses IP liste l'adresse régionale *-jvb et l'adresse globale de la passerelle.

Secrets : Sécurité → Secret Manager liste les secrets *-jicofo-auth et *-jvb-auth.

gcloud CLI et kubectl​

# Cluster credentials
gcloud container clusters get-credentials CLUSTER_NAME --region=REGION --project=PROJECT_ID

# All four workloads and their Services
kubectl get deploy,pods,svc -n NAMESPACE

# The videobridge's reserved address and its UDP forwarding rule
gcloud compute addresses list --project=PROJECT_ID --filter="name~jvb"
gcloud compute forwarding-rules list --project=PROJECT_ID --filter="IPProtocol=UDP"

# jicofo has authenticated to prosody and found the bridge
kubectl logs -n NAMESPACE deploy/SERVICE_NAME-jicofo | grep -E "authenticated|addJvbAddress"

# jvb advertises the public address (StaticMappingCandidateHarvester ... mask=<public-ip>)
kubectl logs -n NAMESPACE deploy/SERVICE_NAME-jvb | grep StaticMapping

# The web front end
curl -s -o /dev/null -w "%{http_code}\n" SERVICE_URL/

Sorties du module​

Jitsi GKE expose les sorties standard App_GKE. Celles qui sont pertinentes pour Jitsi :

SortieDescription
service_nameNom du service Kubernetes web (également le préfixe des services prosody/jicofo/jvb)
service_urlURL du point d'entrée web (l'URL nip.io de la passerelle si aucun domaine personnalisé n'est défini)
service_external_ipIP de l'équilibreur de charge externe (si l'IP statique est réservée)
namespaceEspace de noms Kubernetes
deployment_id / resource_prefixIdentifiants de nommage
storage_bucketsBuckets GCS créés
container_imageImage du conteneur web
kubernetes_readytrue lorsque le point de terminaison du cluster était accessible et que les ressources Kubernetes étaient déployées

Les sorties de la base de données sont vides. Il n'y a pas de sortie pour l'adresse jvb — lisez-la à partir du service jvb ou de l'adresse de calcul *-jvb.


Pièges de configuration et valeurs par défaut judicieuses​

Niveaux de risque : Critique (perte de données, panne complète, faille de sécurité) — Élevé (service indisponible ou dégradation significative) — Moyen (fonction dégradée ou coût accru) — Faible (impact mineur).

Variable / conditionValeur par défaut judicieuseRisqueConséquence d'une valeur incorrecte
project_id(obligatoire)CritiquePas de valeur par défaut — le déploiement échoue immédiatement.
UDP 10000 vers l'IP jvb bloqué—CritiqueLes appels rejoignent et listent les participants mais ne transmettent ni audio ni vidéo. Il n'y a pas de repli TCP. Vérifiez les réseaux clients et tout pare-feu devant eux.
application_version"stable-11031"ÉlevéLes quatre images prennent cette étiquette. Une étiquette manquante sur une image entraîne l'échec du pull de ce pod ; les versions incompatibles entre les composants ne sont pas prises en charge.
public_url""ÉlevéÉcrit dans la configuration servie. Une valeur qui ne correspond pas à l'URL que les utilisateurs naviguent donne une page qui se charge mais ne peut pas se connecter.
xmpp_domain"meet.jitsi"ÉlevéChaque conteneur dérive ses hôtes virtuels XMPP de celui-ci ; le modifier est rarement nécessaire et une incompatibilité empêche les composants de se lier.
service_type"ClusterIP"Moyen"LoadBalancer" ajoute une deuxième IP externe pour la surface web et peut épuiser le quota d'adresses externes du projet, laissant l'équilibreur de charge jvb <pending>.
jvb_port10000ÉlevéLe modifier modifie le service et JVB_PORT ensemble ; toute liste blanche côté client doit également changer.
container_image_source"prebuilt"Élevé"custom" n'a pas de Dockerfile à construire ; la construction échoue.
enable_authfalseMoyenSi l'authentification est désactivée, toute personne pouvant atteindre l'URL peut créer des salles.
enable_cloudsql_volumefalseFaibletrue est rejeté au moment de la planification (pas de base de données).
enable_nfs / create_cloud_storagetrue / trueFaibleProvisionné mais inutilisé par Jitsi — un petit coût évitable.
max_instance_count3FaibleNe met à l'échelle que le niveau web ; il n'ajoute pas de capacité de pont vidéo.
enable_pod_disruption_budgettrueFaibleAvec une seule réplique web, les vidanges de nœuds attendent un pod de remplacement.
Premier apply d'un nouveau déploiement (OpenTofu exécuté directement)—MoyenLe README Jitsi_Common enregistre un échec de planification (local.additional_services will be known only after apply) tant que l'adresse jvb n'est pas encore dans l'état ; il a été résolu par tofu apply -target=google_compute_address.jvb, puis tofu apply.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.