Déploiement bi-site avec authentification SAML

Le déploiement bi-site actif/actif permet de répartir la charge des utilisateurs entre deux sites indépendants, hébergeant chacun une instance complète de la plateforme (portail, API, base de données).

Chaque site fonctionne de manière autonome : il n’y a pas de réplication de base de données ni de sessions entre les sites. La cohérence des accès et des droits utilisateurs est assurée par un fournisseur d’identité SAML unique, partagé entre les deux sites.

Bénéfices clés

  • Haute disponibilité & Maintenance : Bascule automatique des utilisateurs en cas de panne ou de maintenance planifiée d’un site.

  • Performance : Répartition équitable de la charge (sessions, API et bases de données locales) entre les deux infrastructures.

  • Continuité de l’expérience : Authentification transparente via SAML (les utilisateurs conservent les mêmes profils et droits d’un site à l’autre).

Principe de fonctionnement

  1. L’utilisateur accède à l’URL publique partagée (PORTAL_URL).

  2. Le DNS le dirige vers l’un des deux sites (mécanisme de répartition externe : round-robin, GSLB, géolocalisation).

  3. Le site cible le redirige vers son URL propre (PORTAL_URL_REDIRECT).

  4. L’utilisateur reste sur ce site pour toute la durée de sa session (affinité de session via cookie de domaine).

  5. L’authentification est gérée par le fournisseur SAML, qui restitue les mêmes droits sur l’un ou l’autre site.

../../_static/images/infra/advanced_architecture_bi-site.png

Déploiement bi-site avec architecture SAML

Note

L’utilisateur retrouve les mêmes ressources et les mêmes droits quel que soit le site sur lequel il est routé, grâce à l’authentification SAML partagée. Seule sa session technique (cookie) est attachée au site sur lequel il a atterri.

Pré-requis

Avant de modifier vos inventaires, assurez-vous de disposer de :

  • Certificat TLS : Un certificat SAN (multi-domaines) ou Wildcard couvrant PORTAL_URL et les deux domaines PORTAL_URL_REDIRECT.

  • Routage DNS :

    • PORTAL_URL doit pointer vers les deux sites (via GSLB ou Round-Robin).

    • Chaque PORTAL_URL_REDIRECT doit pointer exclusivement vers son site respectif (A ou B).

  • Configuration SAML : Les deux URL de redirection (Site A et B) doivent être déclarées comme points de terminaison ACS (Assertion Consumer Service) valides chez votre fournisseur d’identité.

Options à configurer

Deux variables activent le mode bi-site dans vos inventaires :

PORTAL_URL

Obligatoirement identique sur les deux sites. C’est l’URL publique globale saisie par les utilisateurs (ex: portal.example.com).

PORTAL_URL_REDIRECT

Strictement unique par site. C’est l’URL locale propre à chaque infrastructure (ex: site-a.example.com) permettant de verrouiller la session technique.

Exemples d’inventaire Ansible

Inventaire du Site A

Fichier inventory-site-a.yml :

all:
  vars:
    API_LICENSE: "{{ LICENSING_KEY }}"
    REGISTRY_URL: "registry.reemo.io"
    REGISTRY_ENV: "reemoinfra"
    REGISTRY_USERNAME: "< username >"
    REGISTRY_PASSWORD: "< password >"
  children:
    infra_manager:
      vars:
        PORTAL_URL: "portal.example.com"
        PORTAL_URL_REDIRECT: "site-a.example.com"
        PROVISION_SIGNAL_IP:
          - ip: "192.168.10.66"
        INIT_PROVISION:
          provision1:
            type: "SWARM"
            ip:
              - "192.168.10.100"
      hosts:
        infra_manager1:
          ansible_host: "192.168.10.66"
    provision1:
      children:
        provision1_manager:
          hosts:
            provision1_manager1:
              ansible_host: "192.168.10.100"

Inventaire du Site B

Fichier inventory-site-b.yml :

all:
  vars:
    API_LICENSE: "{{ LICENSING_KEY }}"
    REGISTRY_URL: "registry.reemo.io"
    REGISTRY_ENV: "reemoinfra"
    REGISTRY_USERNAME: "< username >"
    REGISTRY_PASSWORD: "< password >"
  children:
    infra_manager:
      vars:
        PORTAL_URL: "portal.example.com"
        PORTAL_URL_REDIRECT: "site-b.example.com"
        PROVISION_SIGNAL_IP:
          - ip: "192.168.20.66"
        INIT_PROVISION:
          provision1:
            type: "SWARM"
            ip:
              - "192.168.20.100"
      hosts:
        infra_manager1:
          ansible_host: "192.168.20.66"
    provision1:
      children:
        provision1_manager:
          hosts:
            provision1_manager1:
              ansible_host: "192.168.20.100"

Désactiver le mode bi-site

Pour un déploiement mono-site standard, laisser PORTAL_URL_REDIRECT vide ou ne pas la définir :

all:
  children:
    infra_manager:
      vars:
        PORTAL_URL: "portal.example.com"
        PORTAL_URL_REDIRECT: ""

Aucune redirection n’est alors mise en place.