Nānā. unuhi.: Mahele mua Ua hoʻolaʻa ʻia kēia moʻo i ka ʻike i nā hiki o Istio a hōʻike iā lākou i ka hana, kekona - ka hoʻonohonoho pono ʻana i ka hoʻokele a me ka hoʻokele kaʻa pūnaewele. I kēia manawa, e kamaʻilio mākou e pili ana i ka palekana: e hōʻike i nā hana maʻamau e pili ana iā ia, hoʻohana ka mea kākau i ka lawelawe ʻike Auth0, akā hiki ke hoʻonohonoho ʻia nā mea hoʻolako ʻē aʻe ma ke ʻano like.
Hoʻonohonoho mākou i kahi pūʻulu Kubernetes kahi a mākou i kau ai iā Istio a me kahi noi microservice hoʻohālike, Sentiment Analysis, e hōʻike i ka hiki o Istio.
Me Istio, ua hiki iā mākou ke mālama liʻiliʻi i kā mākou lawelawe no ka mea ʻaʻole pono lākou e hoʻokō i nā papa e like me Retries, Timeouts, Circuit Breakers, Tracing, Monitoring. . Eia kekahi, ua hoʻohana mākou i nā ʻenehana hoʻāʻo a me ka hoʻolaha ʻana: hoʻāʻo A/B, mirroring a me nā canary rollouts.
Ma ka mea hou, e hana mākou i nā papa hope ma ke ala i ka waiwai ʻoihana: hōʻoia a me ka ʻae - a ma Istio he mea hauʻoli maoli!
ʻO ka hōʻoia a me ka ʻae ʻia ma Istio
ʻAʻole loa wau i manaʻoʻiʻo e hoʻoikaika ʻia wau e ka hōʻoia a me ka ʻae. He aha ka mea e hiki ai iā Istio ke hāʻawi mai kahi ʻike loea e hoʻohauʻoli ai i kēia mau kumuhana, a ʻoi aku hoʻi, e hoʻoikaika iā ʻoe?
He mea maʻalahi ka pane: Hoʻololi ʻo Istio i ke kuleana no kēia mau mea hiki mai kāu mau lawelawe i ka mea koho Envoy. I ka manawa e hiki ai nā noi i nā lawelawe, ua hōʻoia ʻia a ʻae ʻia lākou, no laila ʻo kāu mea e hana ai, ʻo ke kākau ʻana i nā code pono ʻoihana.
Maikaʻi loa? E nānā kākou i loko!
Hōʻoia me Auth0
Ma ke ʻano he kikowaena no ka ʻike a me ka hoʻokele hoʻokele, e hoʻohana mākou iā Auth0, nona kahi mana hoʻāʻo, he intuitive e hoʻohana a makemake wau. Eia naʻe, hiki ke hoʻohana ʻia nā loina like i kekahi Nā hoʻokō OpenID Connect: KeyCloak, IdentityServer a me na mea e ae.
No ka hoʻomaka, hele i Auth0 Portal me kāu moʻokāki, e hana i mea hoʻolimalima (mea hoaaina - “tenant”, logical unit of isolation, no ka ike hou aku palapala - kokoke. unuhi.) a hele i Nā noi > App Paʻamaukoho ana Domain, e like me ka mea i hōʻike ʻia ma ke kiʻi ma lalo nei:
E wehewehe i kēia kahua ma ka waihona resource-manifests/istio/security/auth-policy.yaml (kumu):
Me ia mea waiwai, Pilot (kekahi o na mea ekolu ma Istio - ma kahi o transl.) hoʻonohonoho ʻo Envoy e hōʻoia i nā noi ma mua o ka hoʻouna ʻana iā lākou i nā lawelawe: sa-web-app и sa-feedback. I ka manawa like, ʻaʻole pili ka hoʻonohonoho ʻana i nā ʻelele lawelawe sa-frontend, e ʻae iā mākou e haʻalele i ka frontend me ka ʻole. No ka hoʻohana ʻana i ke kulekele, e holo i ke kauoha:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io “auth-policy” created
E hoʻi i ka ʻaoʻao a hana i kahi noi - e ʻike ʻoe ua pau ia me ke kūlana 401ʻAiʻia. I kēia manawa e hoʻohuli hou i nā mea hoʻohana mua e hōʻoia me Auth0.
Ke hōʻoia ʻana i nā noi me Auth0
No ka hōʻoia ʻana i nā noi mea hoʻohana hope, pono ʻoe e hana i kahi API ma Auth0 e hōʻike i nā lawelawe i hōʻoia ʻia (nā loiloi, nā kikoʻī, a me nā helu). No ka hana ʻana i API, hele i Auth0 Portal > API > Hana API a hoʻopiha i ka palapala:
ʻO ka ʻike nui ma aneʻi Ikea, a mākou e hoʻohana ai ma hope o ka palapala. E kākau kākou penei:
ʻO ka poʻe hoʻolohe: {KOU_AUDIENCE}
Aia nā kikoʻī i koe a mākou e pono ai ma ka Auth0 Portal ma ka ʻāpana noi - koho Noi Hoao (i haku ʻia me ka API).
Maanei mākou e kākau ai:
Domain: {KOU_DOMAIN}
Id mea kūʻai: {KOU_CLIENT_ID}
Holo i Noi Hoao i ke kahua kikokiko ʻAe ʻia nā URL Callback (nā URL i hoʻoholo ʻia no ka callback), a mākou e kuhikuhi ai i ka URL kahi e hoʻouna ʻia ai ke kelepona ma hope o ka pau ʻana o ka hōʻoia. I kā mākou hihia:
http://{EXTERNAL_IP}/callback
A no ka ʻAe ʻia nā URL e haʻalele (ʻae ʻia nā URL no ka haʻalele ʻana) hoʻohui:
http://{EXTERNAL_IP}/logout
E neʻe kākou i ka ʻaoʻao mua.
Hoʻohou hope
E hoʻololi i ka lālā auth0 waihona waihona [istio-mastery]. Ma kēia lālā, hoʻololi ʻia ke code frontend e hoʻohuli i nā mea hoʻohana iā Auth0 no ka hōʻoia ʻana a hoʻohana i ka hōʻailona JWT i nā noi i nā lawelawe ʻē aʻe. Hoʻokō ʻia ka mea hope penei (App.js):
No ka hoʻololi ʻana i ka ʻaoʻao mua e hoʻohana i ka ʻikepili hoʻolimalima ma Auth0, wehe sa-frontend/src/services/Auth.js a hoʻololi i loko i nā waiwai a mākou i kākau ai ma luna (Auth.js):
const Config = {
clientID: '{YOUR_CLIENT_ID}',
domain:'{YOUR_DOMAIN}',
audience: '{YOUR_AUDIENCE}',
ingressIP: '{EXTERNAL_IP}' // Используется для редиректа после аутентификации
}
Ua mākaukau ka noi. E wehewehe i kāu Docker ID ma nā kauoha ma lalo nei i ka wā e kūkulu ai a hoʻolālā i nā loli i hana ʻia:
E ho'āʻo i ka polokalamu! E hoʻihoʻi ʻia ʻoe i Auth0, kahi āu e pono ai e hoʻopaʻa inoa (a i ʻole kākau inoa), a laila e hoʻihoʻi ʻia ʻoe i ka ʻaoʻao kahi e hana ʻia ai nā noi i hōʻoia ʻia. Inā ʻoe e hoʻāʻo i nā kauoha i ʻōlelo ʻia ma nā ʻāpana mua o ka ʻatikala me ka curl, e loaʻa iā ʻoe ke code 401 Code Kūlana, hōʻailona ʻaʻole ʻae ʻia ka noi.
E hana kāua i ka hana aʻe - ʻae i nā noi.
ʻAe ʻia me Auth0
Hāʻawi ka hōʻoia iā mākou e hoʻomaopopo i ka mea hoʻohana, akā koi ʻia ka ʻae e ʻike i ka mea i loaʻa iā lākou. Hāʻawi ʻo Istio i nā mea hana no kēia.
No ka laʻana, e hana kākou i ʻelua pūʻulu mea hoʻohana (e ʻike i ke kiʻikuhi ma lalo nei):
mea hoʻohana(mea hoʻohana) - me ke komo wale ʻana i nā lawelawe SA-WebApp a me SA-Frontend;
Nā mea hoʻoponopono(nā mea hoʻoponopono) - me ke komo ʻana i nā lawelawe ʻekolu.
Manaʻo mana
No ka hana ʻana i kēia mau pūʻulu, e hoʻohana mākou i ka hoʻonui ʻia Auth0 Authorization a hoʻohana iā Istio e hāʻawi iā lākou i nā pae like ʻole.
Hoʻokomo a me ka hoʻonohonoho ʻana o Auth0 Authorization
Ma ka puka Auth0, hele i nā hoʻonui (hoʻopaneʻei ka palena manawa) a hoʻokomo Auth0 mana. Ma hope o ka hoʻouka ʻana, hele i Hoʻonui i ka mana, a ma laila - i ka hoʻonohonoho ʻana o ka mea hoʻolimalima ma ke kaomi ʻana ma ka ʻaoʻao ʻākau i luna a koho i ke koho papa kuhikuhi kūpono (Hoʻonohonoho). E ho'ā i nā hui (Nā Pūʻulu) a kaomi ma ke pihi hoʻolaha rule (Paʻi i ka lula).
Ke hana nei i nā hui
Ma ka Authorization Extension hele i Groups a hana i hui Nā mea hoʻonālā. No ka mea, e hana mākou i nā mea hoʻohana i hōʻoia ʻia e like me nā mea hoʻohana maʻamau, ʻaʻohe pono e hana i kahi hui hou no lākou.
E koho i kahi hui Nā mea hoʻonālā, Paʻi Pākuʻi i nā lālā, hoʻohui i kāu moʻokāki nui. E waiho i kekahi mau mea hoʻohana me ka ʻole o kahi hui e hōʻoia i ka hōʻole ʻia ʻana. (Hiki ke hana lima ʻia nā mea hoʻohana hou ma o Auth0 Portal > Mea hoʻohana > Hana Mea hoʻohana.)
E hoʻohui i nā koi hui i ke komo ʻana i ka Token
Ua hoʻohui ʻia nā mea hoʻohana i nā hui, akā pono e hōʻike ʻia kēia ʻike i nā hōʻailona komo. No ka hoʻokō ʻana me OpenID Connect a i ka manawa like e hoʻihoʻi i nā pūʻulu e pono ai mākou, pono e hoʻohui ka token i kāna iho koi maʻamau. Hoʻokō ʻia ma o nā lula Auth0.
No ka hana ʻana i lula, e hele i Auth0 Portal i rula, Paʻi Hana i ka Rula a koho i ka rula kaawale mai na mamana.
E kope i ke code ma lalo a mālama iā ia ma ke ʻano he lula hou Hoʻohui i ke koi hui (namespacedGroup.js):
i hoʻopuka: Lawe kēia code i ka pūʻulu mea hoʻohana mua i wehewehe ʻia ma ka Authorization Extension a hoʻohui iā ia i ka hōʻailona komo ma ke ʻano he koi maʻamau (ma lalo o kona inoa inoa, e like me ke koi ʻia e Auth0).
E hoʻi i ka ʻaoʻao rula a e nānā inā loaʻa iā ʻoe ʻelua mau lula i kākau ʻia ma ke ʻano penei:
auth0-mana-hoonui
Hoʻohui i ke koi hui
He mea koʻikoʻi ke kauoha no ka loaʻa ʻole ʻana o ka lula i ka māla hui auth0-mana-hoonui a ma hope o ia mea, ua hoʻohui ʻia ma ke ʻano he koi e ka lula ʻelua. ʻO ka hopena he hōʻailona komo e like me kēia:
I kēia manawa pono ʻoe e hoʻonohonoho i ka proxy Envoy e nānā i ke komo ʻana o ka mea hoʻohana, kahi e huki ʻia ai ka hui mai ka koi (https://sa.io/group) ma ka hōʻailona komo i hoʻihoʻi ʻia. ʻO kēia ke kumuhana no ka pauku aʻe o ka ʻatikala.
Hoʻonohonoho ʻae ʻia ma Istio
No ka ʻae ʻana e hana, pono ʻoe e ʻae iā RBAC no Istio. No ka hana ʻana i kēia, e hoʻohana mākou i kēia hoʻonohonoho:
1 - hiki iā RBAC wale nō no nā lawelawe a me nā inoa inoa i helu ʻia ma ke kula Inclusion;
2 — papa inoa mākou i ka papa inoa o kā mākou lawelawe.
E hoʻohana i ka hoʻonohonoho me kēia kauoha:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
Pono nā lawelawe a pau i kēia manawa i ka Mana Mana Manaʻo Kūʻē Kūʻē. I nā huaʻōlelo ʻē aʻe, pāpā ʻia ke komo ʻana i nā lawelawe āpau a e hopena i kahi pane RBAC: access denied. I kēia manawa e ʻae kākou i ke komo ʻana i nā mea hoʻohana ʻae ʻia.
E komo i ka hoʻonohonoho no nā mea hoʻohana maʻamau
Pono nā mea hoʻohana a pau e komo i nā lawelawe SA-Frontend a me SA-WebApp. Hoʻokō ʻia me ka hoʻohana ʻana i nā kumuwaiwai Istio:
ServiceRole - hoʻoholo i nā kuleana i loaʻa i ka mea hoʻohana;
ServiceRoleBinding — hoʻoholo i ka mea nona kēia ServiceRole.
No nā mea hoʻohana maʻamau e ʻae mākou i ke komo ʻana i kekahi mau lawelawe (servicerole.yaml):
ʻO ka manaʻo o "nā mea hoʻohana āpau" e loaʻa pū i nā mea hoʻohana ʻole i ka SA WebApp? ʻAʻole, e nānā ke kulekele i ka pono o ka hōʻailona JWT.
E hoʻohana i nā hoʻonohonoho:
$ kubectl apply -f resource-manifests/istio/security/user-role.yaml
servicerole.rbac.istio.io/regular-user created
servicerolebinding.rbac.istio.io/regular-user-binding created
E komo i ka hoʻonohonoho no nā mea hoʻoponopono
No nā mea hoʻoponopono, makemake mākou e hiki ke komo i nā lawelawe āpau (mod-service-role.yaml):
Akā makemake mākou i kēlā mau kuleana no nā mea hoʻohana wale nō i loaʻa i ka hōʻailona komo ke koi https://sa.io/group me ke ano Moderators (mod-service-role-binding.yaml):
$ kubectl apply -f resource-manifests/istio/security/mod-role.yaml
servicerole.rbac.istio.io/mod-user created
servicerolebinding.rbac.istio.io/mod-user-binding created
Ma muli o ka hoʻopaʻa ʻana i nā ʻelele, hiki i ʻelua mau minuke ke hoʻokō ʻia nā lula ʻae. A laila hiki iā ʻoe ke hōʻoia i nā mea hoʻohana a me nā moderators i loaʻa nā pae like ʻole.
Ka hopena ma kēia ʻāpana
ʻOiaʻiʻo, ua ʻike paha ʻoe i kahi ala maʻalahi, hoʻoikaika ʻole, scalable a palekana i ka hōʻoia a me ka ʻae?
ʻEkolu wale nō kumu waiwai Istio (RbacConfig, ServiceRole, a me ServiceRoleBinding) i koi ʻia e hoʻokō i ka mana maikaʻi ma luna o ka hōʻoia ʻana a me ka ʻae ʻana i ke komo ʻana o ka mea hoʻohana hope i nā lawelawe.
Eia kekahi, ua mālama mākou i kēia mau pilikia mai kā mākou lawelawe ʻelele, e loaʻa ana:
e ho'ēmi i ka nui o nā code generic i loaʻa i nā pilikia palekana a me nā pōʻino;
e hōʻemi ana i ka helu o nā kūlana naʻaupō i ʻike ʻia kahi hopena i hiki ke loaʻa mai waho a poina e hōʻike;
hoʻopau i ka pono e hōʻano hou i nā lawelawe āpau i kēlā me kēia manawa i hoʻohui ʻia kahi kuleana hou a i ʻole kuleana;
e noho maʻalahi nā lawelawe hou, palekana a wikiwiki hoʻi.
hopena
Hāʻawi ʻo Istio i nā hui e kālele i kā lākou waiwai i nā hana koʻikoʻi ʻoihana me ka ʻole o ka hoʻohui ʻana i nā lawelawe, e hoʻihoʻi iā lākou i ke kūlana micro.
ʻO ka ʻatikala (ma ʻekolu ʻāpana) hāʻawi i ka ʻike kumu a me nā ʻōlelo aʻoaʻo i mākaukau no ka hoʻomaka ʻana me Istio i nā papahana maoli.