KĂ€ivitame Keycloaki HA-reĆŸiimis Kuberneteses

KĂ€ivitame Keycloaki HA-reĆŸiimis Kuberneteses

TL;DR: on Keycloak, avatud lĂ€htekoodiga juurdepÀÀsusĂŒsteem, selle sisemist struktuuri analĂŒĂŒs, seadistamise ĂŒksikasjad.

Sissejuhatus ja pÔhiteemad

Selles artiklis kÀsitleme pÔhiteemasid, mida meeles pidada Keycloaki klusteri kÀitamisel Kubernetesel.

Kui soovite rohkem teada Keycloaki kohta, tutvuge artikli lĂ”pus olevate linkidega. SĂŒvitsi minemiseks vĂ”ite uurida meie repository't , millel on moodul, mis realiseerib selles artiklis kĂ€sitletud pĂ”hiteemasid (kĂ€ivitamisjuhend on seal sama, artikkel annab ĂŒlevaate seadistusest ja seadistustest. tĂ”lkija mĂ€rk.).

Keycloak on keeruline sĂŒsteem, mis on kirjutatud Java-s ja loodud rakenduste serveri Wildflypeal. Lihtsalt öeldes, on see autoriseerimise framework, mis pakub rakenduse kasutajatele föderatiivsust ja SSO (ĂŒhekordne sisselogimine) vĂ”imalust.

Kutsume teid tutvuma ametliku veebileht vÔi Vikipeedia ga, et saada pÔhjalikumat arusaama.

Keycloaki kÀivitamine

Keycloak vajab kÀitamiseks kahte pidevalt hoitavat andmeallikat:

  • Andmebaas, mis on mĂ”eldud stabiilsete andmete, nĂ€iteks kasutaja teabe, salvestamiseks.
  • Datagrid cache, mis kasutatakse andmete vahemĂ€lustamiseks andmebaasist ning ka teatud lĂŒhiajaliste ja sageli muudetavate metaandmete, nĂ€iteks kasutajasessioonide jaoks. Vabastatakse Infinispan, mis on tavaliselt andmebaasist mĂ€rkimisvÀÀrselt kiirem. Kuid igal juhul on Infinspanis salvestatud andmed efemeersed — ja neid ei pea klastrit taaskĂ€ivitades kuhugi salvestama.

Keycloak töötab neljas erinevas reĆŸiimis:

  • Tavaline — ĂŒks ja ainus protsess, mis on seadistatud faili kaudu standalone.xml
  • Tavaklaster (kĂ”rge saadavusega variant) — kĂ”ik protsessid peavad kasutama sama konfiguratsiooni, mida tuleb kĂ€sitsi sĂŒnkroonida. Seaded salvestatakse faili standalone-ha.xml, lisaks peab olema ligipÀÀs andmebaasile ja koormuse tasakaalustaja.
  • Domeeniklastri — tavalise reĆŸiimi klastri kĂ€ivitamine muutub kiiresti rutiinseks ja igavaks tegevuseks klastri kasvades, kuna igal korral, kui konfiguratsiooni muudetakse, tuleb kĂ”ik muudatused iga klassi sĂ”lme kanda. DomeenireĆŸiim lahendab selle probleemi, seadistades ĂŒhise salvestuskoha ja avaldades konfiguratsiooni. Need seadistused salvestatakse faili domain.xml
  • Replikatsioon andmekeskuste vahel — kui soovite kĂ€ivitada Keycloaki mitme andmekeskuse klastris, mis asuvad geograafiliselt erinevates kohtades. Selle tööreĆŸiimi korral on igal andmekeskusel oma Keycloaki serverite klaster.

Selles artiklis vaatame lĂ€hemalt teist varianti, nimelt tavaline klaster, samuti puudutame natuke teemat replikatsioonist andmekeskuste vahel, kuna neid kahte varianti on mĂ”istlik kĂ€ivitada Kuberneteses. Õnneks ei ole Kuberneteses probleem mitme podi (Keycloaki sĂ”lmede) seadistuste sĂŒnkroniseerimisel, nii et domeeniklaster ei ole liiga keeruline teha.

Palun pöörake tÀhelepanu, et sÔna klaster Artikli lÔpus kÀsitletakse ainult Keycloaki sÔlmedest koosneva grupi kohta, Kubernetes'i klastrile viitamine ei ole vajalik.

Tavaline Keycloaki klaster

Keycloaki kĂ€itamiseks selles reĆŸiimis on vajalik:

  • seada sisse vĂ€line jagatud andmebaas
  • paigaldada koormuse tasakaalustaja
  • omada sisevĂ”rku, mis toetab IP multicast'i

VĂ€lise andmebaasi seadistamist me siin ei kĂ€sitle, kuna see ei ole artikli eesmĂ€rk. Arvestame, et kuskil on toimiv andmebaas — ja meil on sellele juurdepÀÀsupunkt. Me lihtsalt lisame need andmed keskkonnavaru muutujatesse.

Keycloaki toimimise paremaks mÔistmiseks talitluskatkestusteta (HA) klastris on oluline teada, kui palju see kÔik sÔltub Wildfly klasterdamise vÔimekusest.

Wildfly rakendab mitmeid alamsĂŒsteeme, millest mĂ”ned toimivad koormuse tasakaalustajana, teised - talitluskatkestuste vĂ€ltimiseks. Koormuse tasakaalustaja tagab rakenduse kĂ€ttesaadavuse klastrisĂ”lme ĂŒlekoormuse korral, samas kui talitluskatkestuste vĂ€ltimine tagab rakenduse kĂ€ttesaadavuse isegi juhul, kui osa klastrisĂ”lmedest ebaĂ”nnestub. MĂ”ned nendest alamsĂŒsteemidest:

  • mod_cluster: töötab koos Apache'iga HTTP tasakaalustajana, sĂ”ltub TCP multicastist, et leida vaikimisi sĂ”lmi. VĂ”ib asendada vĂ€lise tasakaalustajaga.

  • infinispan: jagatud vahemĂ€lu, mis kasutab JGroups kanaleid transporditasemena. Lisaks vĂ”ib kasutada HotRod protokolli, et suhelda vĂ€list Infinispani klastriga vahemĂ€lu sisu sĂŒnkroonimiseks.

  • jgroups: pakub grupi suhtluse tuge kĂ”rge k disponibilidade teenustele JGroups kanalite pĂ”hjal. Nimetatud kanalid vĂ”imaldavad klastris rakenduse eksemplaridel ĂŒhenduda rĂŒhmadesse, et suhtlus omaks selliseid omadusi nagu usaldusvÀÀrsus, jĂ€rjestus ja tĂ”rkevaba tundlikkus.

Tasakaalustaja

Tasakaalustaja seadistamisel Kubernetes klastris ingress kontrollerina on oluline silmas pidada jÀrgmisi asju:

Keycloak'i töö eeldab, et HTTP kaudu autentimiserveriga ĂŒhendatud kliendi kaug-aategelane on kliendi arvuti tegelik IP-aadress. Tasakaalustaja ja ingress seadistused peaksid Ă”igesti seadma HTTP pĂ€ised X-Forwarded-For ja X-Forwarded-Proto, samuti hoidma algset pĂ€ist HOST. Viimane versioon ingress-nginx (> 0.22.0) ei ole seda vaikimisi vĂ€ljalĂŒlitatud

LipumĂ€rgi aktiveerimine proxy-address-forwarding seades keskkonnamuutuja PROXY_ADDRESS_FORWARDING ĂŒhes true annab Keycloakile arusaama, et see töötab proxy taga.

Samuti tuleb aktiveerida kleepuvad sessioonid ingressis. Keycloak kasutab Infinispan'i jaotatud vahemĂ€lu, et salvestada autentimise ja kasutaja sessiooniga seotud andmeid. VahemĂ€lud töötavad vaikimisi ĂŒhe omanikuga, teisisĂ”nu salvestatakse see konkreetne sessioon mĂ”nes klastris asuvas sĂ”lmes ja teised sĂ”lmed peavad langetama selle eemalt, kui neile on vaja sellele sessioonile juurde pÀÀseda.

Konkreetsemalt ei töötanud meil dokumentatsioonile vastav sessiooninimega kĂŒpsis AUTH_SESSION_ID. Keycloak lĂ€ks ĂŒmber suunamisel ummikusse, seetĂ”ttu soovitame valida teistsugune kĂŒpsiseketi nimi.

Samuti lisab Keycloak esimesele vastanud sĂ”lme nime AUTH_SESSION_ID, ja kuna iga sĂ”lm kĂ”rgetasemelises variandis kasutab ĂŒht ja sama andmebaasi, peab igaĂŒhel neist olema eraldi ja ainulaadne sĂ”lme identifikaator tehingute haldamiseks. Soovitatav on seada JAVA_OPTS parameetrid jboss.node.name ja jboss.tx.node.id iga node'ile unikaalseid nimesid, nĂ€iteks saate mÀÀrata poodi nime. Kui mÀÀrate poodi nime, pidage meeles, et jboss muutujaid on piirang 23 sĂŒmbolit, seega on parem kasutada StatefulSet, mitte Deployment.

Veel ĂŒks probleem — kui pood kustutatakse vĂ”i taaskĂ€ivitub, kaob selle vahemĂ€lu. SeetĂ”ttu on soovitatav seada kĂ”igi vahemĂ€lude omanikke vĂ€hemalt kaks, et jÀÀks alles varukoopia. Lahendus — kĂ€ivitada Wildfly skript poodi kĂ€ivitamisel, asetades selle katalooge /opt/jboss/startup-scripts konteineris:

Skripti sisu

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

echo * Seadistame CACHE_OWNERS "${env.CACHE_OWNERS}" kÔigis vahemÀlude konteinerites

/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

jÀrel peab seadistama keskkonnamuutuja vÀÀrtuse CACHE_OWNERS vajalikuks.

Privaatne vÔrk IP multicasti toega

Kui kasutate Weavenet'it CNI-na, töötab multicast kohe — ja teie Keycloak nodid nĂ€evad ĂŒksteist, kui need on kĂ€ivitatud.

Kui teie Kubernetes kluster ei toeta IP multicast'i, saate seadistada JGroups'i töötama teiste protokollidega nodide leidmiseks.

Esimene vÔimalus on kasutada KUBE_DNS, mis kasutab headless teenust Keycloaki sÔlmede leidmiseks edastate lihtsalt JGroups'ile teenuse nime, mida kasutatakse sÔlmede otsimiseks.

Veel ĂŒks vĂ”imalus on kasutada meetodit KUBE_PING, mis töötab API kaudu sĂ”lmede otsimiseks (tuleb seadistada serviceAccount Ă”igustega loend ja get, seejĂ€rel seadistage podid selle serviceAccount).

JGroups'i sÔlmede otsimise meetod seadistatakse keskkonnamuutujate mÀÀramise kaudu JGROUPS_DISCOVERY_PROTOCOL ja JGROUPS_DISCOVERY_PROPERTIES. Selle jaoks KUBE_PING peate valima podid, mÀÀrates namespace ja labels.

 Kui kasutate multicast'i ja kĂ€itate kaks vĂ”i enam Keycloaki klastri ĂŒhes Kubernetes'i klastris (nĂ€iteks ĂŒhes namespace'is tootmisse, teine — staging) — ĂŒhe Keycloaki klastri sĂ”lmed vĂ”ivad liituda teise klastri vĂ”rku. Kasutage kindlasti iga klastrite jaoks ainulaadset multicast-aadressi, seadistades muutujadjboss.default.multicast.address ja jboss.modcluster.multicast.address ĂŒhes JAVA_OPTS.

Replikatsioon andmekeskuste vahel

KĂ€ivitame Keycloaki HA-reĆŸiimis Kuberneteses

Side

Keycloak kasutab iga andmekeskuse jaoks eraldi Infinispan'i vahemÀlude klastreid, kus asuvad Keycloaki klastrid, mis koosnevad Keycloaki sÔlmedest. Kuid erinevate andmekeskuste Keycloaki sÔlmede vahel ei ole vahet.

Keycloaki sÔlmed kasutavad andmekeskustevaheliseks suhtlemiseks vÀlist Java Data Grid'i (Infinispan'i serverid). Suhtlemine toimub protokolli kaudu Infinispan HotRod.

Infinispan cache'id tuleb seadistada atribuudiga remoteStore, et andmed saaksid salvestuda kaug- (teises andmekeskuses, tÔlkija mÀrk.) cache'idesse. JDG serverite seas on eraldi Infinispan klastrid, seega andmed, mis salvestatakse JDG1-l aadressil site1 , replikeeritakse JDG2-l aadressil site2.

LĂ”puks teavitab JDG vastuvĂ”tuseerver oma klastris Keycloak servereid klientĂŒhenduste kaudu, mis on HotRod protokolli omadus. Keycloak sĂ”lmed site2 uuendavad oma Infinispan cache'id, ja konkreetne kasutaja sessioon on samuti kergesti kĂ€ttesaadav Keycloak sĂ”lmedes aadressil site2.

Teatud cache'ide puhul on samuti vÔimalik loobuda varukoopiatest ja tÀielikult andmete salvestamisest Infinispan serveri kaudu. Selleks tuleb eemaldada seade remote-store konkreetse Infinispan cache'i kohta (failis standalone-ha.xml), pÀrast mida teatud konkreetne replicated-cache lakkab samuti olemast vajalik Infinispan serveri poolel.

Cache'ide seadistamine

Keycloak'is on kaks tĂŒĂŒpi cache'e:

  • Kohalik. See asub andmebaasi kĂ”rval, et vĂ€hendada andmebaasi koormust ja vĂ€hendada vastuste viivitust. Sellises vahemĂ€lus hoitakse realm'i, kliente, rolle ja kasutajametadateid. See vahemĂ€lu ei replikeeru, isegi kui see on Keycloak'i klastris osa. Kui vahemĂ€lus muudetakse mĂ”nda kirjet, saadetakse teistele klastris olevatele serveritele teade muudatustest, mille jĂ€rel kiri vahemĂ€lust eemaldatakse. Vaata kirjeldust. töö edasi, et saada ĂŒksikasjalikumat teavet protseduuri kohta.

  • Replikeeritav. Töötab kasutajasessioonide, offline tokenite töötlemisega ja jĂ€lgib autendimise vigu, et tuvastada paroolifishingu ja muude rĂŒnnakute katsed. Neis vahemĂ€ludes hoitavad andmed on ajutised, hoiustatakse ainult mĂ€lus, kuid neid saab replikeerida klastri vahel.

Infinispan vahemÀlud

Sessioonid — mĂ”isted Keycloak'is, eraldi vahemĂ€lud, mida nimetatakse authenticationSessions, kasutatakse konkreetsete kasutajate andmete salvestamiseks. Nendest vahemĂ€llu salvestatud pĂ€ringud on tavaliselt vajalikud brauseritele ja Keycloaki serveritele, mitte rakendustele. Siin avaldub sĂ”ltuvus sticky sessions'ist, ning selliseid vahemĂ€lusid ei pea isegi Active-Active reĆŸiimis replitseerima.

Toimingute tokenid. JĂ€rjekordne kontseptsioon, mida tavaliselt kasutatakse erinevates stsenaariumides, nĂ€iteks kui kasutaja peab midagi asementeerima e-posti teel. NĂ€iteks parooli forget password vahemĂ€lu actionTokens kasutatakse seotud tokenite metainformatsiooni jĂ€lgimiseks — nĂ€iteks, kas token on juba kasutatud ja ei saa uuesti aktiveerida. Selline vahemĂ€lu peaks tavaliselt olema replitseeritav andmekeskuste vahel.

Andmete vahemĂ€llu salvestamine ja aegumine töötavad, et vĂ€hendada andmebaasi koormust. Selline vahemĂ€llu salvestamine parandab jĂ”udlust, kuid toob kaasa ilmselge probleemi. Kui ĂŒks Keycloaki server vĂ€rskendab andmeid, peavad teised serverid olema sellest teavitatud, et nad saaksid oma vahemĂ€lus andmeid ajakohastada. Keycloak kasutab kohalikku vahemĂ€lu realms, users ja autentimine andmete vahemĂ€llu salvestamiseks andmebaasist.

Lisaks on olemas eraldi vahemÀlu töö, mis replitseeritakse kÔigis andmekeskustes. See ei salvesta andmeid andmebaasist, vaid teenib sÔnumite saatmiseks andmete aegumise kohta klastrite sÔlmedele andmekeskuste vahel. TeisisÔnu, kui andmed uuendatakse, saadab Keycloak'i sÔlm sÔnumi oma andmekeskuse teistele sÔlmedele ning ka teiste andmekeskuste sÔlmedele. Sellise sÔnumi saamisel tegeleb iga sÔlm vastavate andmete puhastamisega oma kohalikes vahemÀludes.

Kasutajaseansid. VahemÀlud, mille nimed on sessions, clientSessions, offlineSessions ja offlineClientSessions, replitseeritakse tavaliselt andmekeskuste vahel ja neid kasutatakse kasutajate sessioonide andmete salvestamiseks, mis on aktiivsed kasutaja aktiivsuse ajal brauseris. Need vahemÀlud töötavad rakendusega, mis kÀsitleb lÔppkasutajatelt HTTP-pÀringuid, seega on need seotud sticky sessions'iga ja peavad olema andmekeskuste vahel replitseeritud.

Karmuse rĂŒnnaku kaitse. VahemĂ€lu loginFailures teenendab sisse logimise vigade andmete jĂ€lgimist, nĂ€iteks kui tihti kasutaja valesti parooli sisestas. Selle vahemĂ€lu replikatsioon on administraatori ĂŒlesanne. Kuid tĂ€pse arvestuse jaoks tasub aktiveerida replikatsioon andmekeskuste vahel. Teisest kĂŒljest, kui neid andmeid ei replitseerida, saab saavutada parema jĂ”udluse, ja kui see kĂŒsimus tĂ”statub, vĂ”ib replikatsiooni ka mitte aktiveerida.

Infinispani klastri seadistamisel tuleb lisada vahemÀlude mÀÀratlemised seadistusfaili:

Enne Keycloaki klastri kÀivitamist peab Infinispani klastrit seadistama ja kÀivitama.

SeejÀrel tuleb seadistada remoteStore Keycloak'i vahemÀlu jaoks. Selleks piisab skriptist, mis tehakse sarnaselt varasemale, mis kasutatakse muutuja seadistamiseks CACHE_OWNERS, tuleb see salvestada faili ja paigutada kataloogi /opt/jboss/startup-scripts:

Skripti sisu

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

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

echo ** Lisage kaugĂŒhenduse pordivĂ”imekuse infinispan serverisse **
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-cache:add(host=${remote.cache.host:localhost}, port=${remote.cache.port:11222})

echo ** Uuendage replikatsiooni-puhvri töö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 ** Uuendage jaotatud-puhvri sessioonide elementi **
/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 ** Uuendage jaotatud-puhvri offlineSessions elementi **
/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 ** Uuendage jaotatud-puhvri clientSessions elementi **
/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 ** Uuendage jaotatud-puhvri offlineClientSessions elementi **
/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 ** Uuendage jaotatud-puhvri loginFailures elementi **
/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 ** Uuendage jaotatud-puhvri actionTokens elementi **
/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 ** Uuendage jaotatud-puhvri authenticationSessions elementi **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=statistics-enabled,value=true)

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

run-batch
stop-embedded-server

Ärge unustage seadistada JAVA_OPTS HotRod'i tööks Keycloak'i sĂ”lmede jaoks: remote.cache.host, remote.cache.port ja teenuse nimi jboss.site.name.

Lingid ja tÀiendav dokumentatsioon

Artikkel on tĂ”lgitud ja ette valmistatud Habr'i töötajate poolt Slörmi koolituskeskus — intensiivkursused, videokursused ja ettevĂ”tete koolitus praktiseerivatelt spetsialistidelt (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster