zoo tib yam - ib qho thiab tsuas yog ib txheej txheem, teeb tsa los ntawm cov ntaub ntawv standalone.xml
Tsis tu ncua pawg (kev xaiv muaj siab) - tag nrho cov txheej txheem yuav tsum siv tib lub teeb tsa, uas yuav tsum tau synchronized manually. Cov chaw khaws cia rau hauv ib cov ntaub ntawv standalone-ha.xml, ntxiv rau koj yuav tsum ua kom sib koom nkag mus rau hauv cov ntaub ntawv thiab cov khoom sib npaug.
Domain pawg - pib ib pawg hauv ib txwm ua sai sai dhau los ua haujlwm niaj hnub thiab tho txawv raws li pawg loj hlob, txij li txhua lub sijhawm hloov pauv, txhua qhov kev hloov pauv yuav tsum tau ua ntawm txhua pawg pawg. Domain hom kev ua haujlwm daws qhov teeb meem no los ntawm kev teeb tsa qee qhov chaw khaws cia thiab tshaj tawm cov teeb tsa. Cov kev teeb tsa no tau muab khaws cia rau hauv cov ntaub ntawv ua domain.xml
Hauv tsab xov xwm no peb yuav xav txog qhov nthuav dav qhov kev xaiv thib ob, uas yog tsis tu ncua pawg, thiab peb tseem yuav kov me ntsis ntawm lub ntsiab lus ntawm kev rov ua dua ntawm cov chaw zov me nyuam, vim nws ua rau kev nkag siab los khiav ob txoj kev xaiv hauv Kubernetes. Hmoov zoo, hauv Kubernetes tsis muaj teeb meem nrog synchronizing qhov chaw ntawm ob peb pods (Keycloak nodes), yog li domain pawg Nws yuav tsis yooj yim ua.
Kuj thov nco ntsoov lo lus pawg rau qhov seem ntawm tsab xov xwm tsuas yog siv rau ib pawg ntawm Keycloak nodes ua haujlwm ua ke, tsis tas yuav xa mus rau Kubernetes pawg.
Tsis tu ncua Keycloak pawg
Txhawm rau khiav Keycloak hauv hom no koj xav tau:
configure sab nraud sib koom database
nruab load balancer
muaj ib lub network sab hauv nrog IP multicast txhawb
Peb yuav tsis tham txog kev teeb tsa cov ntaub ntawv sab nraud, vim nws tsis yog lub hom phiaj ntawm tsab xov xwm no. Cia peb xav tias muaj cov ntaub ntawv ua haujlwm nyob qhov twg - thiab peb muaj qhov sib txuas rau nws. Peb yuav tsuas ntxiv cov ntaub ntawv no rau ib puag ncig hloov pauv.
Txhawm rau kom nkag siab zoo dua li cas Keycloak ua haujlwm hauv pawg tsis ua haujlwm (HA), nws yog ib qho tseem ceeb kom paub ntau npaum li cas nws tag nrho nyob ntawm Wildfly lub peev xwm ua ke.
Wildfly siv ntau lub subsystems, qee qhov ntawm lawv yog siv los ua cov khoom sib npaug, qee qhov rau kev ua txhaum cai. Lub load balancer xyuas kom muaj daim ntawv thov thaum lub pawg node overloaded, thiab kev ua txhaum cai ua kom muaj daim ntawv thov txawm tias qee cov pawg tsis ua haujlwm. Qee qhov subsystems:
mod_cluster: Ua haujlwm nrog Apache ua HTTP load balancer, nyob ntawm TCP multicast los nrhiav cov tswv los ntawm lub neej ntawd. Nws tuaj yeem hloov nrog lub ntsuas hluav taws xob sab nraud.
infinispan: Ib qho kev faib cache siv JGroups raws li txheej thauj. Tsis tas li ntawd, nws tuaj yeem siv HotRod raws tu qauv los sib txuas lus nrog lwm pawg Infinispan los synchronize cache cov ntsiab lus.
Thaum txhim kho qhov sib npaug li tus tswj ingress hauv Kubernetes pawg, nws yog ib qho tseem ceeb kom nco ntsoov cov hauv qab no:
Keycloak xav tias qhov chaw nyob tej thaj chaw deb ntawm tus neeg siv txuas ntawm HTTP mus rau tus neeg rau zaub mov authentication yog qhov chaw nyob IP tiag tiag ntawm tus neeg siv lub computer. Ntsuas thiab ingress nqis yuav tsum teeb HTTP headers kom raug X-Forwarded-For ΠΈ X-Forwarded-Proto, thiab tseem txuag lub npe thawj HOST. Tseeb version ingress-nginx (> 0.22.0) disables qhov no los ntawm lub neej ntawd
Ua kom tus chij proxy-address-forwarding los ntawm kev teeb tsa ib puag ncig hloov pauv PROXY_ADDRESS_FORWARDING Π² true muab Keycloak nkag siab tias nws ua haujlwm tom qab tus neeg sawv cev.
Koj kuj yuav tsum tau pab nplaum ntu hauv ingress. Keycloak siv qhov faib Infinispan cache los khaws cov ntaub ntawv cuam tshuam nrog qhov kev lees paub tam sim no thiab cov neeg siv kev sib ntsib. Caches ua haujlwm nrog ib tus tswv los ntawm lub neej ntawd, hauv lwm lo lus, qhov kev sib tham tshwj xeeb yog khaws cia ntawm qee qhov ntawm hauv pawg, thiab lwm cov nodes yuav tsum nug nws nyob deb yog tias lawv xav tau nkag mus rau qhov kev sib tham.
Tshwj xeeb, tsis zoo rau cov ntaub ntawv, txuas nrog kev sib tham nrog lub npe ncuav qab zib tsis ua haujlwm rau peb AUTH_SESSION_ID. Keycloak muaj lub voj redirect, yog li peb xav kom xaiv ib lub npe khoom qab zib sib txawv rau qhov sib tham nplaum.
Keycloak tseem txuas lub npe ntawm cov node uas teb thawj zaug AUTH_SESSION_ID, thiab txij li txhua tus ntawm hauv cov ntawv muaj ntau heev siv tib lub database, txhua tus ntawm lawv yuav tsum muaj ib tug nyias muaj nyias node identifier rau tswj muas. Nws raug nquahu kom muab tso rau hauv JAVA_OPTS tsis jboss.node.name ΠΈ jboss.tx.node.id tshwj xeeb rau txhua qhov ntawm - koj tuaj yeem, piv txwv li, muab lub npe ntawm lub pod. Yog tias koj muab lub npe pod, tsis txhob hnov ββββqab txog 23 lub cim txwv rau jboss variables, yog li nws yog qhov zoo dua los siv StatefulSet es tsis yog Deployment.
Lwm rake - yog tias lub plhaub taum pauv lossis rov pib dua, nws cov cache ploj. Ua raws li qhov no, nws tsim nyog teev tus naj npawb ntawm cov tswv cache rau tag nrho cov caches kom tsawg kawg yog ob, yog li daim ntawv theej ntawm cache yuav nyob twj ywm. Txoj kev daws yog khiav tsab ntawv rau Wildfly thaum pib lub pod, muab tso rau hauv lub directory /opt/jboss/startup-scripts hauv lub thawv:
Script Cov ntsiab lus
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
ces teeb tus nqi ntawm ib puag ncig hloov pauv CACHE_OWNERS mus rau qhov xav tau.
Private network nrog IP multicast kev them nyiaj yug
Yog tias koj siv Weavenet ua CNI, multicast yuav ua haujlwm tam sim ntawd - thiab koj cov Keycloak nodes yuav pom ib leeg sai li sai tau thaum lawv pib.
Yog tias koj tsis muaj ip multicast kev txhawb nqa hauv koj pawg Kubernetes, koj tuaj yeem teeb tsa JGroups ua haujlwm nrog lwm cov txheej txheem los nrhiav cov nodes.
Lwm qhov kev xaiv yog siv txoj kev KUBE_PING, uas ua haujlwm nrog API los tshawb nrhiav cov nodes (koj yuav tsum teeb tsa serviceAccount nrog txoj cai list ΠΈ get, thiab tom qab ntawd teeb tsa cov pods ua haujlwm nrog qhov no serviceAccount).
Txoj kev JGroups nrhiav cov nodes yog teeb tsa los ntawm kev teeb tsa ib puag ncig hloov pauv JGROUPS_DISCOVERY_PROTOCOL ΠΈ JGROUPS_DISCOVERY_PROPERTIES. rau KUBE_PING koj yuav tsum xaiv pods los ntawm nug namespace ΠΈ labels.
οΈ Yog tias koj siv multicast thiab khiav ob lossis ntau dua Keycloak pawg hauv ib pawg Kubernetes (cia peb hais ib qho hauv lub npe production, thib ob - staging) - nodes ntawm ib pawg Keycloak tuaj yeem koom nrog lwm pawg. Nco ntsoov siv qhov chaw nyob multicast tshwj xeeb rau txhua pawg los ntawm kev teeb tsa kev sib txawvjboss.default.multicast.address ΠΈ jboss.modcluster.multicast.address Π² JAVA_OPTS.
Rau qee qhov caches, nws tseem tuaj yeem ua tsis tau thaub qab thiab tsis txhob sau cov ntaub ntawv los ntawm Infinispan server nkaus. Ua li no koj yuav tsum tshem tawm qhov chaw remote-store tshwj xeeb Infinispan cache (hauv cov ntaub ntawv standalone-ha.xml), tom qab uas qee qhov tshwj xeeb replicated-cache tseem yuav tsis xav tau ntawm Infinispan server sab.
Kev teeb tsa caches
Muaj ob hom caches hauv Keycloak:
Hauv zos. Nws nyob ntawm ib sab ntawm cov ntaub ntawv thiab ua haujlwm kom txo cov load ntawm cov ntaub ntawv, nrog rau txo cov lus teb latency. Hom cache no khaws cia thaj chaw, cov neeg siv khoom, lub luag haujlwm, thiab cov neeg siv cov metadata. Hom cache no tsis yog replicated, txawm tias lub cache yog ib feem ntawm Keycloak pawg. Yog tias kev nkag mus hauv cache hloov pauv, cov lus hais txog kev hloov pauv raug xa mus rau cov servers uas tseem nyob hauv pawg, tom qab uas qhov nkag tau raug cais tawm ntawm lub cache. Saib cov lus piav qhia work Saib hauv qab no kom paub meej ntxiv txog cov txheej txheem.
Rov ua dua. Cov txheej txheem cov neeg siv zaug, offline tokens, thiab tseem saib xyuas kev nkag mus yuam kev txhawm rau txheeb xyuas tus password phishing thiab lwm yam kev tawm tsam. Cov ntaub ntawv khaws cia hauv cov caches no yog ib ntus, khaws cia hauv RAM nkaus xwb, tab sis tuaj yeem rov ua dua thoob plaws pawg.
Infinispan caches
Ntu - lub tswv yim hauv Keycloak, cais caches hu ua authenticationSessions, yog siv los khaws cov ntaub ntawv ntawm cov neeg siv tshwj xeeb. Kev thov los ntawm cov cache no feem ntau xav tau los ntawm browser thiab Keycloak servers, tsis yog los ntawm daim ntawv thov. Qhov no yog qhov kev vam khom rau cov ntu nplaum los ua si, thiab cov caches lawv tus kheej tsis tas yuav rov ua dua, txawm tias nyob rau hauv cov ntaub ntawv ntawm Active-Active hom.
Action Tokens. Lwm lub tswv yim, feem ntau yog siv rau ntau yam xwm txheej thaum, piv txwv li, tus neeg siv yuav tsum ua ib yam dab tsi asynchronously xa ntawv. Piv txwv li, thaum tus txheej txheem forget password cache actionTokens siv los taug qab metadata ntawm cov tokens cuam tshuam - piv txwv li, lub token twb tau siv thiab tsis tuaj yeem rov qhib dua. Hom cache no feem ntau yuav tsum tau rov ua dua ntawm cov chaw khaws ntaub ntawv.
Caching thiab kev laus ntawm cov ntaub ntawv khaws cia ua haujlwm los txo cov load ntawm lub database. Hom caching no txhim kho kev ua tau zoo, tab sis ntxiv qhov teeb meem pom tseeb. Yog tias ib qho Keycloak server hloov kho cov ntaub ntawv, lwm cov servers yuav tsum tau ceeb toom kom lawv tuaj yeem hloov kho cov ntaub ntawv hauv lawv cov caches. Keycloak siv cov caches hauv zos realms, users ΠΈ authorization rau caching cov ntaub ntawv los ntawm lub database.
Kuj tseem muaj cais cache work, uas yog replicated thoob plaws tag nrho cov ntaub ntawv chaw. Nws tus kheej tsis khaws cov ntaub ntawv los ntawm cov ntaub ntawv, tab sis ua haujlwm xa cov lus hais txog cov ntaub ntawv laus mus rau pawg ntawm cov chaw khaws ntaub ntawv. Hauv lwm lo lus, sai li sai tau raws li cov ntaub ntawv hloov tshiab, Keycloak node xa lus mus rau lwm qhov ntawm nws cov ntaub ntawv chaw, nrog rau cov nodes hauv lwm cov chaw zov me nyuam. Tom qab tau txais cov lus zoo li no, txhua lub node tshem tawm cov ntaub ntawv sib xws hauv nws cov caches hauv zos.
Cov neeg siv sijhawm. Caches nrog cov npe sessions, clientSessions, offlineSessions ΠΈ offlineClientSessions, feem ntau yog replicated ntawm cov chaw zov me nyuam cov ntaub ntawv thiab pab khaws cov ntaub ntawv hais txog cov neeg siv zaug uas nquag siv thaum tus neeg siv ua haujlwm hauv browser. Cov caches no ua haujlwm nrog daim ntawv thov ua HTTP thov los ntawm cov neeg siv kawg, yog li lawv cuam tshuam nrog cov ntu nplaum thiab yuav tsum tau rov ua dua ntawm cov chaw zov me nyuam.
Brute force tiv thaiv. Cache loginFailures Siv los taug qab cov ntaub ntawv nkag mus yuam kev, xws li pes tsawg zaus tus neeg siv nkag mus rau tus password tsis raug. Replication ntawm lub cache no yog lub luag haujlwm ntawm tus thawj coj. Tab sis rau kev xam kom raug, nws tsim nyog ua kom replication ntawm cov chaw zov me nyuam. Tab sis ntawm qhov tod tes, yog tias koj tsis luam cov ntaub ntawv no, koj yuav txhim kho kev ua tau zoo, thiab yog tias qhov teeb meem no tshwm sim, replication yuav tsis qhib.