Иҷрои Keycloak дар ҳолати HA дар Kubernetes

Иҷрои Keycloak дар ҳолати HA дар Kubernetes

ХИБ; DR: тавсифи Keycloak, системаи идоракунии дастрасии кушодаасос, таҳлили сохтори дохилӣ, тафсилоти конфигуратсия мавҷуд аст.

Муқаддима ва ғояҳои асосӣ

Дар ин мақола, мо ғояҳои асосиро мебинем, ки ҳангоми ҷойгиркунии кластери Keycloak дар болои Kubernetes бояд дар хотир дошта бошанд.

Агар шумо хоҳед, ки дар бораи Keycloak маълумоти бештар гиред, ба истиноди охири мақола муроҷиат кунед. Барои он ки ба амалия бештар ғарқ шавед, шумо метавонед таҳсил кунед анбори мо бо модуле, ки ғояҳои асосии ин мақоларо амалӣ мекунад (дастури оғозёбӣ вуҷуд дорад, ин мақола шарҳи дастгоҳ ва танзимотро медиҳад, тақрибан. тарчумон).

Keycloak як системаи мукаммалест, ки дар Java навишта шудааст ва дар болои сервери барнома сохта шудааст Ваҳшӣ. Хулоса, он чаҳорчӯбаи иҷозатест, ки ба федератсияи корбарони барномаҳо ва SSO (ба як воридшавӣ) имконият медиҳад.

Мо шуморо ба хондани расми даъват мекунем сомона ё Википедиа барои фаҳмиши муфассал.

Оғози Keycloak

Keycloak барои кор кардан ду манбаи доимии маълумотро талаб мекунад:

  • Махзани маълумоте, ки барои нигоҳ доштани маълумоти муқарраршуда, ба монанди маълумоти корбар истифода мешавад
  • Кэши Datagrid, ки барои кэш кардани маълумот аз пойгоҳи додаҳо, инчунин барои нигоҳ доштани баъзе метамаълумотҳои кӯтоҳмуддат ва зуд-зуд тағйирёбанда, ба монанди сессияҳои корбар истифода мешавад. Ба амал бароварда шуд Инфиниспан, ки одатан нисбат ба базаи маълумот хеле тезтар аст. Аммо дар ҳар сурат, маълумоте, ки дар Infinispan захира шудааст, муваққатӣ аст - ва ҳангоми аз нав оғоз кардани кластер, онро дар ҳама ҷо захира кардан лозим нест.

Keycloak дар чор намуди гуногун кор мекунад:

  • оддӣ - як ва танҳо як раванд, ки тавассути файл танзим карда мешавад standalone.xml
  • Кластери муқаррарӣ (варианти дастрасии баланд) - ҳамаи равандҳо бояд як конфигуратсияро истифода баранд, ки бояд ба таври дастӣ ҳамоҳанг карда шаванд. Танзимот дар файл нигоҳ дошта мешаванд standalone-ha.xml, илова бар ин ба шумо лозим аст, ки дастрасии муштарак ба пойгоҳи додаҳо ва тавозуни сарборӣ кунед.
  • Кластери домен — оғози кластер дар реҷаи муқаррарӣ ба зудӣ кори муқаррарӣ ва дилгиркунанда мегардад, зеро кластер ҳар боре, ки конфигуратсия тағир меёбад, ҳама тағиротҳо бояд дар ҳар як гиреҳи кластер анҷом дода шаванд. Усули кори домен ин масъаларо тавассути таъсиси баъзе макони нигаҳдории муштарак ва интишори конфигуратсия ҳал мекунад. Ин танзимот дар файл нигоҳ дошта мешаванд domain.xml
  • Репликатсия байни марказҳои додаҳо — агар шумо хоҳед, ки Keycloak-ро дар кластери якчанд марказҳои додаҳо, аксар вақт дар ҷойҳои гуногуни ҷуғрофӣ иҷро кунед. Дар ин хосият, ҳар як маркази додаҳо кластери худро аз серверҳои Keycloak хоҳад дошт.

Дар ин мақола мо варианти дуюмро ба таври муфассал баррасӣ хоҳем кард, яъне кластери муқаррарӣ, ва мо инчунин каме ба мавзӯи такрорӣ байни марказҳои додаҳо дахл хоҳем кард, зеро иҷро кардани ин ду вариант дар Кубернетес маъно дорад. Хушбахтона, дар Кубернетес ҳеҷ мушкиле барои ҳамоҳангсозии танзимоти якчанд подкҳо (гиреҳҳои Keycloak) вуҷуд надорад, бинобар ин кластери домен Ин кор хеле душвор нахоҳад буд.

Инчунин лутфан қайд кунед, ки калима кластер зеро қисми боқимондаи мақола танҳо ба гурӯҳи гиреҳҳои Keycloak, ки якҷоя кор мекунанд, дахл дорад, ба кластери Kubernetes муроҷиат кардан лозим нест.

Кластери муқаррарии Keycloak

Барои дар ин реҷа кор кардани Keycloak ба шумо лозим аст:

  • махзани муштараки беруна танзим кунед
  • мувозинати сарборӣ насб кунед
  • дорои шабакаи дохилӣ бо дастгирии IP multicast

Мо дар бораи таъсиси пойгоҳи додаҳои беруна муҳокима намекунем, зеро он ҳадафи ин мақола нест. Фарз мекунем, ки дар ҷое базаи корӣ мавҷуд аст ва мо ба он нуқтаи пайваст дорем. Мо танҳо ин маълумотро ба тағирёбандаҳои муҳити зист илова мекунем.

Барои беҳтар фаҳмидани он ки чӣ тавр Keycloak дар кластери ноком (HA) кор мекунад, муҳим аст, ки бидонед, ки то чӣ андоза ҳамааш аз қобилияти кластерсозии Wildfly вобаста аст.

Wildfly якчанд зерсистемаҳоро истифода мебарад, ки баъзеи онҳо ҳамчун мувозинаткунандаи сарборӣ ва баъзеҳо барои таҳаммулпазирии хатогиҳо истифода мешаванд. Тавозуни сарборӣ дастрасии барномаро ҳангоми аз ҳад зиёди гиреҳи кластер таъмин мекунад ва таҳаммулпазирии хато дастрасии барномаро ҳатто агар баъзе гиреҳҳои кластер ноком шаванд ҳам таъмин мекунад. Баъзе аз ин зерсистемаҳо:

  • mod_cluster: Дар якҷоягӣ бо Apache ҳамчун мувозинати сарбории HTTP кор мекунад, аз TCP multicast барои ёфтани ҳостҳо бо нобаёнӣ вобаста аст. Бо тавозуни беруна иваз кардан мумкин аст.

  • infinispan: Кэши тақсимшуда бо истифода аз каналҳои JGroups ҳамчун қабати нақлиёт. Илова бар ин, он метавонад протоколи HotRod-ро барои муошират бо кластери берунии Infinispan барои ҳамоҳангсозии мундариҷаи кэш истифода барад.

  • jgroups: Дастгирии иртиботи гурӯҳӣ барои хидматҳои дастрас дар асоси каналҳои JGroups. Қубурҳои номбаршуда имкон медиҳанд, ки мисолҳои барнома дар кластер ба гурӯҳҳо пайваст шаванд, то иртибот дорои хосиятҳое ба монанди эътимоднокӣ, тартиб ва ҳассосият ба нокомиҳо бошад.

Тавозуни сарборӣ

Ҳангоми насб кардани мувозинат ҳамчун контролери воридшавӣ дар кластери Kubernetes, муҳим аст, ки чизҳои зеринро дар хотир нигоҳ доред:

Keycloak тахмин мекунад, ки суроғаи дурдасти муштарӣ, ки тавассути HTTP ба сервери аутентификатсия пайваст мешавад, суроғаи воқеии IP-и компютери муштарӣ мебошад. Танзимоти мувозинат ва воридшавӣ бояд сарлавҳаҳои HTTP-ро дуруст танзим кунанд X-Forwarded-For и X-Forwarded-Proto, ва инчунин унвони аслиро захира кунед HOST. Версияи охирин ingress-nginx (>0.22.0) инро ба таври нобаёнӣ хомӯш мекунад

Фаъолсозии парчам proxy-address-forwarding бо гузоштани тағирёбандаи муҳити зист PROXY_ADDRESS_FORWARDING в true Keycloak фаҳмиш медиҳад, ки он дар паси прокси кор мекунад.

Шумо инчунин бояд фаъол созед сессияҳои часпак дар дохил шудан. Keycloak кэши тақсимшудаи Infinispanро барои нигоҳ доштани маълумоте, ки бо сеанси ҷорӣ ва сессияи корбар алоқаманд аст, истифода мебарад. Кэшҳо ба таври нобаёнӣ бо як соҳиби ягона кор мекунанд, ба ибораи дигар, он сеанси мушаххас дар баъзе гиреҳи кластер нигоҳ дошта мешавад ва гиреҳҳои дигар бояд онро аз фосилаи дур дархост кунанд, агар онҳо ба он сессия дастрасӣ дошта бошанд.

Махсусан, бар хилофи ҳуҷҷатгузорӣ, замима кардани сессия бо номи куки барои мо кор накард AUTH_SESSION_ID. Keycloak як ҳалқаи масир дорад, аз ин рӯ тавсия медиҳем, ки барои сессияи часпанда номи кукиҳои дигар интихоб кунед.

Keycloak инчунин номи гиреҳеро, ки аввал ба он посух додааст, замима мекунад AUTH_SESSION_ID, ва азбаски ҳар як гиреҳ дар версияи хеле дастрас як махзани маълумотро истифода мебарад, ҳар яке аз онҳо бояд дошта бошад идентификатори гиреҳи алоҳида ва беназир барои идоракунии транзаксияҳо. Тавсия дода мешавад, ки гузоред JAVA_OPTS параметрҳо jboss.node.name и jboss.tx.node.id беназир барои ҳар як гиреҳ - шумо метавонед, масалан, номи pod гузошта. Агар шумо номи поддонро гузоред, дар бораи маҳдудияти 23 аломат барои тағирёбандаҳои jboss фаромӯш накунед, аз ин рӯ беҳтар аст, ки StatefulSet-ро истифода баред, на Deployment.

Райки дигар - агар подкаст нест карда шавад ё аз нав оғоз карда шавад, кэши он гум мешавад. Бо дарназардошти ин, зарур аст, ки шумораи соҳибони кэш барои ҳамаи кэшҳо ҳадди аққал дуро муқаррар кард, то нусхаи кэш боқӣ монад. Ҳалли он аст, ки давидан скрипт барои Wildfly ҳангоми оғоз кардани pod, онро дар директория ҷойгир кунед /opt/jboss/startup-scripts дар контейнер:

Мундариҷаи скрипт

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

пас арзиши тағирёбандаи муҳити зистро муқаррар кунед CACHE_OWNERS ба талаб.

Шабакаи хусусӣ бо дастгирии IP multicast

Агар шумо Weavenet-ро ҳамчун CNI истифода баред, чандрасонаӣ фавран кор хоҳад кард - ва гиреҳҳои Keycloak-и шумо баробари ба кор андохта шуданашон ҳамдигарро хоҳанд дид.

Агар шумо дар кластери Kubernetes-и худ дастгирии бисёрҷанбаи IP надошта бошед, шумо метавонед JGroups-ро барои кор бо протоколҳои дигар барои дарёфти гиреҳҳо танзим кунед.

Варианти аввал ин истифода аст KUBE_DNSки истифода мебарад headless service барои дарёфти гиреҳҳои Keycloak, шумо танҳо ба JGroups номи хидматеро мегузоред, ки барои ёфтани гиреҳҳо истифода мешавад.

Варианти дигар ин истифодаи усул аст KUBE_PING, ки бо API барои ҷустуҷӯи гиреҳҳо кор мекунад (шумо бояд танзим кунед serviceAccount бо хукукхо list и get, ва он гоҳ подкҳоро барои кор бо ин танзим кунед serviceAccount).

Тарзи дарёфти гиреҳҳои JGroups тавассути танзими тағирёбандаҳои муҳити зист танзим карда мешавад JGROUPS_DISCOVERY_PROTOCOL и JGROUPS_DISCOVERY_PROPERTIES. барои KUBE_PING ба шумо лозим аст, ки бо хоҳиши худ подкҳоро интихоб кунед namespace и labels.

️ Агар шумо multicast истифода баред ва дар як кластери Kubernetes ду ё зиёда кластерҳои Keycloak -ро иҷро кунед (бигзор яке дар фазои номҳо бигӯед. production, дуюм - staging) - гиреҳҳои як кластери Keycloak метавонанд ба кластери дигар пайваст шаванд. Боварӣ ҳосил кунед, ки бо гузоштани тағирёбандаҳо барои ҳар як кластер суроғаи беназири чандрасонаӣ истифода баредjboss.default.multicast.address и jboss.modcluster.multicast.address в JAVA_OPTS.

Репликатсия байни марказҳои додаҳо

Иҷрои Keycloak дар ҳолати HA дар Kubernetes

Пайвастшавӣ

Keycloak барои ҳар як маркази додаҳо, ки кластерҳои Keycloak аз гиреҳҳои Keycloak ҷойгиранд, якчанд кластерҳои кэши алоҳидаи Infinispan истифода мебарад. Аммо байни гиреҳҳои Keycloak дар марказҳои гуногуни додаҳо фарқият вуҷуд надорад.

Гиреҳҳои Keycloak барои иртибот байни марказҳои додаҳо аз Java Data Grid (серверҳои Infinispan) истифода мебаранд. Алока мувофики протокол кор мекунад Infinispan HotRod.

Кэшҳои Infinispan бояд бо атрибут танзим карда шаванд remoteStore, ба тавре ки маълумот метавонад аз фосилаи дур нигоҳ дошта шавад (дар маркази додаҳои дигар, тақрибан. тарчумон) кэшҳо. Дар байни серверҳои JDG кластерҳои алоҳидаи infinispan мавҷуданд, то маълумот дар JDG1 дар сайт нигоҳ дошта шавад site1 ба JDG2 дар сайт такрор карда мешавад site2.

Ва ниҳоят, сервери қабулкунандаи JDG серверҳои Keycloak-ро аз кластери худ тавассути пайвастҳои муштарӣ огоҳ мекунад, ки ин хусусияти протоколи HotRod мебошад. Гиреҳҳои клавиатура фаъол site2 кэшҳои Infinispan онҳоро навсозӣ кунед ва сессияи мушаххаси корбар инчунин дар гиреҳҳои Keycloak дастрас мешавад site2.

Барои баъзе кэшҳо, инчунин имконпазир аст, ки нусхабардорӣ накунанд ва аз навиштани маълумот тавассути сервери Infinispan комилан худдорӣ кунанд. Барои ин ба шумо лозим аст, ки танзимотро хориҷ кунед remote-store кэши мушаххаси Infinispan (дар файл standalone-ha.xml), пас аз он баъзе мушаххас replicated-cache инчунин дигар дар тарафи сервери Infinispan лозим нахоҳад шуд.

Танзими кэшҳо

Дар Keycloak ду намуди кэш мавҷуд аст:

  • маҳаллӣ. Он дар паҳлӯи пойгоҳи додаҳо ҷойгир аст ва барои кам кардани сарбории пойгоҳи додаҳо ва инчунин коҳиш додани таъхири посух хизмат мекунад. Ин намуди кэш замин, мизоҷон, нақшҳо ва метамаълумоти корбарро нигоҳ медорад. Ин навъи кэш такрор намешавад, ҳатто агар кэш як ҷузъи кластери Keycloak бошад. Агар вуруд дар кэш тағир ёбад, паём дар бораи тағирот ба серверҳои боқимондаи кластер фиристода мешавад, ки пас аз он вуруд аз кэш хориҷ карда мешавад. Ба тавсиф нигаред work Барои тавсифи муфассали расмиёти зер нигаред.

  • Такрори. Сеансҳои корбар, аломатҳои офлайнӣ коркард мекунад ва инчунин хатогиҳои воридшавиро барои ошкор кардани кӯшишҳои фишинги парол ва ҳамлаҳои дигар назорат мекунад. Маълумоте, ки дар ин кэшҳо нигоҳ дошта мешаванд, муваққатӣ буда, танҳо дар RAM нигоҳ дошта мешаванд, аммо метавонанд дар тамоми кластер такрор карда шаванд.

Кэшҳои Infinispan

Ҷаласаҳои - консепсия дар Keycloak, кэшҳои алоҳида номида мешавад authenticationSessions, барои нигоҳ доштани маълумоти корбарони мушаххас истифода мешаванд. Дархостҳо аз ин кэшҳо одатан ба серверҳои браузер ва Keycloak лозиманд, на ба барномаҳо. Дар ин ҷо вобастагӣ аз сеансҳои часпанда ба амал меояд ва худи чунин кэшҳо ҳатто дар ҳолати фаъол-фаъол такрор кардан лозим нест.

Токенҳои амал. Консепсияи дигар, ки одатан барои сенарияҳои гуногун истифода мешавад, вақте ки масалан, корбар бояд тавассути почта ягон кори асинхронӣ анҷом диҳад. Масалан, дар давоми тартиб forget password кеш actionTokens барои пайгирии метамаълумоти токенҳои алоқаманд истифода мешавад - масалан, нишона аллакай истифода шудааст ва дубора фаъол карда намешавад. Ин навъи кэш одатан бояд дар байни марказҳои додаҳо такрор карда шавад.

Кэш ва пиршавии маълумоти захирашуда барои сабук кардани бори база кор мекунад. Ин гуна кэш корҳоро беҳтар мекунад, аммо мушкилоти ошкорро илова мекунад. Агар як сервери Keycloak маълумотро нав кунад, серверҳои дигар бояд огоҳ карда шаванд, то онҳо тавонанд маълумотро дар кэшҳои худ навсозӣ кунанд. Keycloak кэшҳои маҳаллиро истифода мебарад realms, users и authorization барои кэшкунии маълумот аз базаи маълумот.

Инчунин як кэши алоҳида мавҷуд аст work, ки дар тамоми марказҳои додаҳо такрор карда мешавад. Худи он ягон маълумотро аз пойгоҳи додаҳо нигоҳ намедорад, балки барои фиристодани паёмҳо дар бораи пиршавии маълумот ба гиреҳҳои кластерӣ байни марказҳои додаҳо хизмат мекунад. Ба ибораи дигар, вақте ки маълумот навсозӣ мешавад, гиреҳи Keycloak ба дигар гиреҳҳои маркази додаҳои худ ва инчунин гиреҳҳои дигар марказҳои додаҳо паём мефиристад. Пас аз гирифтани чунин паём, ҳар як гиреҳ маълумоти мувофиқро дар кэшҳои маҳаллии худ тоза мекунад.

Сеансҳои корбар. Кэшҳо бо номҳо sessions, clientSessions, offlineSessions и offlineClientSessions, одатан дар байни марказҳои додаҳо такрор карда мешаванд ва барои нигоҳ доштани маълумот дар бораи сессияҳои корбар, ки ҳангоми фаъол будани корбар дар браузер фаъоланд, хизмат мекунанд. Ин кэшҳо бо коркарди дархостҳои HTTP аз корбарони ниҳоӣ кор мекунанд, аз ин рӯ онҳо бо сессияҳои часпанда алоқаманданд ва бояд дар байни марказҳои додаҳо такрор карда шаванд.

Муҳофизати қувваи бераҳмона. Кэш loginFailures Барои пайгирии маълумоти хатои воридшавӣ истифода мешавад, масалан чанд маротиба корбар пароли нодуруст ворид кардааст. Такрори ин кэш масъулияти маъмур аст. Аммо барои ҳисобкунии дақиқ, фаъол кардани такрори байни марказҳои додаҳо меарзад. Аммо аз тарафи дигар, агар шумо ин маълумотро такрор накунед, шумо иҷроишро беҳтар хоҳед кард ва агар ин масъала ба миён ояд, такрорӣ метавонад фаъол нашавад.

Ҳангоми паҳн кардани кластери Infinispan, шумо бояд таърифҳои кэшро ба файли танзимот илова кунед:

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

Шумо бояд пеш аз оғози кластери Keycloak кластери Infinispan -ро танзим ва оғоз кунед

Пас шумо бояд танзим кунед remoteStore барои кэшҳои Keycloak. Барои ин як скрипт кифоя аст, ки он ба мисли пештара иҷро карда мешавад, ки барои муқаррар кардани тағирёбанда истифода мешавад. CACHE_OWNERS, шумо бояд онро дар файл захира кунед ва дар директория ҷойгир кунед /opt/jboss/startup-scripts:

Мундариҷаи скрипт

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

Насб карданро фаромӯш накунед JAVA_OPTS барои гиреҳҳои Keycloak барои кор кардани HotRod: remote.cache.host, remote.cache.port ва номи хидмат jboss.site.name.

Истинодҳо ва ҳуҷҷатҳои иловагӣ

Мақоларо кормандон тарҷума ва барои Ҳабр омода кардаанд Маркази таълимии Slurm — курсҳои пуршиддат, курсҳои видеоӣ ва омӯзиши корпоративӣ аз мутахассисони амалкунанда (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE)

Манбаъ: will.com

Илова Эзоҳ