ProHoster > Блог > Whakahaerenga > 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
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:
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:
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.
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)