E whakahaere ana i te Karaka Kī i te aratau HA i runga i nga Kubernetes

E whakahaere ana i te Karaka Kī i te aratau HA i runga i nga Kubernetes

TL; DR: ka puta he whakaahuatanga mo Keycloak, he punaha whakahaere urunga puna tuwhera, he tātaritanga o te hanganga o roto, nga taipitopito whirihoranga.

Kupu Whakataki me nga Whakaaro Matua

I roto i tenei tuhinga, ka kite tatou i nga whakaaro taketake hei maumahara i te wa e tuku ana i te kahui Keycloak ki runga ake o Kubernetes.

Mena kei te pirangi koe ki te mohio atu mo Keycloak, tirohia nga hononga kei te mutunga o te tuhinga. Kia kaha ake ai to ruku ki nga mahi, ka taea e koe te ako to tatou putunga me tetahi kōwae e whakatinana ana i nga whakaaro matua o tenei tuhinga (kei kona te aratohu whakarewanga, ma tenei tuhinga e whakaatu he tirohanga mo te taputapu me nga tautuhinga, āhua. kaiwhakamaori).

Ko Keycloak he punaha matawhānui i tuhia ki Java ka hangaia ki runga ake o te tūmau tono Remu mohoao. I roto i te poto, he anga mo te whakamanatanga e hoatu ana ki nga kaiwhakamahi tono te whakakotahitanga me te SSO (te haina-kotahi) kaha.

Ka tono matou kia panui koe i te mana paetukutuku ranei Wikipedia mo te whakamaramatanga taipitopito.

Whakarewa Keycloak

Ka hiahia a Keycloak kia rua nga puna raraunga tohe kia rere:

  • He pātengi raraunga e whakamahia ana ki te penapena i nga raraunga kua whakaritea, penei i nga korero a nga kaiwhakamahi
  • Te keteroki Datagrid, e whakamahia ana ki te keteroki raraunga mai i te paataka raraunga, me te penapena i etahi metadata poto me te huri auau, penei i nga waahi kaiwhakamahi. Kua whakatinanahia Infinispan, i te nuinga o te waa ka tino tere ake i te paataka raraunga. Engari ahakoa he aha, ko nga raraunga kua tiakina ki Infinispan he ephemeral - kaore e tika kia tiakina ki hea ka timata ano te tautau.

Ka mahi a Keycloak i roto i nga momo rereke e wha:

  • noa - kotahi anake te tukanga, i whirihorahia ma te konae takitahi.xml
  • Rōpū auau (he kōwhiringa wātea teitei) - me whakamahi ngā tukanga katoa kia rite te whirihoranga, me tukutahi ā-ringa. Ka penapenahia nga tautuhinga ki tetahi konae motuhake-ha.xml, i tua atu me uru atu koe ki te paataka raraunga me te taurite kawenga.
  • Rōpū rohe — Ko te timata i te kapoi i roto i te aratau noa ka noho hei mahi maataki me te hoha i te wa e tipu ana te tautau, na te mea i nga wa katoa ka huri te whirihoranga, me mahi nga huringa katoa ki ia node tautau. Ka whakatauhia e te aratau rohe tenei take ma te whakarite i etahi waahi rokiroki tiritahi me te whakaputa i te whirihoranga. Ka penapenahia enei tautuhinga ki te konae rohe.xml
  • Te tukurua i waenga i nga pokapū raraunga — ki te hiahia koe ki te whakahaere i te Keycloak i roto i te kahui o nga pokapū raraunga maha, i te nuinga o nga wa kei nga waahi matawhenua rereke. I tenei kowhiringa, kei ia pokapū raraunga tana ake kahui o nga tūmau Keycloak.

I roto i tenei tuhinga ka whakaarohia e maatau te waahanga tuarua, ara tautau auau, a ka pa atu ano matou ki te kaupapa o te tukuruatanga i waenga i nga pokapū raraunga, na te mea he mea tika ki te whakahaere i enei waahanga e rua ki Kubernetes. Waimarie, i roto i nga Kubernetes karekau he raru ki te tukutahi i nga whakatakotoranga o nga pona maha (Keycloak nodes), no reira. huinga rohe E kore e tino uaua ki te mahi.

Kia mahara hoki ko te kupu tautau mo te toenga o te tuhinga ka pa anake ki te roopu o nga node Keycloak e mahi tahi ana, kaore he take ki te korero ki tetahi roopu Kubernetes.

Rōpū Kīpoki auau

Hei whakahaere Keycloak i tenei aratau ka hiahia koe:

  • whirihora i te papaaarangi tiritahi o waho
  • tāuta taurite kawenga
  • he whatunga o roto me te tautoko IP multicast

E kore matou e korero ki te whakatu i tetahi papaa raraunga o waho, na te mea ehara i te kaupapa o tenei tuhinga. Me whakaaro tatou kei reira tetahi putunga raraunga mahi i tetahi waahi - a he tohu hononga kei a maatau. Ka taapiri noa tenei raraunga ki nga taurangi taiao.

Kia pai ake te mohio ki te mahi a Keycloak i roto i te kahui failover (HA), he mea nui kia mohio koe he aha te nui o te whakawhirinaki ki nga kaha o Wildfly.

He maha nga punaha iti e whakamahia ana e Wildfly, ko etahi ka whakamahia hei taurite kawenga, etahi mo te aukati i te he. Ma te taurite kawenga e whakarite te waatea o te tono ina e taumaha ana te kopuku kahui, a ko te katakina o te he ka whakapumau i te waatea o te tono ahakoa ka rahua etahi pona kahui. Ko etahi o enei punaha iti:

  • mod_cluster: Ka mahi tahi me Apache hei taurite kawenga HTTP, ka whakawhirinaki ki te TCP multicast ki te kimi kaihautu ma te taunoa. Ka taea te whakakapi ki te taurite o waho.

  • infinispan: He keteroki tohatoha e whakamahi ana i nga hongere JGroups hei paparanga kawe. I tua atu, ka taea e ia te whakamahi i te kawa HotRod ki te whakawhitiwhiti korero me tetahi kahui Infinispan o waho ki te tukutahi i nga ihirangi keteroki.

  • jgroups: Ka whakarato i te tautoko korero a te roopu mo nga ratonga tino waatea i runga i nga hongere JGroups. Ko nga paipa kua whakaingoatia ka taea te hono i nga tauira tono i roto i te tautau ki roto i nga roopu kia whai hua ai te whakawhitiwhiti korero penei i te pono, te raupapa, me te aro ki nga rahunga.

Kaitaurite Uta

I te wa e whakauru ana i te taurite hei kaiwhakahaere whakauru ki roto i te roopu Kubernetes, he mea nui kia maumahara ki nga mea e whai ake nei:

Kei te whakaaro a Keycloak ko te wahitau mamao o te kiritaki e hono ana ma te HTTP ki te tūmau motuhēhēnga ko te wāhitau IP tūturu o te rorohiko kiritaki. Ko nga tautuhinga taurite me te whakaurunga me whakarite tika nga pane HTTP X-Forwarded-For и X-Forwarded-Proto, me te tiaki hoki i te taitara taketake HOST. Putanga hou ingress-nginx (>0.22.0) ka monohia tenei ma te taunoa

Whakahohe i te haki proxy-address-forwarding ma te whakatakoto i te taurangi taiao PROXY_ADDRESS_FORWARDING в true homai ki a Keycloak te mohio kei te mahi i muri i te takawaenga.

Me whakahohe ano koe wā piri i te whakaurunga. Ka whakamahia e Keycloak he keteroki Infinispan kua tohatoha hei penapena raraunga e pa ana ki te waahi motuhēhēnga o nāianei me te wātū kaiwhakamahi. Ka mahi nga keteroki me te rangatira kotahi ma te taunoa, ara, ka penapenahia taua waahi ki runga i etahi node i roto i te kahui, a me patai atu etahi atu pona ki te hiahia uru atu ki taua waahi.

Inaa, he rereke ki nga tuhinga, ko te taapiri i tetahi huihuinga me te pihikete ingoa kaore i pai ki a maatau AUTH_SESSION_ID. Kei a Keycloak te kopikopiko, no reira ka tūtohu matou ki te whiriwhiri i tetahi ingoa pihikete rereke mo te waahi piri.

Ka piri hoki a Keycloak i te ingoa o te node i whakautu tuatahi AUTH_SESSION_ID, a, i te mea ka whakamahia e ia node i roto i te putanga tino watea ana te paataka raraunga kotahi, ko ia me whai he tautohu node motuhake me te ahurei mo te whakahaere i nga whakawhitinga. E taunaki ana kia whakauruhia ki roto JAVA_OPTS tawhā jboss.node.name и jboss.tx.node.id ahurei mo ia node - ka taea e koe, hei tauira, te whakauru i te ingoa o te pona. Mena ka hoatu e koe he ingoa pod, kaua e wareware ki te 23 te rohe o te ahua mo nga taurangi jboss, na he pai ake te whakamahi i te StatefulSet kaua i te Whakamahinga.

Ko tetahi atu rake - mena ka mukua, ka whakaara ano ranei te poti, ka ngaro tana keteroki. Ma te whai whakaaro ki tenei, he mea tika ki te whakarite i te maha o nga rangatira keteroki mo nga keteroki katoa kia rua neke atu, kia noho tonu he kape o te keteroki. Ko te otinga ko te oma tuhinga mo Wildfly i te wa e timata ana i te pona, tuu ki roto i te raarangi /opt/jboss/startup-scripts i roto i te ipu:

Ihirangi Hōtuhi

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

ka tautuhi i te uara o te taurangi taiao CACHE_OWNERS ki te mea e hiahiatia ana.

Whatunga tūmataiti me te tautoko IP multicast

Ki te whakamahi koe i a Weavenet hei CNI, ka mahi tonu te multicast - a ka kite mai o kohanga Keycloak tetahi ki tetahi ina whakarewahia.

Mena karekau he tautoko ip multicast i roto i to huinga Kubernetes, ka taea e koe te whirihora i a JGroups ki te mahi tahi me etahi atu kawa ki te kimi node.

Ko te kōwhiringa tuatahi ko te whakamahi KUBE_DNSe whakamahi ana headless service ki te kimi i nga node Keycloak, ka tukuna noa e koe a JGroups te ingoa o te ratonga ka whakamahia hei kimi i nga node.

Ko tetahi atu whiringa ko te whakamahi i te tikanga KUBE_PING, e mahi tahi ana me te API ki te rapu node (me whirihora e koe serviceAccount me nga tika list и get, ka whirihora i nga poti kia mahi me tenei serviceAccount).

Ko te huarahi e kitea ai e JGroups nga pona ka whirihorahia ma te tautuhi i nga taurangi taiao JGROUPS_DISCOVERY_PROTOCOL и JGROUPS_DISCOVERY_PROPERTIES. Hoki KUBE_PING Me whiriwhiri koe i nga putunga ma te patai namespace и labels.

️ Mēnā ka whakamahi koe i te multicast ka whakahaere e rua, neke atu rānei ngā kāhui Keycloak i roto i te kāhui Kubernetes kotahi (me kī kotahi i te mokowāingoa production, tuarua - staging) - ka uru mai nga pona o tetahi kahui Keycloak ki tetahi atu kahui. Kia mohio koe ki te whakamahi i tetahi wahitau tuku maha motuhake mo ia huinga ma te tautuhi i nga taurangijboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

Te tukurua i waenga i nga pokapū raraunga

E whakahaere ana i te Karaka Kī i te aratau HA i runga i nga Kubernetes

Hononga

Ka whakamahia e Keycloak etahi tautau keteroki Infinispan motuhake mo ia pokapū raraunga kei reira nga tautau Keycloack kei roto i nga kohinga Keycloak. Engari kaore he rereketanga i waenga i nga waahanga Keycloak i roto i nga pokapū raraunga rereke.

Ka whakamahia e nga node Keycloak tetahi Matiti Raraunga Java o waho (tumau Infinispan) mo te whakawhitiwhiti korero i waenga i nga pokapū raraunga. Ka mahi te whakawhitiwhiti i runga i te kawa Infinispan HotRod.

Me whirihora nga keteroki Infinispan me te huanga remoteStore, kia taea ai te penapena i nga raraunga i tawhiti (i tetahi atu pokapū raraunga, āhua. kaiwhakamaori) keteroki. He huinga infinispan motuhake i waenga i nga kaimau JDG, kia mau ai nga raraunga ki te JDG1 i runga i te waahi. site1 ka tukuna ki te JDG2 i runga i te waahi site2.

Ka mutu, ka whakamohio te tūmau JDG e whiwhi ana ki ngā tūmau Keycloak o tōna kāhui mā ngā hononga kiritaki, he āhuatanga o te kawa HotRod. Ka mau nga pona kuru matua site2 whakahou i o raatau keteroki Infinispan ka waatea ano te waahi kaiwhakamahi motuhake i runga i nga waahanga Keycloak kei runga site2.

Mo etahi keteroki, ka taea hoki te kore e hanga i nga taapiri me te karo i te tuhi raraunga ma te tūmau Infinispan katoa. Ki te mahi i tenei me tango e koe te tautuhinga remote-store keteroki Infinispan motuhake (kei te konae motuhake-ha.xml), i muri iho etahi motuhake replicated-cache ka kore ano e hiahiatia i runga i te taha tūmau Infinispan.

Te whakarite keteroki

E rua nga momo keteroki kei Keycloak:

  • rohe. Kei te taha o te putunga korero me te mahi ki te whakaiti i te kawenga i runga i te paataka, me te whakaiti i te roanga whakautu. Ko tenei momo keteroki e pupuri ana i te rangatiratanga, i nga kaihoko, i nga mahi, i nga metadata kaiwhakamahi. Ko tenei momo keteroki e kore e tukurua, ahakoa he wahanga te keteroki o te kahui Keycloak. Mena ka huri te urunga i roto i te keteroki, ka tukuna he karere mo te huringa ki nga toenga o nga kaitoro i roto i te roopu, ka mutu ka whakakorehia te urunga mai i te keteroki. Tirohia te whakaahuatanga work Tirohia i raro mo te whakamaarama taipitopito mo te tikanga.

  • Whakahokia. Ka tukatuka i nga waahi kaiwhakamahi, nga tohu tuimotu, me te aro turuki i nga hapa takiuru kia kitea nga nganatanga hītinihanga kupuhipa me etahi atu whakaeke. Ko nga raraunga kei roto i enei keteroki he wa poto, ka rongoa i roto i te RAM anake, engari ka taea te tukurua puta noa i te roopu.

Infinispan keteroki

Sesi - he ariā kei Keycloak, he keteroki motuhake e kiia ana authenticationSessions, ka whakamahia ki te rokiroki raraunga o nga kaiwhakamahi motuhake. Ko nga tono mai i enei keteroki e hiahiatia ana e te kaitirotiro me nga tūmau Keycloak, ehara i nga tono. Koinei te waahi ka uru mai te ti'aturi ki nga waahi piripono, a, ko enei keteroki e kore e tika kia mahia, ahakoa mo te aratau Active-Active.

Tohu Mahi. Ko tetahi atu ariā, ka whakamahia mo nga ahuatanga rereke, hei tauira, me mahi te kaiwhakamahi i tetahi mea ma te mēra. Hei tauira, i te wa o te tukanga forget password huna actionTokens whakamahia ki te whai i nga metadata o nga tohu e hono ana - hei tauira, kua whakamahia kētia he tohu kaore e taea te whakahohe ano. Ko tenei momo keteroki i te nuinga o te waa me whakahoki ano ki waenga i nga pokapū raraunga.

Keteroki me te koroheketanga o nga raraunga rongoa mahi ki te whakamama i te kawenga i runga i te pātengi raraunga. Ko tenei momo keteroki e pai ake ai te mahi, engari ka taapiri he raru kitea. Mena ka whakahōuhia e tetahi tūmau Keycloak nga raraunga, me whakamohiotia etahi atu tūmau kia taea ai te whakahou i nga raraunga i roto i o raatau keteroki. Ka whakamahia e Keycloak nga keteroki rohe realms, users и authorization mō te keteroki raraunga mai i te pātengi raraunga.

He keteroki motuhake ano work, ka tāruaruatia puta noa i ngā pokapū raraunga katoa. Kaore ano ia e penapena i nga raraunga mai i te paataka raraunga, engari ka tukuna he karere mo te koroheketanga o nga raraunga ki nga kohinga kohinga i waenga i nga pokapū raraunga. I etahi atu kupu, i te wa ka whakahouhia nga raraunga, ka tukuna e te Keycloak node he karere ki etahi atu pona i roto i tana pokapū raraunga, me nga pona kei etahi atu pokapū raraunga. Whai muri i te whiwhi karere penei, ka ūkuia e ia node nga raraunga e rite ana ki ona keteroki rohe.

Wātū Kaiwhakamahi. Keteroki whai ingoa sessions, clientSessions, offlineSessions и offlineClientSessions, Ko te nuinga o nga wa ka tukuna i waenga i nga pokapū raraunga me te mahi ki te rokiroki raraunga mo nga waahi kaiwhakamahi e kaha ana i te wa e kaha ana te kaiwhakamahi ki te tirotiro. Ka mahi tahi enei keteroki me te tukatuka tono tono HTTP mai i nga kaiwhakamahi mutunga, na reira e hono ana ki nga waahi piri me te whakahoki ano i waenga i nga pokapū raraunga.

Te whakamarumaru kaha nanakia. Keteroki loginFailures Ka whakamahia ki te whai i nga raraunga hapa takiuru, penei i te maha o nga wa i uru ai te kaiwhakamahi i tetahi kupuhipa hē. Ko te kape o tenei keteroki te kawenga a te kaiwhakahaere. Engari mo te tatau tika, he pai ki te whakahohe i te tukurua i waenga i nga pokapū raraunga. Engari i tetahi atu taha, ki te kore koe e tarai i enei raraunga, ka pai ake te mahi, a ki te puta mai tenei take, kaore pea e taea te mahi tukurua.

I te wa e huri ana i te kahui Infinispan, me taapiri koe i nga whakamaramatanga keteroki ki te konae tautuhinga:

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

Me whirihora me te timata i te roopu Infinispan i mua i te tiimata i te roopu Keycloak

Na ka hiahia koe ki te whirihora remoteStore mo nga keteroki Keycloak. Ki te mahi i tenei, he nui te tuhinga, he rite tonu te mahi ki te mea o mua, ka whakamahia hei tautuhi i te taurangi CACHE_OWNERS, me tiaki e koe ki tetahi konae ka maka ki roto i te whaiaronga /opt/jboss/startup-scripts:

Ihirangi Hōtuhi

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

Kaua e wareware ki te whakauru JAVA_OPTS mō ngā kōpuku Keycloak hei whakahaere HotRod: remote.cache.host, remote.cache.port me te ingoa ratonga jboss.site.name.

Hononga me etahi atu tuhinga

I whakamaoritia te tuhinga me te whakarite mo Habr e nga kaimahi Pokapū whakangungu Slurm - nga akoranga kaha, akoranga ataata me nga whakangungu umanga mai i nga tohunga whakangungu (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

Source: will.com

Tāpiri i te kōrero