Configuration de la haute disponibilité Keycloak dans Kubernetes
Introduction
Keycloak est un cadre d'authentification qui offre aux utilisateurs d'applications des fonctionnalités de fédération et d'authentification unique (SSO). Dans ce blog, nous discuterons des concepts clés que vous devriez avoir à l'esprit lors du déploiement d'un cluster Keycloak sur Kubernetes.
Configuration du cluster Keycloak
Tout d'abord, nous devons savoir que pour un cluster Keycloak, toutes les instances keycloak doivent utiliser la même base de données. Au total, il existe 3 solutions pour le clustering, et toutes les solutions sont basées sur les protocoles de découverte de JGroups.
1. PING
2. TCPPING
3. JDBC_PING
Keycloak utilise le cache Infinispan et Infinispan utilise JGroups pour découvrir les nœuds. Nous nous concentrerons sur JDBC_PING dans ce blog.
JDBC_PING
JDBC_PING utilise le protocole TCP avec le port 7600 qui est similaire à TCPPING, mais la différence entre eux est que TCPPING vous oblige à configurer l'IP et le port de toutes les instances, mais pour JDBC_PING, il vous suffit de configurer l'adresse IP et le port de l'instance actuelle.
En effet, dans la solution JDBC_PING, chaque instance insère ses propres informations dans la base de données et les instances découvrent les pairs par les données ping lues dans la base de données.
Si vous ne définissez pas l'env JGROUPS_DISCOVERY_EXTERNAL_IP, l'adresse IP du pod sera utilisée, cela signifie que sur Kubernetes, vous pouvez simplement définir JGROUPS_DISCOVERY_PROTOCOL=JDBC_PING, puis votre cluster Keycloak est prêt à être utilisé.
Vous devez ajouter JDBC_PING.cli à / opt/jboss/tools/cli/jgroups/discovery/ répertoire. Vous pouvez le trouver à partir de JDBC_PING.cli
– nom : JGROUPS_DISCOVERY_PROTOCOL
valeur : JDBC_PING
Problèmes possibles
Vous pouvez être confronté à un problème très courant de nœuds de cluster prenant du temps à démarrer ou non étant stable. La table JGROUPSPING est souvent la cause de cela.
L'état du cluster est géré via une table JGROUPSPING. Chaque fois qu'un nœud est créé, il doit connaître sa propre adresse IP afin de pouvoir l'ajouter à cette table et rejoindre le cluster. Dans la base de données, vous trouverez des entrées de nœud JGroup périmées dans la table JGROUPSPING et elles commencent à s'accumuler. Lorsqu'un nouveau nœud démarre, il essaie de contacter les autres adresses de la table et attend leur réponse une par une. Cela entraîne souvent un délai d'attente et empêche le nœud d'être stable.
Resolution
Ajoutez la commande suivante dans JGROUPS_DISCOVERY_PROPERTIES :
remove_old_coords_on_view_change=”true”,remove_all_data_on_on_[1965_change=”9018:JGROUPS_DISCOVERY_PROPERTIES
valeur : 'dns_query=keycloak-app,remove_old_coords_on_view_change=”true”,remove_all_data_on_view_change=”true”'
Cette configuration gère le cas où toutes les adresses IP présentes dans la table JGROU Lorsqu'un nouveau nœud démarre, si le nœud ne peut pas contacter les autres adresses, il nettoie la table tout seul. PARTAGEZ-LE
Source link