
TL;DR: tuleb Keycloaki, avatud lĂ€htekoodiga juurdepÀÀsukontrolli sĂŒsteemi, kirjeldus, sisemise struktuuri analĂŒĂŒs, seadistamise ĂŒksikasjad.
Sissejuhatus ja pÔhikontseptsioonid
Selles artiklis vaatleme pÔhikontseptsioone, mida tuleb meeles pidada, kui kÀivitada Keycloaki klastri Kubernetes'e peal.
Kui soovite Keycloaki kohta rohkem teada, vaadake artikli lĂ”pus olevaid linke. Praktikas sĂŒgavamale sukeldumiseks saate uurida mooduliga, mis rakendab kĂ€esoleva artikli pĂ”hikontseptsioone (kĂ€ivitamise juhend on samuti seal, kĂ€esolevas artiklis vaadatakse ĂŒle struktuur ja seadistused, tĂ”lkija mĂ€rkus).
Keycloak on ulatuslik sĂŒsteem, mis on kirjutatud Java keeles ja mis töötab rakenduste serveri peal. LĂŒhidalt öeldes on see autoriseerimise raamistik, mis pakub rakenduse kasutajatele föderaalset isikut ja SSO (ĂŒhekordne sisselogimine) vĂ”imalust.
Kutsume teid lugema ametlikku vĂ”i ĂŒhtse arusaamise saamiseks.
Keycloaki kÀivitamine
Keycloaki jaoks on vaja kahte pidevalt hoitavat andmeallikat:
- Andmebaas, mida kasutatakse stabiilsete andmete hoidmiseks, nÀiteks kasutaja teabe
- Datagrid cache, mida kasutatakse andmete vahemĂ€llu salvestamiseks andmebaasist, samuti mĂ”nede lĂŒhiajaliste ja tihti muutuvate metaandmete, nĂ€iteks kasutajaseansside hoidmiseks. Rakendatakse , mis on tavaliselt andmebaasist oluliselt kiirem. Igatahes on Infinispanis hoitavad andmed ajutised ja neid ei pea klastrit kĂ€ivitades kuhugi salvestama.
Keycloak töötab neljas erinevas reĆŸiimis:
- Tavaliselt â ĂŒks ja ainus protsess, seadistatakse faili kaudu standalone.xml
- Tavaline klaster (kĂ”rge kĂ€ttesaadavuse variant) â kĂ”ik protsessid peavad kasutama sama konfiguratsiooni, mis tuleb kĂ€sitsi sĂŒnkroonida. Seaded salvestatakse faili standalone-ha.xml, lisaks tuleb organiseerida andmebaasi ja koormuse tasakaalustaja ĂŒhine juurdepÀÀs.
- Domeeniklaster â klastrite kĂ€itamine tavalises reĆŸiimis muutub kiirelt rutiinseks ja igavaks klastrite kasvamisel, kuna iga kord, kui konfiguratsiooni muudetakse, tuleb kĂ”ik muudatused teha igas klastrisĂ”lmes. DomeenireĆŸiim lahendab selle probleemi, seadistades mingi ĂŒhise salvestusruumi ja konfiguratsiooni avaldamise. Need seaded salvestatakse faili domain.xml
- Andmete replikatsioon andmekeskuste vahel â juhul, kui soovite kĂ€ivitada Keycloak'i mitme andmekeskuse klastris, mis on sageli geograafiliselt erinevates kohtades. Sel juhul on igal andmekeskusel oma Keycloak serverite klaster.
Selles artiklis vaatame ĂŒksikasjalikult teist varianti, st tavaline klaster, samuti kĂ€sitleme pisut replikatsiooni teemat andmekeskuste vahel, kuna neid kahte varianti on mĂ”istlik kĂ€ivitada Kuberneteses. Ănneks ei ole Kuberneteses probleemi mitme Keycloak podi (sĂ”lme) konfigureerimise sĂŒnkroniseerimisega, nii et domeeniklaster on ĂŒsna lihtne ĂŒles seada.
Palun pöörake tĂ€helepanu, et sĂ”na klaster kasutatakse kogu artikli vĂ€ltel ainult Keycloak'i sĂ”lmede rĂŒhma tĂ€histamiseks, mis töötavad koos, ei ole vaja viidata Kubernetes klastrile.
Tavaline Keycloak klaster
Keycloak'i kĂ€ivitamiseks sellises reĆŸiimis on vajalik:
- konfigureerida vÀline jagatud andmebaas
- paigaldada koormuse tasakaalustaja
- omada sisevÔrku, mis toetab IP multicast'i
VĂ€limise andmebaasi seadistamise ĂŒle me ei arutle, kuna see ei ole selle artikli eesmĂ€rk. Eeldame, et kuskil on töötav andmebaas - ja meil on sellele ĂŒhendpunkt. Lihtsalt lisame need andmed keskkonnamuutujatesse.
Keycloak'i toimimise paremaks mÔistmiseks talitluspidevuses (HA) klastris on oluline teada, kui palju see kÔik sÔltub Wildfly klastritehnoloogiate vÔimetest.
Wildfly rakendab mitmeid alam-sĂŒsteeme, millest osa kasutatakse koormuse tasakaalustajana, osa aga talitluspidevuse tagamiseks. Koormuse tasakaalustaja tagab rakenduse kĂ€ttesaadavuse klastrisĂ”lme ĂŒlekoormuse korral, samas kui talitluspidevus tagab rakenduse kĂ€ttesaadavuse isegi klastrisĂ”lmede osa tĂ”rke korral. MĂ”ned neist alam-sĂŒsteemidest:
mod_cluster: töötab koos Apache'iga HTTP koormuse tasakaalustajana, sĂ”ltub vaikimisi TCP multicast'ist sĂ”lmede leidmiseks. Seda saab asendada vĂ€limise koormuse tasakaalustajaga.infinispan: jaotatud vahemĂ€lu, mis kasutab transporttasandina JGroups'i kanaleid. TĂ€iendavalt vĂ”ib see kasutada HotRod protokolli suhtlemiseks vĂ€lise Infinispan klastriga vahemĂ€lu sisu sĂŒnkroniseerimiseks.jgroups: pakub grupi suhtluse tuge kĂ”rge kĂ€ttesaadavuse teenustele, mis pĂ”hinevad JGroups kanalitel. Nimetatud kanalid vĂ”imaldavad rakenduse eksemplaridel klastris liituda rĂŒhmadesse, nii et suhtlus omab selliseid omadusi nagu usaldusvÀÀrsus, jĂ€rjekindlus ja tĂ”rke suhtes tundlikkus.
Laotekur
Kubernetes klastris ingress kontrollerina laotekuri seadistamisel on oluline meeles pidada jÀrgmisi asju:
Keycloak'i töö eeldab, et kauge kliendi adresseerimine, mis ĂŒhendub autentimisserveriga HTTP kaudu, on kliendi arvuti reaalse IP-aadressiga. Laotekuri ja ingressi seadistused peavad Ă”igesti seadma HTTP pĂ€iseid X-Forwarded-For ja X-Forwarded-Proto, samuti sĂ€ilitama algse pĂ€ise HOST. Viimane versioon ingress-nginx (> 0.22.0)
Lipufunktsiooni aktiveerimine proxy-address-forwarding keskkonnamuutuja seadistamise kaudu PROXY_ADDRESS_FORWARDING ja true annab Keycloakâile mĂ”ista, et ta töötab proxy taga.
Samuti tuleb lubada sticky sessions ingressis. Keycloak rakendab Infinispan'i jaotatud vahemĂ€lu, et sĂ€ilitada autentimise ja kasutaja sessiooniga seotud andmeid. VahemĂ€lud töötavad vaikimisi ĂŒhe omanikuga, teisisĂ”nu salvestatakse see konkreetne sessioon mĂ”nesse klastris asuvasse sĂ”lme ning teised sĂ”lmed peavad seda pÀÀsema kaugelt, kui neil on vaja sellele sessioonile juurde pÀÀseda.
Meil ei Ă”nnestunud dokumentatsioonile vaatamata seansi kinnitamine kĂŒpsise nimega
AUTH_SESSION_ID. Keycloak sisenes edasisse suunamisse, seega soovitame valida teise kĂŒpsise nime tuntud sessiooni jaoks.
Samuti kinnitab Keycloak selle sĂ”lme nime, mis esimesena vastas AUTH_SESSION_ID, ja kuna iga sĂ”lm kĂ”rge kĂ€ttesaadavuse variandis kasutab sama andmebaasi, peab igaĂŒhel neist erinev ja ainulaadne sĂ”lme identifikaator tehingute haldamiseks. Soovitav on mÀÀrata JAVA_OPTS parameetrid jboss.node.name ja jboss.tx.node.id iga sĂ”lme jaoks unikaalseks â nĂ€iteks vĂ”ib mÀÀrata podi nime. Kui mÀÀrate podi nime, siis Ă€rge unustage jbossâi muutujate 23 sĂŒmboli piiri, seega on parem kasutada StatefulSet'i, mitte Deployment'i.
Veel ĂŒks probleem â kui pod eemaldatakse vĂ”i taaskĂ€ivitatakse, lĂ€heb tema vahemĂ€lu kaduma. Arvesse vĂ”ttes seda, on soovitatav mÀÀrata vahemĂ€lu omanike arv kĂ”ikides vahemĂ€lu minimaalseteks kaheks, nii jÀÀb vahemĂ€lu koopia. Lahendus â kĂ€ivitada pod'i kĂ€ivitamisel, asetades selle katalooge /opt/jboss/startup-scripts konteineris:
skripti sisu
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
echo * Seadistades CACHE_OWNERS vÀÀrtuseks "${env.CACHE_OWNERS}" kÔikides cache-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-serverpÀrast seda seadistada keskkonnamuutuja vÀÀrtus CACHE_OWNERS vajalikuks.
Privaatne vÔrk, millel on ip multicasti tugi
Kui kasutate Weavenet'i CNI-na, töötab multicast kohe ja teie Keycloak sĂ”lmed nĂ€evad ĂŒksteist kohe, kui need on kĂ€ivitatud.
Kui teie Kubernetes kluster ei toeta ip multicasti, vÔite seadistada JGroups'i töötama teiste protokollidega sÔlmede otsimiseks.
Esimene variant on KUBE_DNS, mis kasutab headless teenust Keycloak'i sÔlmede leidmiseks, lihtsalt edastate JGroups'ile teenuse nime, mida kasutatakse sÔlmede leidmiseks.
Teine variant on KUBE_PING, mis töötab API-ga sÔlmede otsimiseks (peate seadistama serviceAccount Ôigustega loend ja get, seejÀrel seadistama podid selle jaoks serviceAccount).
JGroups'i sĂ”lmede otsimise meetod seadistatakse keskkonnamuutujate mÀÀramisega JGROUPS_DISCOVERY_PROTOCOL ja JGROUPS_DISCOVERY_PROPERTIES. Ăheks vĂ”imaluseks on see, et seda montaaĆŸ on eraldi osasse, mis on kirjutamiseks kergesti kĂ€tessĂ€adav, samas kui enda KUBE_PING peate valima podid, mÀÀrates namespace ja labels.
ïž Kui kasutate multicast'i ja kĂ€ivitate Kubernetesis rohkem kui ĂŒhte Keycloak klustrit (nĂ€iteks ĂŒhe nimevahetuses, teise â
production, teine âstaging) â ĂŒhe Keycloak klustri sĂ”lmed vĂ”ivad liituda teise klastriga. Kasutage kindlasti iga klustri jaoks erilist multicast aadressi, mÀÀratesjboss.default.multicast.addressjajboss.modcluster.multicast.addressjaJAVA_OPTS.
Andmete replikatsioon andmekeskuste vahel

Side
Keycloak kasutab erinevaid eraldi Infinispani vahemÀlu klustreid iga andmekauba jaoks, kus asuvad Keycloak klastrid, mis koosnevad Keycloak sÔlmedest. Kuid erinevusi Keycloak sÔlmede vahel erinevates andmekaubades ei ole.
Keycloak sÔlmed kasutavad vÀliseid Java Data Grid (Infinispan serverid) andmerikke keskuste vaheliseks suhtlemiseks. Suhtlus toimub protokolli kaudu .
Infinispan vahemÀlud peavad olema seadistatud atribuudi remoteStore, et andmed saaksid salvestuda kaugetesse (teises andmerikeskuses, tÔlkija mÀrkus) vahemÀludesse. JDG serverite seas on eraldi Infinispan klastrid, seega andmed, mis salvestatakse JDG1-l kohas site1 , replitakse JDG2-le kohas site2.
Ja lĂ”puks teavitab vastuvĂ”ttev server JDG oma klastrite Keycloak servereid kliendiĂŒhenduste kaudu, mis on HotRod protokolli eripĂ€ra. Keycloak sĂ”lmed site2 uuendavad oma Infinispan vahemĂ€lusid ja konkreetne kasutaja seanss on samuti saadaval Keycloak sĂ”lmedes site2.
MÔne vahemÀlu puhul on samuti vÔimalik mitte teha varukoopiaid ja tÀielikult loobuda andmete kirjutamisest Infinispan serveri kaudu. Selleks peab eemaldama seade remote-store konkreetsest Infinispan vahemÀlust (failis standalone-ha.xml), pÀrast mida mÔni konkreetne replicated-cache peatutakse vajaduselt Infinispan serveri poolel.
VahemÀlu seadistamine
Keycloak'is on kaks tĂŒĂŒpi vahemĂ€lusid:
Kohalik. See asub lĂ€hedal andmebaasile, vĂ€hendab andmebaasi koormust ja vĂ€hendab vastuse latentsust. Selle tĂŒĂŒpi vahemĂ€lus hoitakse realm'i, kliente, rolle ja kasutajate metateavet. Seda tĂŒĂŒpi vahemĂ€lu ei replitseerita, isegi kui see vahemĂ€lu on osa Keycloak klastrist. Kui vahemĂ€lus muudetakse mĂ”nda kirjet - teistele klastris olevatele serveritele saadetakse muudatusest teadet, pĂ€rast mida kirje eemaldatakse vahemĂ€lust. Vaata kirjeldust
workedasi, et saada detailse kirjelduse protsessist.Replitseeriv. Töötleb kasutaja seansse, offline token'id, samuti jĂ€lgib sisse logimise vigu, et tuvastada paroolifishingu ja muude rĂŒnnakute katseid. Neis vahemĂ€ludes hoitavad andmed on ajutised, hoitakse ainult RAM-is, kuid neid saab replitseerida klastris.
Infinispan vahemÀlud
Seansid â mĂ”isted Keycloak'is, eraldi vahemĂ€lud, mida nimetatakse authenticationSessions, kasutatakse konkreetsete kasutajate andmete hoidmiseks. Needelt vahemĂ€ludelt tulenevad pĂ€ringud on tavaliselt vajalikud brauserile ja Keycloak serveritele, mitte rakendustele. Siin ilmneb sĂ”ltuvus sticky sessions'ist ja selliseid vahemĂ€lusid ei pea replitseerima, isegi kui kasutatakse Active-Active reĆŸiimi.
Tegevusetokenid. JĂ€rgmine kontseptsioon, mida tavaliselt rakendatakse erinevates stsenaariumites, kus nĂ€iteks peab kasutaja midagi asĂŒnkroonselt e-posti teel tegema. NĂ€iteks protseduuri kĂ€igus unustasin parooli vahemĂ€lu actionTokens rakendatakse seotud tokenite metaandmete jĂ€lgimiseks â nĂ€iteks on token juba kasutatud ja ei saa uuesti aktiveerida. See vahemĂ€lu tĂŒĂŒp peab tavaliselt replitseerima andmeid andmekeskuste vahel.
VahemĂ€lestamine ja salvestatud andmete aegumine töötleb, et vĂ€hendada andmebaasi koormust. Selline vahemĂ€lu parandab jĂ”udlust, kuid toob kaasa ilmse probleemi. Kui ĂŒks Keycloak server vĂ€rskendab andmeid, peavad teised serverid sellest teavitama, et nad saaksid oma vahemĂ€lus andmed ajakohastada. Keycloak kasutab kohalikke vahemĂ€lusid realmide, users ja autoriseerimise andmete vahemĂ€lestamiseks andmebaasist.
Samuti on eraldi vahemÀlu work, mis replitseeritakse kÔigis andmekeskustes. See ei salvesta andmeid andmebaasist, vaid teenib sÔnumite edastamist andmete aegumiste kohta klastrite sÔlmedele andmekeskuste vahel. TeisisÔnu, niipea kui andmed uuendatakse, saadab Keycloak sÔlm sÔnumi teistele sÔlmedele oma andmekeskuses ja samuti teistele andmekeskuste sÔlmedele. PÀrast sellise sÔnumi saamist teostab iga sÔlm oma kohalikes vahemÀludes vastavate andmete puhastamise.
Kasutaja sessioonid. VahemÀlud nimega sessions, clientSessions, offlineSessions ja offlineClientSessions, replitseeritakse tavaliselt andmekeskuste vahel ja teenivad kasutajate seansside andmete salvestamist, mis on aktiivsed kasutaja tegevuse ajal brauseris. Need vahemÀlud töötavad rakendusega, mis kÀitleb lÔppkasutajatelt pÀringute HTTP, seega on need seotud sticky sessions'iga ja peavad replitseerima andmekeskuste vahel.
Brute force rĂŒnnakute kaitse. VahemĂ€lu loginFailures teenib sisenemise vigade andmete jĂ€lgimiseks, nĂ€iteks kui mitu korda kasutaja sisestas vale parooli. Selle vahemĂ€lu replitseerimine on administraatori ĂŒlesanne. Kuid tĂ€pse arvestuse saamiseks tasub aktiveerida replitseerimine andmekeskuste vahel. Teiselt poolt vĂ”ib, kui neid andmeid ei replitseerida, parandada jĂ”udlust ja kui see kĂŒsimus tĂ”usetub â replitseerimist ei pea aktiveerima.
Infinispan klastri seadistamisel tuleb lisada vahemÀlu mÀÀratlemine seadistuste faili:
Infinispan klastrit tuleb seadistada ja kÀivitada enne Keycloaki klastrit.
SeejÀrel tuleb seadistada remoteStore Keycloaki vahemikke. Selleks piisab skriptist, mis on loodud analoogselt eelnevale, mida kasutatakse muutuja seadistamiseks CACHE_OWNERS, see tuleb 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 allĂŒksust ***
/subsystem=infinispan/cache-container=keycloak:write-attribute(name=module, value=org.keycloak.keycloak-model-infinispan)
echo ** Lisage kaug-soketi sidumine 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 replikatsioon-cache tööelementi **
/subsystem=infinispan/cache-container=keycloak/repaired-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/repaired-cache=work:write-attribute(name=statistics-enabled,value=true)
echo ** Uuendage jaotatud-cache 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-cache 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-cache 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-cache 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-cache 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-cache 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-cache authenticationSessions elementi **
/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions:write-attribute(name=statistics-enabled,value=true)
echo *** Uuendage undertow allĂŒksust ***
/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 Keycloak sĂ”lmedele HotRod'i töötamiseks: remote.cache.host, remote.cache.port ja teenuse nimi jboss.site.name.
Lingid ja tÀiendav dokumentatsioon
Artikkel on tĂ”lgitud ja koostatud Habra töötajate poolt â intensiivkursused, videokursused ja ettevĂ”tete koolitus praktikute poolt (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)
Allikas: habr.com
