Skip to content

Deploying multiple videobridges in different geographic locations

Deploying multiple Kubernetes clusters each with a separate Sametime deployment allows for the distribution of videobridges to different locations. This type of deployment improves video streaming by reducing latency and improves bandwidth when users are geographically far from a single videobridge. The Octo Protocol is required to route video streams between videobridge servers.

Obtain the geolocation license key from Geolocation DB. The location service determines the region matching and is needed for the primary installation.

This configuration must be done as part of installation.

  1. Run the command to prepare the primary deployment.

    ./prepareDeployment.sh
    

    When prompted, answer Y to the Enable Octo prompt. For more information, refer to t_meetings_configure_deployment.md.

  2. Deploy the helm charts. Save the deployed charts for future reference. For more information, refer to t_installing_deploy_kubernetes.md.

    helm install sametime .
    

    Note:

    • The command assumes you are in the helm directory. The . represents current directory.
    • Instead of sametime, you can choose any descriptive name for the deployment. You can also deploy the application in a namespace through the -n or --namespace option. First create the namespace with kubectl create namespace.
    • Confirm if you have a working single region deployment. For more information, refer to Kubernetes Deployment.
  3. Obtain MeetingLocationSecret, JvbAuthPassword, and JwtSecret from the primary installation. You can find this in <ReleaseName>-global-secrets.

  4. Ensure that the TCP primary prosody is open on port 5222 for the secondary JVB to connect. The prosody host is accessible through the network load balancer if one is available in your deployment. Every deployment has a different FQDN and region. Run the command to obtain the FQDN of the prosody host on the primary deployment.

    kubectl get service jitsi -o yaml | grep -E 'hostname|ip'
    

    If your deployment does not have a load balancer, you can use the nginx ingress controller to forward tcp-services for port 5222. Make sure you configure the nginx-ingress-controller to enable tcp-services. Then in the tcp-services configmap, add an entry. In the following example, the primary Sametime deployment is in the default namespace.

    "5222": default/jitsi:5222
    
  5. Run the command for the second deployment, using the information gathered in step 4.

    ./prepareDeployment.sh 
    
  6. Optional: Repeat step 6 for every deployment if you have more than one primary or secondary installation.

  7. Switch to each remote regional cluster and deploy each deployment using helm. Save the deployed charts.

    Note: Assuming you use a single kubectl client to deploy against the primary and remote clusters, you can run the command to see the possible cluster contexts.

    kubectl config get-contexts
    

    You can use the --kube-context on the helm command and the --context option on the kubectl command to switch the context as you perform tasks against each deployment.

    After enabling multiple video bridges, you end up with a single primary installation and one or more secondary installations. Having multiple primary installations in one or multiple regions is not required.

  8. Open the correct port to establish a UDP connection. Primary JVB talks to secondary JVB and vice versa through JVB_OCTO_BIND_PORT.

    • In a Kubernetes environment, JVB has a separate node group. Port 4096 should be open for UDP in that node group.
    • JVB should be reachable from the other JVB through port 4096. Note: You can obtain the IP address of JVB using ifconfig.me. An alternative method is to set harvestOctoPublic to false in the values.yaml file and then enter the JVB public address in jvbOctoPublicAddress in values.yaml for both primary and secondary installations.
  9. Test the UDP connection to ensure that the users who have joined from separate bridges are able to communicate.