Pagdalagan ang Keycloak sa HA mode sa Kubernetes

Pagdalagan ang Keycloak sa HA mode sa Kubernetes

TL; DR: adunay usa ka paghulagway sa Keycloak, usa ka open source access control system, pagtuki sa internal nga gambalay, mga detalye sa configuration.

Pasiuna ug Pangunang mga Ideya

Niini nga artikulo, atong makita ang mga batakang ideya nga hinumdoman kung mag-deploy ug Keycloak cluster sa ibabaw sa Kubernetes.

Kung gusto nimo mahibal-an ang dugang bahin sa Keycloak, tan-awa ang mga link sa katapusan sa artikulo. Aron mahimong mas naunlod sa praktis, mahimo kang magtuon among tipiganan nga adunay usa ka module nga nagpatuman sa mga nag-unang ideya sa kini nga artikulo (ang giya sa paglansad naa, kini nga artikulo maghatag usa ka kinatibuk-ang panan-aw sa aparato ug mga setting, gibanabana. tighubad).

Ang Keycloak usa ka komprehensibo nga sistema nga gisulat sa Java ug gitukod sa ibabaw sa usa ka server sa aplikasyon Langaw nga ihalas. Sa laktud, kini usa ka balangkas alang sa pagtugot nga naghatag sa mga tiggamit sa aplikasyon nga federation ug SSO (single sign-on) nga mga kapabilidad.

Gidapit ka namo sa pagbasa sa opisyal website o Wikipedia para sa detalyado nga pagsabot.

Paglansad sa Keycloak

Ang Keycloak nanginahanglan duha ka padayon nga mga gigikanan sa datos aron modagan:

  • Usa ka database nga gigamit sa pagtipig sa natukod nga datos, sama sa impormasyon sa tiggamit
  • Datagrid cache, nga gigamit sa pag-cache sa datos gikan sa database, ingon man sa pagtipig sa pipila ka mubo nga kinabuhi ug kanunay nga pagbag-o sa metadata, sama sa mga sesyon sa tiggamit. Gipatuman Infinispan, nga kasagaran mas paspas kay sa database. Apan sa bisan unsang kaso, ang datos nga na-save sa Infinispan ephemeral - ug dili kinahanglan nga i-save bisan asa kung ang cluster gi-restart.

Ang Keycloak naglihok sa upat ka lainlaing mga mode:

  • ordinaryo nga - usa ug usa ra ka proseso, gi-configure pinaagi sa usa ka file standalone.xml
  • Regular nga cluster (taas nga kapilian nga magamit) - ang tanan nga mga proseso kinahanglan mogamit sa parehas nga pag-configure, nga kinahanglan nga i-synchronize nga mano-mano. Ang mga setting gitipigan sa usa ka file standalone-ha.xml, dugang pa kinahanglan nimo nga maghimo gipaambit nga pag-access sa database ug usa ka balanse sa pagkarga.
  • Domain cluster β€” Ang pagsugod sa usa ka cluster sa normal nga mode dali nga nahimong usa ka rutina ug makalaay nga buluhaton samtang ang cluster motubo, tungod kay sa matag higayon nga ang configuration mausab, ang tanan nga mga kausaban kinahanglan nga himoon sa matag cluster node. Ang mode sa domain sa operasyon nagsulbad niini nga isyu pinaagi sa pag-set up sa pipila nga gipaambit nga lokasyon sa pagtipig ug pagmantala sa configuration. Kini nga mga setting gitipigan sa file domain.xml
  • Replikasyon tali sa mga sentro sa datos β€” kung gusto nimong ipadagan ang Keycloak sa usa ka pungpong sa daghang mga sentro sa datos, kasagaran sa lainlaing mga lokasyon sa heyograpiya. Niini nga opsyon, ang matag data center adunay kaugalingong cluster sa Keycloak servers.

Niini nga artikulo atong hisgotan sa detalye ang ikaduha nga kapilian, kana regular nga cluster, ug mohikap usab kami gamay bahin sa hilisgutan sa pagkopya tali sa mga sentro sa datos, tungod kay makatarunganon ang pagpadagan niining duha nga kapilian sa Kubernetes. Maayo na lang, sa Kubernetes wala’y problema sa pag-synchronize sa mga setting sa daghang mga pods (Keycloak nodes), busa domain cluster Dili kini lisud buhaton.

Palihug timan-i usab nga ang pulong kumpol kay ang nahabilin nga artikulo magamit ra sa usa ka grupo sa mga Keycloak node nga nagtinabangay, wala’y kinahanglan nga magtumong sa usa ka cluster sa Kubernetes.

Regular nga Keycloak cluster

Aron modagan ang Keycloak niini nga mode kinahanglan nimo:

  • i-configure ang external shared database
  • i-install ang load balancer
  • adunay internal nga network nga adunay suporta sa IP multicast

Dili namo hisgutan ang pag-set up ug external database, tungod kay dili kini ang katuyoan niini nga artikulo. Ibutang nato nga adunay nagtrabaho nga database sa usa ka dapit - ug kita adunay koneksyon nga punto niini. Idugang ra namon kini nga datos sa mga variable sa palibot.

Aron mas masabtan kung giunsa paglihok ang Keycloak sa usa ka failover (HA) nga cluster, importante nga mahibal-an kung unsa kini nagdepende sa mga kapabilidad sa clustering ni Wildfly.

Ang Wildfly naggamit ug daghang mga subsystem, ang uban niini gigamit isip load balancer, ang uban para sa fault tolerance. Ang load balancer nagsiguro nga magamit ang aplikasyon kung ang usa ka cluster node na-overload, ug ang pagtugot sa sayup nagsiguro nga magamit ang aplikasyon bisan kung ang pipila ka mga cluster node mapakyas. Pipila niini nga mga subsystem:

  • mod_cluster: Naglihok uban sa Apache isip HTTP load balancer, nagdepende sa TCP multicast aron makit-an ang mga host pinaagi sa default. Mahimong pulihan sa usa ka external balancer.

  • infinispan: Usa ka gipang-apod-apod nga cache gamit ang JGroups channels isip transport layer. Dugang pa, kini makagamit sa HotRod protocol aron makigkomunikar sa usa ka eksternal nga Infinispan cluster aron i-synchronize ang mga sulod sa cache.

  • jgroups: Naghatag suporta sa komunikasyon sa grupo alang sa mga serbisyo nga magamit kaayo base sa mga channel sa JGroups. Ang ginganlan nga mga tubo nagtugot sa mga higayon sa aplikasyon sa usa ka kumpol nga makonektar ngadto sa mga grupo aron ang komunikasyon adunay mga kabtangan sama sa pagkakasaligan, kahapsay, ug pagkasensitibo sa mga kapakyasan.

Load Balancer

Kung mag-install og balancer isip ingress controller sa Kubernetes cluster, importante nga ibutang sa hunahuna ang mosunod nga mga butang:

Ang Keycloak nagtuo nga ang hilit nga adres sa kliyente nga nagkonektar pinaagi sa HTTP sa server sa pag-authenticate mao ang tinuod nga IP address sa kompyuter sa kliyente. Ang mga setting sa balanse ug ingress kinahanglan nga magbutang sa husto nga mga header sa HTTP X-Forwarded-For ΠΈ X-Forwarded-Proto, ug i-save usab ang orihinal nga titulo HOST. Pinakabag-o nga bersyon ingress-nginx (>0.22.0) gi-disable kini pinaagi sa default

Pag-aktibo sa bandila proxy-address-forwarding pinaagi sa pagbutang ug environment variable PROXY_ADDRESS_FORWARDING Π² true naghatag sa Keycloak sa pagsabot nga kini nagtrabaho luyo sa usa ka proxy.

Kinahanglan usab nimo nga palihokon sticky nga mga sesyon sa pagsulod. Ang Keycloak naggamit sa usa ka gipang-apod-apod nga Infinispan cache aron tipigan ang mga datos nga may kalabutan sa kasamtangan nga sesyon sa pag-authenticate ug sesyon sa user. Ang mga cache naglihok sa usa ka tag-iya pinaagi sa default, sa ato pa, kana nga partikular nga sesyon gitipigan sa pila ka node sa cluster, ug ang ubang mga node kinahanglan nga mangutana niini sa layo kung kinahanglan nila ang pag-access sa kana nga sesyon.

Sa piho, sukwahi sa dokumentasyon, ang paglakip sa usa ka sesyon nga adunay ngalan nga cookie wala molihok alang kanamo AUTH_SESSION_ID. Ang Keycloak adunay redirect loop, mao nga among girekomendar ang pagpili og lain nga ngalan sa cookie alang sa sticky session.

Gilakip usab sa Keycloak ang ngalan sa node nga una nga mitubag AUTH_SESSION_ID, ug tungod kay ang matag node sa labing magamit nga bersyon naggamit sa parehas nga database, ang matag usa kanila kinahanglan adunay usa ka bulag ug talagsaon nga node identifier alang sa pagdumala sa mga transaksyon. Kini girekomendar nga ibutang sa JAVA_OPTS mga parameter jboss.node.name ΠΈ jboss.tx.node.id talagsaon alang sa matag node - mahimo nimo, pananglitan, ibutang ang ngalan sa pod. Kung magbutang ka ug ngalan pod, ayaw kalimti ang 23 ka limitasyon sa karakter alang sa mga variable sa jboss, mao nga mas maayo nga mogamit usa ka StatefulSet kaysa usa ka Deployment.

Laing rake - kung ang pod matangtang o ma-restart, ang cache niini mawala. Sa pagkonsiderar niini, angay nga ibutang ang gidaghanon sa mga tag-iya sa cache alang sa tanan nga mga cache sa labing menos duha, aron ang usa ka kopya sa cache magpabilin. Ang solusyon mao ang pagdagan script para sa Wildfly sa pagsugod sa pod, ibutang kini sa direktoryo /opt/jboss/startup-scripts sa sudlanan:

Mga sulud sa script

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

unya ibutang ang bili sa environment variable CACHE_OWNERS sa gikinahanglan.

Pribado nga network nga adunay suporta sa IP multicast

Kung imong gigamit ang Weavenet isip CNI, ang multicast molihok dayon - ug ang imong Keycloak node magkita sa usag usa sa diha nga kini gilansad.

Kung wala kay suporta sa ip multicast sa imong Kubernetes cluster, mahimo nimong i-configure ang JGroups aron magtrabaho uban ang ubang mga protocol aron makit-an ang mga node.

Ang una nga kapilian mao ang paggamit KUBE_DNSnga gigamit headless service aron makit-an ang Keycloak nodes, ipasa lang nimo sa JGroups ang ngalan sa serbisyo nga gamiton sa pagpangita sa mga node.

Ang laing kapilian mao ang paggamit sa pamaagi KUBE_PING, nga nagtrabaho uban sa API sa pagpangita sa mga node (kinahanglan nimo nga i-configure serviceAccount nga adunay mga katungod list ΠΈ get, ug dayon i-configure ang mga pod aron magtrabaho niini serviceAccount).

Ang paagi sa pagpangita sa mga node sa JGroups gi-configure pinaagi sa pag-set sa mga variable sa palibot JGROUPS_DISCOVERY_PROTOCOL ΠΈ JGROUPS_DISCOVERY_PROPERTIES. Alang KUBE_PING kinahanglan ka nga mopili pod pinaagi sa pagpangutana namespace ΠΈ labels.

️ Kung mogamit ka og multicast ug magpadagan og duha o daghan pang Keycloak clusters sa usa ka Kubernetes cluster (ingnon ta usa sa namespace production, ang ikaduha - staging) - ang mga node sa usa ka Keycloak cluster mahimong moapil sa laing cluster. Siguruha nga mogamit usa ka talagsaon nga multicast nga adres alang sa matag cluster pinaagi sa pagtakda sa mga variablejboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

Replikasyon tali sa mga sentro sa datos

Pagdalagan ang Keycloak sa HA mode sa Kubernetes

Pagkonekta

Ang Keycloak naggamit ug daghang bulag nga Infinispan cache clusters alang sa matag data center diin nahimutang ang Keycloack clusters nga gilangkoban sa Keycloak nodes. Apan walay kalainan tali sa Keycloak nodes sa lain-laing mga data centers.

Ang mga keycloak node naggamit ug external nga Java Data Grid (Infinispan servers) para sa komunikasyon tali sa mga data center. Ang komunikasyon naglihok sumala sa protocol Infinispan HotRod.

Ang mga cache sa Infinispan kinahanglan nga ma-configure sa hiyas remoteStore, aron ang datos matipigan sa layo (sa laing data center, gibanabana. tighubad) mga cache. Adunay bulag nga infinispan clusters taliwala sa mga server sa JDG, aron ang datos nga gitipigan sa JDG1 sa site site1 i-replicate sa JDG2 sa site site2.

Ug sa katapusan, ang nakadawat nga JDG server nagpahibalo sa Keycloak server sa cluster niini pinaagi sa mga koneksyon sa kliyente, nga usa ka bahin sa HotRod protocol. Naka-on ang mga node sa keycloak site2 i-update ang ilang Infinispan caches ug ang piho nga sesyon sa user magamit usab sa Keycloak nodes sa site2.

Alang sa pipila ka mga cache, posible usab nga dili maghimo og mga backup ug likayan ang pagsulat sa datos pinaagi sa Infinispan server sa hingpit. Aron mahimo kini kinahanglan nimo nga tangtangon ang setting remote-store piho nga Infinispan cache (sa file standalone-ha.xml), human niana pipila ka espesipiko replicated-cache dili na usab kinahanglan sa Infinispan server side.

Pag-set up sa mga cache

Adunay duha ka matang sa mga cache sa Keycloak:

  • Lokal. Kini nahimutang tapad sa database ug nagsilbi sa pagpakunhod sa load sa database, ingon man sa pagpakunhod sa tubag latency. Kini nga matang sa cache nagtipig sa gingharian, mga kliyente, mga tahas, ug metadata sa tiggamit. Kini nga matang sa cache dili gisundog, bisan kung ang cache kabahin sa usa ka Keycloak cluster. Kung ang usa ka entry sa cache mausab, usa ka mensahe bahin sa pagbag-o ipadala sa nahabilin nga mga server sa cluster, pagkahuman ang entry wala iapil sa cache. Tan-awa ang deskripsyon work Tan-awa sa ubos alang sa mas detalyado nga paghulagway sa pamaagi.

  • Gisubli. Nagproseso sa mga sesyon sa tiggamit, mga token sa offline, ug nag-monitor usab sa mga sayup sa pag-login aron mahibal-an ang mga pagsulay sa phishing sa password ug uban pang mga pag-atake. Ang mga datos nga gitipigan sa kini nga mga cache temporaryo, gitipigan lamang sa RAM, apan mahimo nga kopyahon sa tibuuk nga cluster.

Mga cache sa Infinispan

Mga Sisyon - usa ka konsepto sa Keycloak, bulag nga mga cache nga gitawag authenticationSessions, gigamit sa pagtipig sa datos sa piho nga mga tiggamit. Ang mga hangyo gikan niini nga mga cache kasagaran gikinahanglan sa browser ug Keycloak server, dili sa mga aplikasyon. Dinhi diin ang pagsalig sa mga sticky session moabut, ug ang ingon nga mga cache mismo dili kinahanglan nga kopyahon, bisan sa kaso sa Active-Active mode.

Mga Token sa Aksyon. Laing konsepto, kasagaran gigamit alang sa lainlaing mga senaryo kung, pananglitan, ang tiggamit kinahanglan nga maghimo usa ka butang nga asynchronously pinaagi sa koreo. Pananglitan, sa panahon sa pamaagi forget password cache actionTokens gigamit sa pagsubay sa metadata sa mga kaubang token - pananglitan, ang usa ka token gigamit na ug dili na ma-activate pag-usab. Kini nga matang sa cache kasagaran kinahanglan nga kopyahon tali sa mga sentro sa datos.

Pag-cache ug pagkatigulang sa gitipigan nga datos nagtrabaho sa paghupay sa load sa database. Kini nga matang sa caching nagpauswag sa pasundayag, apan nagdugang usa ka klaro nga problema. Kung ang usa ka server sa Keycloak nag-update sa datos, ang ubang mga server kinahanglan nga ipahibalo aron ma-update nila ang datos sa ilang mga cache. Ang Keycloak naggamit sa mga lokal nga cache realms, users ΠΈ authorization alang sa pag-cache sa datos gikan sa database.

Adunay usab usa ka bulag nga cache work, nga gisundog sa tanang mga sentro sa datos. Kini mismo wala magtipig bisan unsang datos gikan sa database, apan nagsilbi nga magpadala mga mensahe bahin sa pagkatigulang sa datos sa mga cluster node taliwala sa mga sentro sa datos. Sa laing pagkasulti, sa diha nga ang data ma-update, ang Keycloak node magpadala ug mensahe ngadto sa ubang mga node sa iyang data center, ingon man usab sa mga node sa ubang mga data center. Human makadawat sa ingon nga mensahe, ang matag node magwagtang sa katugbang nga datos sa mga lokal nga cache niini.

Mga sesyon sa tiggamit. Mga cache nga adunay mga ngalan sessions, clientSessions, offlineSessions ΠΈ offlineClientSessions, kasagarang gikopya tali sa mga sentro sa datos ug nagsilbi sa pagtipig sa datos mahitungod sa mga sesyon sa tiggamit nga aktibo samtang ang tiggamit aktibo sa browser. Kini nga mga cache nagtrabaho kauban ang aplikasyon nga nagproseso sa mga hangyo sa HTTP gikan sa mga end user, mao nga kini adunay kalabotan sa mga sticky session ug kinahanglan nga kopyahon tali sa mga sentro sa datos.

Proteksyon sa brute force. Cache loginFailures Gigamit sa pagsubay sa data sa sayop sa pag-login, sama sa kapila nga gisulod sa usa ka user ang sayop nga password. Ang pagkopya niini nga cache mao ang responsibilidad sa tagdumala. Apan alang sa usa ka tukma nga kalkulasyon, kini mao ang bili sa pagpaaktibo replikasyon tali sa mga sentro sa data. Apan sa laing bahin, kung dili nimo kopyahon kini nga datos, mapauswag nimo ang pasundayag, ug kung kini nga isyu motungha, ang pagkopya mahimong dili ma-aktibo.

Kung nag-roll out sa usa ka cluster sa Infinispan, kinahanglan nimo nga idugang ang mga kahulugan sa cache sa file sa mga setting:

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

Kinahanglan nimo nga i-configure ug sugdan ang Infinispan cluster sa dili pa magsugod ang Keycloak cluster

Unya kinahanglan nimo nga i-configure remoteStore alang sa Keycloak caches. Aron mahimo kini, igo na ang usa ka script, nga gihimo parehas sa nauna, nga gigamit aron itakda ang variable CACHE_OWNERS, kinahanglan nimo nga i-save kini sa usa ka file ug ibutang kini sa usa ka direktoryo /opt/jboss/startup-scripts:

Mga sulud sa script

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

Ayaw kalimot sa pag-instalar JAVA_OPTS alang sa Keycloak nodes nga modagan sa HotRod: remote.cache.host, remote.cache.port ug ngalan sa serbisyo jboss.site.name.

Mga link ug dugang nga dokumentasyon

Ang artikulo gihubad ug giandam alang sa Habr sa mga empleyado Slurm training center - intensive nga mga kurso, video course ug corporate training gikan sa mga practicing specialist (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

Source: www.habr.com

Idugang sa usa ka comment