Kubernetes මත HA මාදිලියේ Keycloak ධාවනය කිරීම

Kubernetes මත HA මාදිලියේ Keycloak ධාවනය කිරීම

TL; ඩී: Keycloak පිළිබඳ විස්තරයක්, විවෘත මූලාශ්‍ර ප්‍රවේශ පාලන පද්ධතියක්, අභ්‍යන්තර ව්‍යුහය විශ්ලේෂණය, වින්‍යාස විස්තර ඇත.

හැඳින්වීම සහ ප්රධාන අදහස්

මෙම ලිපියෙන්, අපි Kubernetes මුදුනේ Keycloak පොකුරක් යෙදවීමේදී මතක තබා ගත යුතු මූලික අදහස් දකිමු.

ඔබට Keycloak ගැන වැඩි විස්තර දැන ගැනීමට අවශ්‍ය නම්, ලිපියේ අවසානයේ ඇති සබැඳි බලන්න. ප්රායෝගිකව වඩාත් ගිලී යාම සඳහා, ඔබට අධ්යයනය කළ හැකිය අපගේ ගබඩාව මෙම ලිපියේ ප්‍රධාන අදහස් ක්‍රියාත්මක කරන මොඩියුලයක් සමඟ (දියත් කිරීමේ මාර්ගෝපදේශය ඇත, මෙම ලිපිය උපාංගය සහ සැකසුම් පිළිබඳ දළ විශ්ලේෂණයක් ලබා දෙනු ඇත, ආසන්න වශයෙන් පරිවර්තකයා).

Keycloak යනු ජාවා භාෂාවෙන් ලියා ඇති සහ යෙදුම් සේවාදායකයක් මත ගොඩනගා ඇති පුළුල් පද්ධතියකි වල් මැස්සා. කෙටියෙන් කිවහොත්, එය යෙදුම් පරිශීලකයින්ට ෆෙඩරේෂන් සහ SSO (තනි පුරනය වීමේ) හැකියාවන් ලබා දෙන අවසරය සඳහා රාමුවකි.

නිලය කියවීමට අපි ඔබට ආරාධනා කරමු වෙබ් අඩවිය හෝ විකිපීඩියා සවිස්තරාත්මක අවබෝධය සඳහා.

Keycloak දියත් කිරීම

Keycloak ධාවනය කිරීමට ස්ථීර දත්ත මූලාශ්‍ර දෙකක් අවශ්‍ය වේ:

  • පරිශීලක තොරතුරු වැනි ස්ථාපිත දත්ත ගබඩා කිරීමට භාවිතා කරන දත්ත සමුදායක්
  • Datagrid හැඹිලිය, දත්ත සමුදායෙන් දත්ත හැඹිලි කිරීමට මෙන්ම පරිශීලක සැසි වැනි කෙටි කාලීන සහ නිතර වෙනස් වන පාර-දත්ත ගබඩා කිරීමට භාවිතා කරයි. ක්‍රියාත්මක කළා ඉන්ෆිනිස්පන්, එය සාමාන්‍යයෙන් දත්ත සමුදායට වඩා සැලකිය යුතු තරම් වේගවත් වේ. නමුත් ඕනෑම අවස්ථාවක, Infinispan හි සුරකින ලද දත්ත තාවකාලිකයි - සහ පොකුර නැවත ආරම්භ කරන විට එය ඕනෑම තැනක සුරැකීමට අවශ්ය නොවේ.

Keycloak විවිධ ආකාර හතරකින් ක්‍රියා කරයි:

  • සාමාන්ය - ගොනුවක් හරහා වින්‍යාස කර ඇති එකම ක්‍රියාවලියකි ස්වාධීන.xml
  • නිතිපතා පොකුර (ඉහළ පවතින විකල්පය) - සියලුම ක්‍රියාවලීන් එකම වින්‍යාසය භාවිතා කළ යුතුය, එය අතින් සමමුහුර්ත කළ යුතුය. සැකසුම් ගොනුවක ගබඩා කර ඇත ස්වාධීන-ha.xml, ඊට අමතරව ඔබ දත්ත සමුදායට හවුල් ප්‍රවේශයක් සහ පැටවුම් සමතුලිතතාවයක් ඇති කළ යුතුය.
  • වසම් පොකුර - සාමාන්‍ය ප්‍රකාරයේදී පොකුරක් ආරම්භ කිරීම ඉක්මනින් සාමාන්‍ය සහ නීරස කාර්යයක් බවට පත් වේ, පොකුරු වර්ධනය වන විට, වින්‍යාසය වෙනස් වන සෑම අවස්ථාවකම, සෑම පොකුරු නෝඩයකම සියලු වෙනස්කම් සිදු කළ යුතුය. වසම් මෙහෙයුම් ආකාරය යම් හවුල් ගබඩා ස්ථානයක් පිහිටුවීමෙන් සහ වින්‍යාසය ප්‍රකාශ කිරීමෙන් මෙම ගැටළුව විසඳයි. මෙම සැකසුම් ගොනුවේ ගබඩා කර ඇත domain.xml
  • දත්ත මධ්‍යස්ථාන අතර අනුකරණය — ඔබට Keycloak ධාවනය කිරීමට අවශ්‍ය නම් දත්ත මධ්‍යස්ථාන කිහිපයක පොකුරක් තුළ, බොහෝ විට විවිධ භූගෝලීය ස්ථානවල. මෙම විකල්පය තුළ, සෑම දත්ත මධ්‍යස්ථානයකටම තමන්ගේම Keycloak සේවාදායක පොකුරක් ඇත.

මෙම ලිපියෙන් අපි දෙවන විකල්පය විස්තරාත්මකව සලකා බලමු, එනම් නිත්ය පොකුරක්, සහ Kubernetes හි මෙම විකල්ප දෙක ක්‍රියාත්මක කිරීම අර්ථවත් වන බැවින්, අපි දත්ත මධ්‍යස්ථාන අතර ප්‍රතිනිර්මාණය යන මාතෘකාව පිළිබඳව ද ටිකක් ස්පර්ශ කරන්නෙමු. වාසනාවකට මෙන්, Kubernetes හි කරල් කිහිපයක (Keycloak nodes) සැකසුම් සමමුහුර්ත කිරීමේ ගැටලුවක් නොමැත. වසම් පොකුර එය කිරීමට ඉතා අපහසු නොවනු ඇත.

යන වචනය බව ද කරුණාවෙන් සලකන්න පොකුරු මක්නිසාද යත් ලිපියේ ඉතිරි කොටස එකට ක්‍රියා කරන Keycloak නෝඩ් සමූහයකට පමණක් අදාළ වනු ඇත, Kubernetes පොකුරක් වෙත යොමු වීමට අවශ්‍ය නොවේ.

නිතිපතා Keycloak පොකුර

මෙම ප්‍රකාරයේදී Keycloak ධාවනය කිරීමට ඔබට අවශ්‍ය වන්නේ:

  • බාහිර හවුල් දත්ත සමුදාය වින්‍යාස කරන්න
  • load balancer ස්ථාපනය කරන්න
  • IP බහු විකාශන සහය ඇති අභ්‍යන්තර ජාලයක් ඇත

මෙම ලිපියේ අරමුණ එය නොවන බැවින් බාහිර දත්ත සමුදායක් සැකසීම ගැන අපි සාකච්ඡා නොකරමු. අපි හිතමු වැඩ කරන දත්ත ගබඩාවක් කොහේ හරි තියෙනවා කියලා - අපිට ඒකට සම්බන්ධක ලක්ෂයක් තියෙනවා. අපි මෙම දත්ත පරිසර විචල්‍යයන් වෙත සරලව එකතු කරන්නෙමු.

Failover (HA) පොකුරක් තුළ Keycloak ක්‍රියා කරන ආකාරය වඩා හොඳින් අවබෝධ කර ගැනීමට, Wildfly ගේ පොකුරු කිරීමේ හැකියාව මත ඒ සියල්ල රඳා පවතින්නේ කොපමණ දැයි දැන ගැනීම වැදගත් වේ.

Wildfly උප පද්ධති කිහිපයක් භාවිතා කරයි, ඒවායින් සමහරක් load balancer ලෙස භාවිතා කරයි, සමහරක් වැරදි ඉවසීම සඳහා භාවිතා කරයි. පොකුරු නෝඩයක් අධික ලෙස පටවා ඇති විට ලෝඩ් බැලන්සර් යෙදුම ලබා ගත හැකි බව සහතික කරයි, සහ සමහර පොකුරු නෝඩ් අසමත් වුවද දෝෂ ඉවසීම යෙදුම් පවතින බව සහතික කරයි. මෙම උප පද්ධති සමහරක්:

  • mod_cluster: HTTP load balancer එකක් ලෙස Apache සමඟ එක්ව ක්‍රියා කරයි, පෙරනිමියෙන් ධාරක සෙවීමට TCP බහු විකාශනය මත රඳා පවතී. බාහිර සමතුලිතයෙකු සමඟ ප්රතිස්ථාපනය කළ හැකිය.

  • infinispan: ප්‍රවාහන ස්තරයක් ලෙස JGroups නාලිකා භාවිතා කරමින් බෙදා හරින ලද හැඹිලියකි. මීට අමතරව, හැඹිලි අන්තර්ගතය සමමුහුර්ත කිරීම සඳහා බාහිර Infinispan පොකුරක් සමඟ සන්නිවේදනය කිරීමට HotRod ප්‍රොටෝකෝලය භාවිතා කළ හැක.

  • jgroups: JGroups නාලිකා මත පදනම් වූ ඉහළ මට්ටමේ පවතින සේවාවන් සඳහා කණ්ඩායම් සන්නිවේදන සහාය සපයයි. නම් කරන ලද පයිප්ප පොකුරක යෙදුම් අවස්ථා කණ්ඩායම් වලට සම්බන්ධ කිරීමට ඉඩ සලසයි, එවිට සන්නිවේදනයේ විශ්වසනීයත්වය, පිළිවෙල සහ අසාර්ථකත්වයට සංවේදීතාව වැනි ගුණාංග ඇත.

ලෝඩ් බැලන්සර්

Kubernetes පොකුරක ඇතුල්වීමේ පාලකයක් ලෙස balancer එකක් ස්ථාපනය කරන විට, පහත කරුණු මතක තබා ගැනීම වැදගත් වේ:

Keycloak උපකල්පනය කරන්නේ HTTP හරහා සත්‍යාපන සේවාදායකයට සම්බන්ධ වන සේවාදායකයාගේ දුරස්ථ ලිපිනය සේවාදායක පරිගණකයේ සැබෑ IP ලිපිනය බවයි. Balancer සහ ingress settings HTTP ශීර්ෂ නිවැරදිව සැකසිය යුතුය X-Forwarded-For и X-Forwarded-Proto, සහ මුල් මාතෘකාව සුරකින්න HOST. නවතම අනුවාදය ingress-nginx (>0.22.0) පෙරනිමියෙන් මෙය අක්‍රීය කරයි

කොඩිය සක්රිය කිරීම proxy-address-forwarding පරිසර විචල්‍යයක් සැකසීමෙන් PROXY_ADDRESS_FORWARDING в true එය ප්‍රොක්සියක් පිටුපස ක්‍රියා කරන බවට Keycloak හට අවබෝධය ලබා දෙයි.

ඔබ සක්රිය කිරීමටද අවශ්ය වේ ඇලෙන සුළු සැසි ඇතුල් වීමේදී. Keycloak වත්මන් සත්‍යාපන සැසිය සහ පරිශීලක සැසිය හා සම්බන්ධ දත්ත ගබඩා කිරීමට බෙදා හරින ලද Infinispan හැඹිලියක් භාවිතා කරයි. හැඹිලි පෙරනිමියෙන් තනි හිමිකරුවෙකු සමඟ ක්‍රියාත්මක වේ, වෙනත් වචන වලින් කිවහොත්, එම විශේෂිත සැසිය පොකුරේ කිසියම් නෝඩයක ගබඩා කර ඇති අතර අනෙකුත් නෝඩ් එම සැසියට ප්‍රවේශය අවශ්‍ය නම් එය දුරස්ථව විමසිය යුතුය.

විශේෂයෙන්, ලේඛනවලට පටහැනිව, කුකී යන නම සමඟ සැසියක් ඇමිණිය අපට වැඩ කළේ නැත AUTH_SESSION_ID. Keycloak හි යළි-යොමු ලූපයක් ඇත, එබැවින් අපි ඇලෙන සුළු සැසිය සඳහා වෙනත් කුකී නමක් තෝරා ගැනීමට නිර්දේශ කරමු.

Keycloak මුලින්ම ප්‍රතිචාර දැක්වූ නෝඩයේ නම ද අමුණයි AUTH_SESSION_ID, සහ ඉතා ඉහලින් පවතින අනුවාදයේ සෑම නෝඩයක්ම එකම දත්ත සමුදාය භාවිතා කරන බැවින්, ඒ සෑම එකක්ම තිබිය යුතුය ගනුදෙනු කළමනාකරණය සඳහා වෙනම සහ අද්විතීය නෝඩ් හඳුනාගැනීමක්. ඇතුල් කිරීම රෙකමදාරු කරනු ලැබේ JAVA_OPTS පරාමිතීන් jboss.node.name и jboss.tx.node.id එක් එක් නෝඩය සඳහා අද්විතීය - ඔබට උදාහරණයක් ලෙස, පොඩ් එකේ නම තැබිය හැකිය. ඔබ පොඩ් නමක් තැබුවහොත්, jboss විචල්‍ය සඳහා අක්ෂර 23 සීමාව ගැන අමතක නොකරන්න, එබැවින් යෙදවීමකට වඩා StatefulSet භාවිතා කිරීම වඩා හොඳය.

තවත් රාක්කයක් - පොඩ් එක මකා දැමුවහොත් හෝ නැවත ආරම්භ කළහොත් එහි හැඹිලිය නැති වී යයි. මෙය සැලකිල්ලට ගනිමින්, හැඹිලියේ පිටපතක් පවතිනු ඇති පරිදි, සියලු හැඹිලි සඳහා හැඹිලි හිමිකරුවන් සංඛ්යාව අවම වශයෙන් දෙදෙනෙකුට සැකසීම වටී. විසඳුම ධාවනය කිරීමයි Wildfly සඳහා පිටපත Pod එක ආරම්භ කරන විට, එය බහලුම තුළ තැබීම /opt/jboss/startup-scripts කන්ටේනරය තුළ:

ස්ක්‍රිප්ට් අන්තර්ගතය

embed-server --server-config=standalone-ha.xml --std-out=echo
batch

echo * Setting CACHE_OWNERS to "${env.CACHE_OWNERS}" in all cache-containers

/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=owners, value=${env.CACHE_OWNERS:1})

run-batch
stop-embedded-server

ඉන්පසු පරිසර විචල්‍යයේ අගය සකසන්න CACHE_OWNERS අවශ්ය ප්රමාණයට.

IP බහු විකාශන සහය සහිත පුද්ගලික ජාලය

ඔබ CNI ලෙස Weavenet භාවිතා කරන්නේ නම්, බහු විකාශනය වහාම ක්‍රියා කරයි - සහ ඔබේ Keycloak නෝඩ් දියත් කළ විගස එකිනෙක දකිනු ඇත.

ඔබට ඔබේ Kubernetes පොකුරේ ip බහු විකාශන සහය නොමැති නම්, ඔබට නෝඩ් සොයා ගැනීමට වෙනත් ප්‍රොටෝකෝල සමඟ වැඩ කිරීමට JGroups වින්‍යාසගත කළ හැක.

පළමු විකල්පය භාවිතා කිරීමයි KUBE_DNSභාවිතා කරන headless service Keycloak nodes සොයා ගැනීමට, ඔබ JGroups වෙත නෝඩ් සොයා ගැනීමට භාවිතා කරන සේවාවේ නම ලබා දෙන්න.

තවත් විකල්පයක් වන්නේ ක්රමය භාවිතා කිරීමයි KUBE_PING, නෝඩ් සෙවීමට API සමඟ ක්‍රියා කරන (ඔබට වින්‍යාස කිරීමට අවශ්‍ය වේ serviceAccount අයිතිවාසිකම් සමඟ list и get, ඉන්පසු මේ සමඟ වැඩ කිරීමට කරල් වින්‍යාස කරන්න serviceAccount).

JGroups නෝඩ් සොයා ගන්නා ආකාරය පරිසර විචල්‍යයන් සැකසීමෙන් වින්‍යාස කර ඇත JGROUPS_DISCOVERY_PROTOCOL и JGROUPS_DISCOVERY_PROPERTIES. සඳහා KUBE_PING ඔබ විමසමින් කරල් තෝරා ගත යුතුය namespace и labels.

ඔබ බහු විකාශනය භාවිතා කර එක් Kubernetes පොකුරක් තුළ Keycloak පොකුරු දෙකක් හෝ වැඩි ගණනක් ධාවනය කරන්නේ නම් (අපි නාම අවකාශයේ එකක් කියමු production, දෙවන - staging) - එක් Keycloak පොකුරක නෝඩ් තවත් පොකුරකට සම්බන්ධ විය හැක. විචල්‍යයන් සැකසීමෙන් එක් එක් පොකුරු සඳහා අනන්‍ය බහු විකාශන ලිපිනයක් භාවිතා කිරීමට වග බලා ගන්නjboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

දත්ත මධ්‍යස්ථාන අතර අනුකරණය

Kubernetes මත HA මාදිලියේ Keycloak ධාවනය කිරීම

සම්බන්ධතාවය

Keycloak විසින් Keycloak නෝඩ් වලින් සමන්විත Keycloack පොකුරු පිහිටා ඇති එක් එක් දත්ත මධ්‍යස්ථානය සඳහා වෙනම Infinispan හැඹිලි පොකුරු කිහිපයක් භාවිතා කරයි. නමුත් විවිධ දත්ත මධ්‍යස්ථාන වල Keycloak nodes අතර වෙනසක් නොමැත.

Keycloak nodes දත්ත මධ්‍යස්ථාන අතර සන්නිවේදනය සඳහා බාහිර Java Data Grid (Infinispan servers) භාවිතා කරයි. ප්රොටෝකෝලය අනුව සන්නිවේදනය ක්රියා කරයි Infinispan HotRod.

Infinispan හැඹිලි ගුණාංගය සමඟ වින්‍යාස කළ යුතුය remoteStore, දත්ත දුරස්ථව ගබඩා කළ හැකි වන පරිදි (වෙනත් දත්ත මධ්‍යස්ථානයක, ආසන්න වශයෙන් පරිවර්තකයා) හැඹිලි. JDG සේවාදායකයන් අතර වෙනම infinispan පොකුරු ඇත, එබැවින් වෙබ් අඩවියේ JDG1 හි දත්ත ගබඩා කර ඇත. site1 අඩවියේ JDG2 වෙත අනුකරණය කරනු ඇත site2.

අවසාන වශයෙන්, ලැබෙන JDG සේවාදායකය HotRod ප්‍රොටෝකෝලයේ විශේෂාංගයක් වන සේවාදායක සම්බන්ධතා හරහා එහි පොකුරේ Keycloak සේවාදායකයන්ට දැනුම් දෙයි. යතුරු ආවරණ නෝඩ් ක්‍රියාත්මකයි site2 ඔවුන්ගේ Infinispan හැඹිලි යාවත්කාලීන කරන්න සහ විශේෂිත පරිශීලක සැසිය Keycloak nodes මතද ලබා ගත හැක site2.

සමහර හැඹිලි සඳහා, උපස්ථ නොකිරීමට සහ Infinispan සේවාදායකය හරහා දත්ත ලිවීමෙන් සම්පූර්ණයෙන්ම වැළකී සිටීමටද හැකිය. මෙය සිදු කිරීම සඳහා ඔබ සැකසුම ඉවත් කළ යුතුය remote-store නිශ්චිත Infinispan හැඹිලිය (ගොනුව තුළ ස්වාධීන-ha.xml), ඉන් පසුව යම් නිශ්චිත replicated-cache Infinispan සේවාදායකයේ පැත්තෙන් තවදුරටත් අවශ්‍ය නොවේ.

හැඹිලි සැකසීම

Keycloak හි හැඹිලි වර්ග දෙකක් තිබේ:

  • දේශීය. එය දත්ත සමුදාය අසල පිහිටා ඇති අතර දත්ත සමුදායේ බර අඩු කිරීමට මෙන්ම ප්‍රතිචාර ප්‍රමාදය අඩු කිරීමටද සේවය කරයි. මෙම වර්ගයේ හැඹිලිය රාජය, සේවාදායකයින්, භූමිකාවන් සහ පරිශීලක පාර-දත්ත ගබඩා කරයි. හැඹිලිය Keycloak පොකුරක කොටසක් වුවද, මෙම වර්ගයේ හැඹිලිය අනුකරණය නොවේ. හැඹිලියේ ඇතුළත් කිරීමක් වෙනස් වුවහොත්, වෙනස් කිරීම පිළිබඳ පණිවිඩයක් පොකුරේ ඉතිරි සේවාදායකයන් වෙත යවනු ලැබේ, ඉන්පසු ප්‍රවේශය හැඹිලියෙන් බැහැර කරනු ලැබේ. විස්තරය බලන්න work ක්රියා පටිපාටිය පිළිබඳ වඩාත් සවිස්තරාත්මක විස්තරයක් සඳහා පහත බලන්න.

  • අනුවර්තනය කරන ලදී. පරිශීලක සැසි, නොබැඳි ටෝකන සකසයි, සහ මුරපද තතුබෑම් උත්සාහයන් සහ වෙනත් ප්‍රහාර හඳුනා ගැනීමට පිවිසුම් දෝෂ නිරීක්ෂණය කරයි. මෙම හැඹිලිවල ගබඩා කර ඇති දත්ත තාවකාලික වන අතර, RAM හි පමණක් ගබඩා කර ඇත, නමුත් පොකුර හරහා අනුකරණය කළ හැක.

Infinispan හැඹිලි

සැසිවාර - Keycloak හි සංකල්පයක්, වෙනම හැඹිලි ලෙස හැඳින්වේ authenticationSessions, විශේෂිත පරිශීලකයින්ගේ දත්ත ගබඩා කිරීමට භාවිතා කරයි. මෙම හැඹිලි වලින් ඉල්ලීම් සාමාන්‍යයෙන් අවශ්‍ය වන්නේ බ්‍රවුසරයට සහ Keycloak සේවාදායකයන්ට මිස යෙදුම්වලට නොවේ. ඇලෙන සුළු සැසි මත යැපීම ක්‍රියාත්මක වන්නේ මෙහිදී වන අතර, සක්‍රීය-ක්‍රියාකාරී මාදිලියේ දී පවා එවැනි හැඹිලි නැවත නැවත කිරීමට අවශ්‍ය නොවේ.

ක්රියාකාරී සංකේත. තවත් සංකල්පයක්, සාමාන්‍යයෙන් විවිධ අවස්ථා සඳහා භාවිතා වේ, උදාහරණයක් ලෙස, පරිශීලකයා තැපෑලෙන් අසමමුහුර්තව යමක් කළ යුතුය. උදාහරණයක් ලෙස, ක්රියා පටිපාටිය අතරතුර forget password හැඹිලිය actionTokens සම්බන්ධිත ටෝකන වල පාර-දත්ත නිරීක්ෂණය කිරීමට භාවිතා කරයි - උදාහරණයක් ලෙස, ටෝකනයක් දැනටමත් භාවිතා කර ඇති අතර නැවත සක්‍රිය කළ නොහැක. මෙම වර්ගයේ හැඹිලිය සාමාන්‍යයෙන් දත්ත මධ්‍යස්ථාන අතර ප්‍රතිවර්තනය කිරීමට අවශ්‍ය වේ.

ගබඩා කර ඇති දත්ත හැඹිලිගත කිරීම සහ වයසට යාම දත්ත සමුදාය මත පැටවීම ලිහිල් කිරීමට ක්රියා කරයි. මෙම ආකාරයේ හැඹිලි කිරීම කාර්ය සාධනය වැඩි දියුණු කරයි, නමුත් පැහැදිලි ගැටළුවක් එක් කරයි. එක් Keycloak සේවාදායකයක් දත්ත යාවත්කාලීන කරන්නේ නම්, අනෙක් සේවාදායකයන්ට ඔවුන්ගේ හැඹිලිවල දත්ත යාවත්කාලීන කිරීමට හැකි වන පරිදි දැනුම් දිය යුතුය. Keycloak දේශීය හැඹිලි භාවිතා කරයි realms, users и authorization දත්ත සමුදායෙන් දත්ත හැඹිලිගත කිරීම සඳහා.

වෙනම හැඹිලියක් ද ඇත work, එය සියලුම දත්ත මධ්‍යස්ථාන හරහා ප්‍රතිනිර්මාණය වේ. එයම දත්ත සමුදායෙන් දත්ත ගබඩා නොකරයි, නමුත් දත්ත මධ්‍යස්ථාන අතර පොකුරු නෝඩ් වෙත දත්ත වයස්ගත වීම පිළිබඳ පණිවිඩ යැවීමට සේවය කරයි. වෙනත් වචන වලින් කිවහොත්, දත්ත යාවත්කාලීන වූ වහාම, Keycloak node එහි දත්ත මධ්‍යස්ථානයේ ඇති අනෙකුත් නෝඩ් වලට මෙන්ම අනෙකුත් දත්ත මධ්‍යස්ථානවල ඇති නෝඩ් වලට පණිවිඩයක් යවයි. එවැනි පණිවිඩයක් ලැබීමෙන් පසු, සෑම නෝඩයක්ම එහි දේශීය හැඹිලිවල අනුරූප දත්ත ඉවත් කරයි.

පරිශීලක සැසි. නම් සහිත හැඹිලි sessions, clientSessions, offlineSessions и offlineClientSessions, සාමාන්‍යයෙන් දත්ත මධ්‍යස්ථාන අතර ප්‍රතිනිර්මාණය වන අතර පරිශීලකයා බ්‍රවුසරයේ සක්‍රියව සිටින විට සක්‍රිය වන පරිශීලක සැසි පිළිබඳ දත්ත ගබඩා කිරීමට සේවය කරයි. මෙම හැඹිලි අවසන් පරිශීලකයින්ගේ HTTP ඉල්ලීම් සැකසීමේ යෙදුම් සමඟ ක්‍රියා කරයි, එබැවින් ඒවා ඇලෙන සුළු සැසි සමඟ සම්බන්ධ වන අතර දත්ත මධ්‍යස්ථාන අතර ප්‍රතිවර්තනය කළ යුතුය.

තිරිසන් බල ආරක්ෂාව. හැඹිලිය loginFailures පරිශීලකයෙකු වැරදි මුරපදයක් ඇතුළු කළ වාර ගණන වැනි පිවිසුම් දෝෂ දත්ත හඹා යාමට භාවිතා කරයි. මෙම හැඹිලිය අනුකරණය කිරීම පරිපාලකගේ වගකීම වේ. නමුත් නිවැරදි ගණනය කිරීම සඳහා, දත්ත මධ්යස්ථාන අතර අනුවර්තනය සක්රිය කිරීම වටී. නමුත් අනෙක් අතට, ඔබ මෙම දත්ත අනුකරණය නොකරන්නේ නම්, ඔබ කාර්ය සාධනය වැඩිදියුණු කරනු ඇති අතර, මෙම ගැටළුව පැනනගින්නේ නම්, අනුකරණය සක්‍රිය නොවිය හැක.

Infinispan පොකුරක් පෙරළන විට, ඔබ විසින් සැකසුම් ගොනුවට හැඹිලි අර්ථ දැක්වීම් එක් කළ යුතුය:

<replicated-cache-configuration name="keycloak-sessions" mode="ASYNC" start="EAGER" batching="false">
</replicated-cache-configuration>

<replicated-cache name="work" configuration="keycloak-sessions" />
<replicated-cache name="sessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineSessions" configuration="keycloak-sessions" />
<replicated-cache name="actionTokens" configuration="keycloak-sessions" />
<replicated-cache name="loginFailures" configuration="keycloak-sessions" />
<replicated-cache name="clientSessions" configuration="keycloak-sessions" />
<replicated-cache name="offlineClientSessions" configuration="keycloak-sessions" />

ඔබ Keycloak පොකුර ආරම්භ කිරීමට පෙර Infinispan පොකුර වින්‍යාස කර ආරම්භ කළ යුතුය

එවිට ඔබට වින්යාසගත කිරීමට අවශ්ය වේ remoteStore Keycloak හැඹිලි සඳහා. මෙය සිදු කිරීම සඳහා, විචල්‍යය සැකසීමට භාවිතා කරන පෙර එකට සමානව සිදු කරන ලද ස්ක්‍රිප්ට් එකක් ප්‍රමාණවත් වේ. CACHE_OWNERS, ඔබ එය ගොනුවකට සුරැකිය යුතු අතර එය ඩිරෙක්ටරියක තැබිය යුතුය /opt/jboss/startup-scripts:

ස්ක්‍රිප්ට් අන්තර්ගතය

embed-server --server-config=standalone-ha.xml --std-out=echo
batch

echo *** Update infinispan subsystem ***
/subsystem=infinispan/cache-container=keycloak:write-attribute(name=module, value=org.keycloak.keycloak-model-infinispan)

echo ** Add remote socket binding to infinispan server **
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-cache:add(host=${remote.cache.host:localhost}, port=${remote.cache.port:11222})

echo ** Update replicated-cache work element **
/subsystem=infinispan/cache-container=keycloak/replicated-cache=work/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=work, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)

/subsystem=infinispan/cache-container=keycloak/replicated-cache=work:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache sessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=sessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache offlineSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=offlineSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache clientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=clientSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache offlineClientSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=offlineClientSessions, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache loginFailures element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    remote-servers=["remote-cache"], 
    cache=loginFailures, 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache actionTokens element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens/store=remote:add( 
    passivation=false, 
    fetch-state=false, 
    purge=false, 
    preload=false, 
    shared=true, 
    cache=actionTokens, 
    remote-servers=["remote-cache"], 
    properties={ 
        rawValues=true, 
        marshaller=org.keycloak.cluster.infinispan.KeycloakHotRodMarshallerFactory, 
        protocolVersion=${keycloak.connectionsInfinispan.hotrodProtocolVersion} 
    } 
)
/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens:write-attribute(name=statistics-enabled,value=true)

echo ** Update distributed-cache authenticationSessions element **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=statistics-enabled,value=true)

echo *** Update undertow subsystem ***
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)

run-batch
stop-embedded-server

ස්ථාපනය කිරීමට අමතක නොකරන්න JAVA_OPTS HotRod ධාවනය කිරීමට Keycloak nodes සඳහා: remote.cache.host, remote.cache.port සහ සේවා නාමය jboss.site.name.

සබැඳි සහ අමතර ලියකියවිලි

ලිපිය හබ්ර් සඳහා පරිවර්තනය කර සකස් කරන ලද්දේ සේවකයින් විසිනි මුඩුක්කු පුහුණු මධ්යස්ථානය - පුහුණු විශේෂඥයින්ගෙන් දැඩි පාඨමාලා, වීඩියෝ පාඨමාලා සහ ආයතනික පුහුණුව (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න