Fermer

février 1, 2024

Libérer le potentiel de Keycloak : créer une haute disponibilité et une évolutivité avec le cache distribué sur TCP

Libérer le potentiel de Keycloak : créer une haute disponibilité et une évolutivité avec le cache distribué sur TCP


Introduction

Keycloak est une puissante solution open source de gestion des identités et des accès qui offre un large éventail de fonctionnalités d’authentification et d’autorisation. Dans les applications Web modernes, la haute disponibilité et l’évolutivité sont cruciales pour un service ininterrompu. Pour y parvenir, la mise en place d’un cluster Keycloak est indispensable.

Objectif

Dans ce guide complet, nous explorerons le rôle d’Infinispan et de JGroups pour permettre une configuration et une communication fluides pour le cluster Keycloak.

Qu’est-ce que Keycloak

Keycloak est un système d’identité et de gestion open source qui offre de solides capacités d’authentification et d’autorisation. Il permet aux développeurs de sécuriser leurs applications en gérant les identités des utilisateurs, en protégeant les API et en activant l’authentification unique. Keycloak offre des fonctionnalités telles que l’enregistrement des utilisateurs, le contrôle d’accès basé sur les rôles, l’intégration de la connexion sociale, etc. En utilisant Keycloak, les développeurs peuvent rationaliser le processus d’authentification et se concentrer sur la création des fonctionnalités de base de l’application.

Qu’est-ce qu’Infinispan

Infinispan est une grille de données en mémoire open source qui offre des options de déploiement flexibles et des capacités robustes pour le stockage, la gestion et le traitement des données. Infinispan fournit un magasin de données clé/valeur pouvant contenir tous les types de données, des objets Java au texte brut. Infinispan distribue vos données sur des clusters évolutifs de manière élastique pour garantir une haute disponibilité et une tolérance aux pannes, que vous utilisiez Infinispan comme cache volatile ou comme magasin de données persistant.

Les cas d’utilisation typiques d’Infinispan incluent :

  • Cache distribué, souvent devant une base de données
  • Stockage des données temporelles, comme les sessions Web
  • Traitement et analyse des données en mémoire
  • Communication cross-JVM et stockage partagé
  • Implémentation de MapReduce dans la grille de données en mémoire.

Qu’est-ce que JGroups

JGroups est un framework utilisé pour une communication de groupe fiable dans le clustering Keycloak. Il permet aux instances Keycloak de communiquer et de se coordonner entre elles dans un cluster. JGroups utilise divers protocoles de communication, notamment TCP, UDP et multicast, permettant aux développeurs de choisir l’option la plus appropriée en fonction de leur environnement réseau. JGroups permet également la formation de groupes dynamiques, ce qui permet aux clusters Keycloak de s’adapter dynamiquement aux changements d’appartenance au cluster. Avec JGroups, les développeurs peuvent créer des configurations de cluster évolutives et résilientes pour Keycloak.

Guide étape par étape pour configurer un cluster Keycloak

Passons maintenant à l’aspect pratique de la mise en place d’un cluster Keycloak. Nous le décomposerons en plusieurs étapes pour garantir une compréhension globale du processus.

Préparer l’environnement

Avant de mettre en place un cluster Keycloak, il est crucial de répondre à certaines exigences. Cela inclut la présence de plusieurs serveurs pour les instances Keycloak, la garantie d’une connectivité réseau appropriée entre les serveurs et l’allocation de ressources suffisantes pour des performances de cluster optimales. L’installation et la configuration des instances Keycloak constituent l’étape suivante, qui implique le téléchargement de la distribution Keycloak, la création d’un domaine et la configuration des instances pour le clustering.

Configuration de Keycloak pour le mode production

Pour activer Keycloak en mode Production, nous devons définir quelques configurations supplémentaires comme

  1. TLS{Auto-signé dans notre cas}
  2. Type de cache{ispn}
  3. Type de proxy{ bord}
  4. Configuration du nom d’hôte {IP de l’équilibreur de charge dans notre cas}

Ajoutez la configuration suivante dans le chemin du fichier : /opt/keycloak/conf/keycloak.conf

#CACHE & Proxy
cache=ispn
proxy=edge

HTTPS or TLS configuration
# The file path to a server certificate or certificate chain in PEM format.
https-certificate-file=<path for PEM file>
# The file path to a private key in PEM format.
https-certificate-key-file=<path for Key file>

# Hostname for the Keycloak server.
hostname-admin=<Load Balancer’s IP>
hostname-strict-backchannel=true
hostname-strict=false
hostname-url=http://<Load Balancer’s IP>

Configuration d’Infinispan pour la mise en cache en cluster

Pour activer la mise en cache clusterisée dans Keycloak, nous devons configurer infinispan. Dans cette étape, nous explorerons diverses configurations infinispan, notamment les modes de cache, les politiques d’expulsion, les modes de cohérence et les options de persistance des données. Ces configurations jouent un rôle crucial dans la détermination du comportement du cache distribué dans un cluster Keycloak.

Ajouter le chemin du fichier du bloc suivant /conf/ispan.xml

<infinispan>
<jgroups>
<stack-file name="<stack-name>" path="<Keycloak-Path>/conf/jgroups-tcp.xml" />
</jgroups>
<cache-container name=keycloak>
<transport lock-timeout="60000" initial-cluster-size="1" cluster="infinispan-cluster" stack="<stack-name>" node-name="keycloak1" machine="<machine-id>" />
</cache-container>
</infinispan>

Remarque : Pour la configuration du cache, nous conservons la configuration par défaut.

Établir la communication avec JGroups

JGroups est responsable de la communication inter-cluster dans Keycloak. Dans cette étape, nous définirons les configurations de la pile JGroups, qui spécifient comment les instances Keycloak communiquent entre elles dans un cluster. Nous couvrirons les bases de JChannel, les protocoles et les stratégies de décision dans JGroups. Les modifications de configuration requises dans Keycloak pour activer les JGroups pour la communication inter-cluster seront également discutées en détail.

Créer un nouveau fichier /opt/keycloak/conf/jgroups-tcp.xml

<!--
TCP based stack, with flow control and message bundling. This is usually used when IP
multicasting cannot be used in a network, e.g. because it is disabled (routers discard multicast).
Note that TCP.bind_addr and TCPPING.initial_hosts should be set, possibly via system properties, e.g.
-Djgroups.bind_addr=192.168.5.2 and -Djgroups.tcpping.initial_hosts=192.168.5.2[7800]
author: Bela Ban
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:org:jgroups"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd"
>
<TCP bind_addr="<Instance-IP>"
port_range="100"
bind_port="${jgroups.bind_port:7800}"/>
<RED/>
<TCPPING async_discovery="true"
initial_hosts="${jgroups.tcpping.initial_hosts:<instance1-ip>[7800],<instance2-ip>[7800]}"
send_cache_on_join="true"
return_entire_cache="${jgroups.tcpping.return_entire_cache:true}"
num_discovery_runs="5"
port_range="0"
ergonomics="true"/>
<MERGE3 min_interval="10000"
max_interval="30000"/>
<FD_SOCK2/>
<FD_ALL3 timeout="40000" interval="5000" />
<VERIFY_SUSPECT2 timeout="1500" />
<BARRIER />
<pbcast.NAKACK2 use_mcast_xmit="false" />
<UNICAST3 />
<pbcast.STABLE desired_avg_gossip="50000"
max_bytes="4M"/>
<pbcast.GMS ergonomics="true" print_local_addr="true" join_timeout="2000"/>
<UFC max_credits="2M"
min_threshold="0.4"/>
<MFC max_credits="2M"
min_threshold="0.4"/>
<FRAG2 frag_size="60K" />
<!--RSVP resend_interval="2000" timeout="10000"/-->
<pbcast.STATE_TRANSFER/>
</config>

Apporter des modifications au fichier journaux et à la surveillance

# changes in /opt/keycloak/conf/keycloak.conf
# If the server should expose healthcheck endpoints.
health-enabled=true
# If the server should expose metrics endpoints.
metrics-enabled=true

While starting keycloak:
/opt/keycloak/bin/kc.sh start --log="console,file" --log-file="<logs-file-path>"

REMARQUE : créez d’abord un fichier vide sur le chemin

Appliquer la configuration

Pour appliquer la configuration, nous devons d’abord créer keycloak, puis démarrer keycloak en mode production avec les commandes suivantes :

/opt/keycloak/bin/kc.sh build
/opt/keycloak/bin/kc.sh start --log="console,file" --log-file="<logs-file-path>"

Test et vérification de la configuration du cluster

Après avoir démarré toutes les instances du cluster, vérifiez et exécutez la commande suivante

cat <keycloak-logs-file> | grep ‘topology id’

REMARQUE : par défaut, keycloak ne crée aucun fichier journal.

Résumé

La configuration d’un cluster Keycloak est cruciale pour atteindre l’évolutivité et la haute disponibilité des applications Web modernes. Dans cet article de blog, nous avons exploré l’importance du clustering Keycloak et ses avantages dans la gestion de l’augmentation du trafic. Nous avons discuté d’infinispan en tant que cache distribué sous-jacent pour Keycloak, en soulignant ses avantages en termes de performances et de cohérence des données. JGroups a été introduit comme cadre pour une communication de groupe fiable dans le clustering Keycloak, soulignant son rôle dans la messagerie évolutive et la formation de groupes dynamiques. En suivant le guide étape par étape, les développeurs peuvent configurer un cluster Keycloak robuste et garantir une expérience d’authentification utilisateur transparente.

Si vous avez encore des questions, commentez et rejoignez la discussion.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link