Tmexxi Keycloak fil-modalità HA fuq Kubernetes

Tmexxi Keycloak fil-modalità HA fuq Kubernetes

TL; DR: se jkun hemm deskrizzjoni ta 'Keycloak, sistema ta' kontroll ta 'aċċess ta' sors miftuħ, analiżi tal-istruttura interna, dettalji tal-konfigurazzjoni.

Introduzzjoni u Ideat Ewlenin

F'dan l-artikolu, se naraw l-ideat bażiċi li għandek iżżomm f'moħħok meta tuża cluster Keycloak fuq Kubernetes.

Jekk trid tkun taf aktar dwar Keycloak, irreferi għall-links fl-aħħar tal-artiklu. Sabiex issir aktar mgħaddsa fil-prattika, tista 'tistudja repożitorju tagħna b'modulu li jimplimenta l-ideat ewlenin ta 'dan l-artikolu (il-gwida tat-tnedija tinsab hemm, dan l-artikolu se jipprovdi ħarsa ġenerali lejn l-apparat u s-settings, madwar. traduttur).

Keycloak hija sistema komprensiva miktuba bil-Java u mibnija fuq server ta 'applikazzjoni Wildfly. Fil-qosor, huwa qafas għall-awtorizzazzjoni li jagħti lill-utenti tal-applikazzjoni kapaċitajiet ta 'federazzjoni u SSO (single sign-on).

Nistednuk taqra l-uffiċjal website jew Wikipedija għal fehim dettaljat.

Tnedija Keycloak

Keycloak jeħtieġ żewġ sorsi ta 'dejta persistenti biex jaħdem:

  • Database użata biex taħżen data stabbilita, bħal informazzjoni dwar l-utent
  • Datagrid cache, li hija użata biex taħżen data mid-database, kif ukoll biex taħżen xi metadata ta 'ħajja qasira u li tinbidel ta' spiss, bħal sessjonijiet tal-utent. Implimentati Infinispan, li ġeneralment tkun ferm aktar mgħaġġla mid-database. Iżda fi kwalunkwe każ, id-dejta ssejvjata f'Infinispan hija effimera - u m'għandhiex għalfejn tiġi ssejvjata kullimkien meta l-cluster jerġa' jinbeda.

Keycloak jaħdem f'erba' modi differenti:

  • Normali - proċess wieħed u wieħed biss, ikkonfigurat permezz ta 'fajl standalone.xml
  • Raggruppament regolari (għażla ta 'disponibbiltà għolja) - il-proċessi kollha għandhom jużaw l-istess konfigurazzjoni, li għandha tkun sinkronizzata manwalment. Is-settings huma maħżuna f'fajl standalone-ha.xml, Barra minn hekk għandek bżonn tagħmel aċċess kondiviż għad-database u load balancer.
  • cluster tad-dominju — il-bidu ta’ cluster fil-modalità normali malajr isir kompitu ta’ rutina u tedjanti hekk kif il-cluster jikber, peress li kull darba li tinbidel il-konfigurazzjoni, il-bidliet kollha jridu jsiru fuq kull nodu tal-cluster. Il-mod ta 'tħaddim tad-dominju jsolvi din il-kwistjoni billi jistabbilixxi xi post ta' ħażna kondiviż u jippubblika l-konfigurazzjoni. Dawn is-settings huma maħżuna fil-fajl domain.xml
  • Replikazzjoni bejn ċentri tad-dejta — jekk trid tħaddem Keycloak f'grupp ta' diversi ċentri tad-dejta, ħafna drabi f'postijiet ġeografiċi differenti. F'din l-għażla, kull ċentru tad-dejta se jkollu l-cluster tiegħu ta 'servers Keycloak.

F'dan l-artikolu ser nikkunsidraw fid-dettall it-tieni għażla, jiġifieri cluster regolari, u se nmissu wkoll ftit is-suġġett tar-replikazzjoni bejn iċ-ċentri tad-dejta, peress li jagħmel sens li tmexxi dawn iż-żewġ għażliet f'Kubernetes. Fortunatament, f'Kubernetes m'hemm l-ebda problema fis-sinkronizzazzjoni tas-settings ta 'diversi imżiewed (nodi Keycloak), għalhekk cluster tad-dominju Mhux se jkun diffiċli ħafna li tagħmel.

Ukoll jekk jogħġbok innota li l-kelma cluster għall-bqija tal-artikolu se japplika biss għal grupp ta 'nodi Keycloak li jaħdmu flimkien, m'hemmx bżonn li tirreferi għal cluster Kubernetes.

Cluster Keycloak regolari

Biex tħaddem Keycloak f'din il-modalità għandek bżonn:

  • kkonfigurat database kondiviża esterna
  • tinstalla load balancer
  • għandhom netwerk intern b'appoġġ multicast IP

Aħna mhux se niddiskutu t-twaqqif ta 'database esterna, peress li mhuwiex l-iskop ta' dan l-artikolu. Ejja nassumu li hemm database li taħdem x'imkien - u għandna punt ta 'konnessjoni magħha. Aħna sempliċiment inżidu din id-dejta mal-varjabbli ambjentali.

Biex tifhem aħjar kif jaħdem Keycloak f'cluster ta' failover (HA), huwa importanti li tkun taf kemm dan kollu jiddependi fuq il-kapaċitajiet ta' clustering ta' Wildfly.

Wildfly juża diversi sottosistemi, uħud minnhom jintużaw bħala load balancer, uħud għat-tolleranza tal-ħsarat. Il-load balancer jiżgura d-disponibbiltà tal-applikazzjoni meta node tal-cluster ikun mgħobbi żżejjed, u t-tolleranza tal-ħsarat tiżgura d-disponibbiltà tal-applikazzjoni anki jekk xi nodi tal-cluster ifallu. Xi wħud minn dawn is-sottosistemi:

  • mod_cluster: Jaħdem flimkien ma 'Apache bħala bilanċjar tat-tagħbija HTTP, jiddependi fuq TCP multicast biex issib hosts awtomatikament. Jista 'jiġi sostitwit b'balancer estern.

  • infinispan: Cache distribwit li juża kanali JGroups bħala saff tat-trasport. Barra minn hekk, jista 'juża l-protokoll HotRod biex jikkomunika ma' cluster Infinispan estern biex jissinkronizza l-kontenut tal-cache.

  • jgroups: Jipprovdi appoġġ għall-komunikazzjoni tal-grupp għal servizzi disponibbli ħafna bbażati fuq kanali JGroups. Il-pajpijiet bl-isem jippermettu li l-istanzi tal-applikazzjoni fi cluster jiġu konnessi fi gruppi sabiex il-komunikazzjoni jkollha proprjetajiet bħall-affidabbiltà, l-ordni, u s-sensittività għall-fallimenti.

Load Balancer

Meta tinstalla balancer bħala kontrollur tad-dħul fi cluster Kubernetes, huwa importanti li wieħed iżomm f'moħħu l-affarijiet li ġejjin:

Keycloak jassumi li l-indirizz remot tal-klijent li jgħaqqad permezz HTTP mas-server ta 'awtentikazzjoni huwa l-indirizz IP reali tal-kompjuter tal-klijent. Is-settings tal-balancer u l-ingress għandhom jistabbilixxu headers HTTP b'mod korrett X-Forwarded-For и X-Forwarded-Proto, u ssalva wkoll it-titlu oriġinali HOST. L-aħħar verżjoni ingress-nginx (>0.22.0) tiddiżattiva dan awtomatikament

Attivazzjoni tal-bandiera proxy-address-forwarding billi tistabbilixxi varjabbli ambjentali PROXY_ADDRESS_FORWARDING в true jagħti lil Keycloak il-fehim li qed jaħdem wara prokura.

Għandek bżonn ukoll li tippermetti sessjonijiet li jwaħħlu fid-dħul. Keycloak juża cache Infinispan distribwit biex jaħżen id-dejta assoċjata mas-sessjoni ta 'awtentikazzjoni attwali u s-sessjoni tal-utent. Il-caches joperaw b'mod awtomatiku ma' sid wieħed, fi kliem ieħor, dik is-sessjoni partikolari hija maħżuna fuq xi nodu fil-cluster, u nodi oħra jridu jfittxuha mill-bogħod jekk ikollhom bżonn aċċess għal dik is-sessjoni.

Speċifikament, kuntrarjament għad-dokumentazzjoni, it-twaħħil ta 'sessjoni bil-cookie tal-isem ma ħadimx għalina AUTH_SESSION_ID. Keycloak għandu redirect loop, għalhekk nirrakkomandaw li tagħżel isem tal-cookie differenti għas-sessjoni li twaħħal.

Keycloak jehmeż ukoll l-isem tan-node li wieġeb l-ewwel AUTH_SESSION_ID, u peress li kull node fil-verżjoni disponibbli ħafna juża l-istess database, kull wieħed minnhom irid ikollok identifikatur tan-nodi separat u uniku għall-ġestjoni tat-tranżazzjonijiet. Huwa rakkomandat li tpoġġi JAVA_OPTS parametri jboss.node.name и jboss.tx.node.id uniku għal kull nodu - tista ', pereżempju, tpoġġi l-isem tal-pod. Jekk tpoġġi isem pod, tinsiex dwar il-limitu ta '23 karattru għall-varjabbli jboss, għalhekk huwa aħjar li tuża StatefulSet aktar milli Deployment.

Rake ieħor - jekk il-pod titħassar jew jerġa 'jibda, il-cache tiegħu jintilef. Meta wieħed iqis dan, ta' min jiġi stabbilit in-numru ta' sidien tal-cache għall-caches kollha għal mill-inqas tnejn, sabiex tibqa' kopja tal-cache. Is-soluzzjoni hija li taħdem skript għal Wildfly meta tibda l-pod, poġġiha fid-direttorju /opt/jboss/startup-scripts fil-kontenitur:

Kontenut tal-Iskript

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

imbagħad issettja l-valur tal-varjabbli ambjentali CACHE_OWNERS għal dak meħtieġ.

Netwerk privat b'appoġġ multicast IP

Jekk tuża Weavenet bħala CNI, il-multicast jaħdem immedjatament - u n-nodi Keycloak tiegħek jaraw lil xulxin hekk kif jitnedew.

Jekk m'għandekx appoġġ multicast ip fil-cluster Kubernetes tiegħek, tista 'tikkonfigura JGroups biex taħdem ma' protokolli oħra biex issib nodi.

L-ewwel għażla hija li tuża KUBE_DNSli juża headless service biex issib in-nodi Keycloak, inti sempliċiment tgħaddi lil JGroups l-isem tas-servizz li se jintuża biex issib in-nodi.

Għażla oħra hija li tuża l-metodu KUBE_PING, li taħdem mal-API biex tfittex nodi (jeħtieġlek tikkonfigura serviceAccount bid-drittijiet list и get, u mbagħad ikkonfigura l-imżiewed biex jaħdmu ma 'dan serviceAccount).

Il-mod kif JGroups isibu nodi huwa kkonfigurat billi jiġu stabbiliti varjabbli ambjentali JGROUPS_DISCOVERY_PROTOCOL и JGROUPS_DISCOVERY_PROPERTIES. Biex KUBE_PING għandek bżonn tagħżel imżiewed billi tistaqsi namespace и labels.

️ Jekk tuża multicast u tħaddem żewġ raggruppamenti Keycloak jew aktar fi cluster wieħed ta’ Kubernetes (ejja ngħidu wieħed fl-ispazju tal-isem production, it-tieni - staging) - nodi ta' cluster wieħed Keycloak jistgħu jingħaqdu ma' cluster ieħor. Kun żgur li tuża indirizz multicast uniku għal kull cluster billi tistabbilixxi varjabblijboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

Replikazzjoni bejn ċentri tad-dejta

Tmexxi Keycloak fil-modalità HA fuq Kubernetes

Связь

Keycloak juża diversi clusters separati ta' cache Infinispan għal kull ċentru tad-dejta fejn jinsabu clusters Keycloack magħmulin minn nodi Keycloak. Iżda m'hemm l-ebda differenza bejn in-nodi Keycloak f'ċentri tad-dejta differenti.

Nodi Keycloak jużaw Java Data Grid esterna (servers Infinispan) għall-komunikazzjoni bejn iċ-ċentri tad-data. Il-komunikazzjoni taħdem skont il-protokoll Infinispan HotRod.

Il-caches Infinispan għandhom jiġu kkonfigurati bl-attribut remoteStore, sabiex id-dejta tkun tista’ tinħażen mill-bogħod (f’ċentru tad-dejta ieħor, madwar. traduttur) caches. Hemm raggruppamenti infinispan separati fost is-servers JDG, sabiex id-dejta maħżuna fuq JDG1 fuq il-post site1 se jiġi replikat għal JDG2 fuq il-post site2.

U fl-aħħarnett, is-server JDG li jirċievi jinnotifika lis-servers Keycloak tal-cluster tiegħu permezz ta 'konnessjonijiet tal-klijenti, li hija karatteristika tal-protokoll HotRod. Keycloak nodi fuq site2 jaġġornaw il-caches Infinispan tagħhom u s-sessjoni speċifika tal-utent issir disponibbli wkoll fuq in-nodi Keycloak fuq site2.

Għal xi caches, huwa wkoll possibbli li ma tagħmilx backups u tevita kompletament il-kitba tad-dejta permezz tas-server Infinispan. Biex tagħmel dan għandek bżonn tneħħi l-issettjar remote-store cache Infinispan speċifiku (fil-fajl standalone-ha.xml), wara xi wħud speċifiċi replicated-cache mhux se jkun aktar meħtieġ ukoll fuq in-naħa tas-server Infinispan.

Twaqqif ta 'caches

Hemm żewġ tipi ta’ caches f’Keycloak:

  • Lokali. Hija tinsab ħdejn id-database u sservi biex tnaqqas it-tagħbija fuq id-database, kif ukoll biex tnaqqas il-latenza tar-rispons. Dan it-tip ta 'cache jaħżen isfera, klijenti, rwoli, u metadejta tal-utent. Dan it-tip ta 'cache mhuwiex replikat, anki jekk il-cache hija parti minn cluster Keycloak. Jekk dħul fil-cache tinbidel, jintbagħat messaġġ dwar il-bidla lis-servers li jifdal fil-cluster, u wara dan id-dħul jiġi eskluż mill-cache. Ara d-deskrizzjoni work Ara hawn taħt għal deskrizzjoni aktar dettaljata tal-proċedura.

  • Replikat. Jipproċessa sessjonijiet tal-utenti, tokens offline, u jimmonitorja wkoll l-iżbalji tal-login biex jiskopri tentattivi ta’ phishing tal-password u attakki oħra. Id-dejta maħżuna f'dawn il-caches hija temporanja, maħżuna biss fir-RAM, iżda tista' tiġi replikata madwar il-cluster.

Infinispan caches

Sessjonijiet - kunċett f'Keycloak, caches separati msejħa authenticationSessions, huma użati biex jaħżnu data ta 'utenti speċifiċi. Talbiet minn dawn il-caches huma ġeneralment meħtieġa mill-browser u mis-servers Keycloak, mhux mill-applikazzjonijiet. Dan huwa fejn tidħol id-dipendenza fuq sessjonijiet li jwaħħlu, u tali caches infushom m'għandhomx għalfejn jiġu replikati, anke fil-każ tal-modalità Attiva-Attiva.

Tokens ta' Azzjoni. Kunċett ieħor, normalment użat għal diversi xenarji meta, pereżempju, l-utent irid jagħmel xi ħaġa b'mod asinkroniku bil-posta. Per eżempju, matul il-proċedura forget password cache actionTokens użat biex jintraċċa metadata ta 'tokens assoċjati - pereżempju, token diġà intuża u ma jistax jerġa' jiġi attivat. Dan it-tip ta 'cache tipikament jeħtieġ li jiġi replikat bejn iċ-ċentri tad-dejta.

Caching u aging tad-dejta maħżuna jaħdem biex itaffi t-tagħbija fuq id-database. Dan it-tip ta 'caching itejjeb il-prestazzjoni, iżda jżid problema ovvja. Jekk server Keycloak wieħed jaġġorna d-dejta, is-servers l-oħra għandhom jiġu nnotifikati sabiex ikunu jistgħu jaġġornaw id-dejta fil-caches tagħhom. Keycloak juża caches lokali realms, users и authorization għall-caching tad-data mid-database.

Hemm ukoll cache separata work, li hija replikata fiċ-ċentri tad-dejta kollha. Hija nnifisha ma taħżen l-ebda dejta mid-database, iżda sservi biex tibgħat messaġġi dwar it-tixjiħ tad-dejta lil cluster nodes bejn iċ-ċentri tad-dejta. Fi kliem ieħor, hekk kif id-dejta tiġi aġġornata, in-nodu Keycloak jibgħat messaġġ lil nodi oħra fiċ-ċentru tad-dejta tiegħu, kif ukoll nodi f'ċentri tad-dejta oħra. Wara li jirċievi messaġġ bħal dan, kull nodu jneħħi d-dejta korrispondenti fil-caches lokali tiegħu.

Sessjonijiet tal-utenti. Caches bl-ismijiet sessions, clientSessions, offlineSessions и offlineClientSessions, huma ġeneralment replikati bejn iċ-ċentri tad-dejta u jservu biex jaħżnu dejta dwar sessjonijiet tal-utent li huma attivi waqt li l-utent ikun attiv fil-browser. Dawn il-caches jaħdmu mal-applikazzjoni li tipproċessa t-talbiet HTTP mill-utenti finali, għalhekk huma assoċjati ma 'sessjonijiet li jwaħħlu u għandhom jiġu replikati bejn iċ-ċentri tad-dejta.

Protezzjoni tal-forza bruta. Cache loginFailures Użat biex jittraċċa d-dejta tal-iżball tal-login, bħal kemm-il darba utent daħħal password żbaljata. Ir-replikazzjoni ta' din il-cache hija r-responsabbiltà tal-amministratur. Iżda għal kalkolu preċiż, ta 'min jattiva r-replikazzjoni bejn iċ-ċentri tad-dejta. Iżda min-naħa l-oħra, jekk ma tirreplikax din id-dejta, ittejjeb il-prestazzjoni, u jekk tqum din il-kwistjoni, ir-replikazzjoni tista 'ma tiġix attivata.

Meta toħroġ cluster Infinispan, trid iżżid definizzjonijiet tal-cache mal-fajl tas-settings:

<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" />

Int trid tikkonfigura u tibda l-cluster Infinispan qabel ma tibda l-cluster Keycloak

Imbagħad għandek bżonn tikkonfigura remoteStore għall-caches Keycloak. Biex tagħmel dan, huwa biżżejjed skript, li jsir b'mod simili għal dak ta 'qabel, li jintuża biex tissettja l-varjabbli CACHE_OWNERS, trid tissejvjah f'fajl u poġġih f'direttorju /opt/jboss/startup-scripts:

Kontenut tal-Iskript

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

Tinsiex li tinstalla JAVA_OPTS għan-nodi Keycloak biex imexxu HotRod: remote.cache.host, remote.cache.port u l-isem tas-servizz jboss.site.name.

Links u dokumentazzjoni addizzjonali

L-artiklu ġie tradott u ppreparat għal Habr mill-impjegati Ċentru ta 'taħriġ Slurm — korsijiet intensivi, korsijiet bil-vidjo u taħriġ korporattiv minn speċjalisti prattikanti (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

Sors: www.habr.com

Żid kumment