Docker Swarm

Installation de l’environnement de Relayws sous Docker Swarm s’effectue à l’aide d’un role Ansible. ll’environnement Relayws se compose de 3 éléments:

  • Nginx: Service permettant la communication avec l’environnement Infra

  • Traefik: Service accueillant les communications venant des ReemoAgent et des utilisateurs

  • ws-relay-server: Micro-service Docker permettant le relaying entre les ReemoAgent et les utilisateurs

Prérequis

Ubuntu/Redhat/RockyLinux

yum install ansible-core
ansible-galaxy collection install community.docker
ansible-galaxy collection install community.crypto

Fichier Inventaire

L’installation se base sur un groupe dans l’inventaire Ansible : relayws_manager à rajouter dans le fichier inventaire

relayws_manager:
    hosts:
        relayws_manager1:
            ansible_host: "10.20.0.1"

Installation Docker

L’installation et l’initialisation de Docker Swarm peuvent être manuelles ou automatisées par le role Ansible reemo-relayws

Manuel

apt install docker.io python3-docker -y

Une documentation sur le site de Docker permet d’avoir l’ensemble des options disponibles: Docker.

Auto

Le role Ansible reemo-relayws embarque la possibilité d’installer et de configurer automatiquement un Docker Swarm, plusieurs options sont disponibles:

Par défaut le role Ansible effectue aucune opération sur l’installation ou l’initialisation de Docker Swarm. Pour l’activer vous pouvez ajouter cette option dans la ligne de commande:

ansible-playbook -i inventory.yml playbooks/reemo-relayws.yml --extra-vars "RELAYWS_INSTALL_DOCKER=true"

Warning

Il faut que les différents noeuds du cluster puissent joindre un repositorie pour installer Docker

Warning

Une fois que Docker Swarm a été initialisé, il ne faut plus modifier les options de sa configuration.

Installation Nginx

Un service Nginx doit être installé dans l’environnement Relayws pour la communication avec l’environment Infra, il doit être installé sur l’ensemble des noeuds

Manuel

apt install nginx

Ajouter l’utilisateur www-data au groupe docker

usermod -aG docker www-data

Auto

Le role Ansible reemo-relayws est capable d’installer et de configurer automatiquement le service Nginx, plusieurs sont disponibles

Par défaut le port d’écoute du service Nginx est le 8443. Pour le modifier vous pouvez utiliser l’option

RELAYWS_NGINX_PORT

Certificats SSL

Nginx

Pour une sécurité renforcée, il est préférable de mettre en place un certificat SSL sur le serveur Nginx. Il doit être issue de la même pki que celui qui sera renseigné dans l’interface Reemo

L’ensemble des micro-services discute entre eux en mTLS imposant une gestion des certificats. Vous avez 3 choix possibles

Dans le role Ansible reemo-relayws est disponible un bi-clé issue de la pki par défaut contenu dans le role Ansible reemo-infra permettant de déployer automatiquement un système prêt à l’emploi, avec des communications chiffrées et authentifiées

Traefik

Toute entrée utilisateur s’effectue par un service Traefik où il est possible de lui spécifier une certificat pour l’accès utilisateur

Par défaut un certificat autosigné est crée automatiquement à la création du conteneur Traefik

Optimisation avec Ansible

Dans le cas d’un cluster relayws avec 3 serveurs minimum il est possible d’optimiser la connexion entre le navigateur de l’utilisateur, le conteneur relayws et le conteneur applicatif pour que l’ensemble se connecte directement sur le même worker et ainsi optimiser le flux de pixels

Il faut au préalable déterminer une url par node relayws ainsi qu’un certificat pour chaque URL ou un certificat Wildcard pour l’ensemble du domaine ou un certificat ayant les alternatives Names suffisant pour répondre à l’ensemble des URL

Dans le fichier inventaire Ansible il faut rajouter à chaque host les variables suivantes:

relayws_manager:
    vars:
        TRAEFIK_SSL_CERTS:
            - cert_file: "/localpath/to/relayws1_cert_domain.tld.crt"
              key_file: "/localpath/to/relayws1_key_domain.tld.key"
            - cert_file: "/localpath/to/relayws2_cert_domain.tld.crt"
              key_file: "/localpath/to/relayws2_key_domain.tld.key"
            - cert_file: "/localpath/to/relayws3_cert_domain.tld.crt"
              key_file: "/localpath/to/relayws3_key_domain.tld.key"
    hosts:
        relayws_manager1:
            ansible_host: "< IP du serveur relayws1 pour la connexion ssh et la configuration ansible >"
            REEMO_SWARM_NODE_HOSTNAME: "< Hostname dans le cluster Swarm >"
            REEMO_RELAYWS_PRIVATE_IP: "< adresse IP que devront contacter les conteneurs pour se connecter sur ce serveur >"
            REEMO_RELAYWS_PUBLIC_URL: "< URL Public >"
        relayws_manager2:
            ansible_host: "< IP du serveur relayws2 pour la connexion ssh et la configuration ansible >"
            REEMO_SWARM_NODE_HOSTNAME: "< Hostname dans le cluster Swarm >"
            REEMO_RELAYWS_PRIVATE_IP: "< adresse IP que devront contacter les conteneurs pour se connecter sur ce serveur >"
            REEMO_RELAYWS_PUBLIC_URL: "< URL Public >"
        relayws_manager3:
            ansible_host: "< IP du serveur relayws3 pour la connexion ssh et la configuration ansible >"
            REEMO_SWARM_NODE_HOSTNAME: "< Hostname dans le cluster Swarm >"
            REEMO_RELAYWS_PRIVATE_IP: "< adresse IP que devront contacter les conteneurs pour se connecter sur ce serveur >"
            REEMO_RELAYWS_PUBLIC_URL: "< URL Public >"