Akiyesi. itumọ.: Apa akọkọ jara yii jẹ iyasọtọ lati mọ awọn agbara ti Istio ati ṣafihan wọn ni iṣe, ikeji - afisona aifwy daradara ati iṣakoso ijabọ nẹtiwọọki. Bayi a yoo sọrọ nipa aabo: lati ṣe afihan awọn iṣẹ ipilẹ ti o nii ṣe pẹlu rẹ, onkọwe lo iṣẹ idanimọ Auth0, ṣugbọn awọn olupese miiran le tunto ni ọna kanna.
A ṣeto iṣupọ Kubernetes kan ninu eyiti a fi Istio ranṣẹ ati apẹẹrẹ ohun elo microservice kan, Itupalẹ ẹdun, lati ṣafihan awọn agbara Istio.
Pẹlu Istio, a ni anfani lati jẹ ki awọn iṣẹ wa kere nitori wọn ko nilo lati ṣe awọn ipele bii Awọn igbiyanju, Awọn akoko, Awọn fifọ Circuit, Wapa, Abojuto. Ni afikun, a lo idanwo to ti ni ilọsiwaju ati awọn imuṣiṣẹ imuṣiṣẹ: Idanwo A/B, mirroring ati canary rollouts.
Ninu ohun elo tuntun, a yoo ṣe pẹlu awọn ipele ikẹhin lori ọna si iye iṣowo: ijẹrisi ati aṣẹ - ati ni Istio o jẹ idunnu gidi!
Ijeri ati aṣẹ ni Istio
Emi yoo ko gbagbọ rara pe Emi yoo ni atilẹyin nipasẹ ijẹrisi ati aṣẹ. Kini Istio le funni lati irisi imọ-ẹrọ lati jẹ ki awọn koko-ọrọ wọnyi dun ati, paapaa diẹ sii, iwunilori fun ọ?
Idahun si rọrun: Istio yi ojuse fun awọn agbara wọnyi lati awọn iṣẹ rẹ si aṣoju Aṣoju. Ni akoko ti awọn ibeere de ọdọ awọn iṣẹ naa, wọn ti jẹri ati aṣẹ tẹlẹ, nitorinaa gbogbo ohun ti o ni lati ṣe ni kọ koodu iwulo iṣowo.
O dara? Jẹ ki a wo inu!
Ijeri pẹlu Auth0
Gẹgẹbi olupin fun idanimọ ati iṣakoso wiwọle, a yoo lo Auth0, eyiti o ni ẹya idanwo kan, jẹ ogbon inu lati lo ati pe Mo fẹran rẹ ni irọrun. Sibẹsibẹ, awọn ilana kanna le ṣee lo si eyikeyi miiran OpenID So awọn imuṣẹ: KeyCloak, IdentityServer ati ọpọlọpọ awọn miiran.
Lati bẹrẹ, lọ si Auth0 Portal pẹlu akọọlẹ rẹ, ṣẹda agbatọju kan (ayálégbé - “ayalégbé”, ẹyọ ọgbọ́n tí a yà sọ́tọ̀, fún ẹ̀kúnrẹ́rẹ́ ẹ wo iwe - isunmọ. itumọ.) ki o si lọ si Awọn ohun elo> Ohun elo aiyipadanipa yiyan -ašẹ, bi o ṣe han ninu sikirinifoto ni isalẹ:
Pato agbegbe yii ninu faili naa resource-manifests/istio/security/auth-policy.yaml (orisun):
Pẹlu iru awọn oluşewadi, Pilot (ọkan ninu awọn paati Iṣakoso Iṣakoso mẹta ni Istio - isunmọ. transl.) tunto Aṣoju lati jẹrisi awọn ibeere ṣaaju fifiranṣẹ wọn si awọn iṣẹ: sa-web-app и sa-feedback. Ni akoko kanna, iṣeto naa ko lo si Awọn aṣoju iṣẹ sa-frontend, gbigba wa lati lọ kuro ni frontend laigba aṣẹ. Lati lo Ilana naa, ṣiṣe aṣẹ naa:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io “auth-policy” created
Pada si oju-iwe naa ki o ṣe ibeere - iwọ yoo rii pe o pari pẹlu ipo naa 401 Laigba aṣẹ. Bayi jẹ ki a darí awọn olumulo iwaju lati jẹri pẹlu Auth0.
Ijeri awọn ibeere pẹlu Auth0
Lati jẹri awọn ibeere olumulo ipari, o nilo lati ṣẹda API ni Auth0 ti yoo ṣe aṣoju awọn iṣẹ ti o jẹri (awọn atunwo, awọn alaye, ati awọn idiyele). Lati ṣẹda API kan, lọ si Auth0 Portal > APIs > Ṣẹda API ki o si fọwọsi fọọmu naa:
Alaye pataki nibi ni da, eyi ti a yoo lo nigbamii ni akosile. Jẹ ki a kọ silẹ bi eleyi:
jepe: {YOUR_AUDIENCE}
Awọn alaye ti o ku ti a nilo wa lori Portal Auth0 ni apakan ohun elo - yan Ohun elo Idanwo (ti a ṣẹda laifọwọyi pẹlu API).
Nibi a yoo kọ:
-ašẹ: {YOUR_DOMAIN}
Id Onibara: {YOUR_CLIENT_ID}
Yi lọ si Ohun elo Idanwo si aaye ọrọ Awọn URL Ipepada ti a gba laaye (Awọn URL ti o yanju fun ipe pada), ninu eyiti a ṣe pato URL nibiti o yẹ ki o fi ipe ranṣẹ lẹhin ti ijẹrisi ti pari. Ninu ọran tiwa o jẹ:
http://{EXTERNAL_IP}/callback
Ati fun Awọn URL Iwajade ti a gba laaye (Awọn URL ti a gba laaye fun jijade) ṣafikun:
http://{EXTERNAL_IP}/logout
Jẹ ki a lọ si iwaju iwaju.
Imudojuiwọn iwaju
Yipada si ẹka auth0 ibi ipamọ [istio-mastery]. Ni ẹka yii, koodu iwaju ti yipada lati darí awọn olumulo si Auth0 fun ijẹrisi ati lo aami JWT ni awọn ibeere si awọn iṣẹ miiran. Awọn igbehin ti wa ni imuse bi wọnyi (Ohun elo):
Gbiyanju ohun elo naa! Iwọ yoo darí rẹ si Auth0, nibiti o nilo lati wọle (tabi forukọsilẹ), lẹhin eyi a yoo fi ọ ranṣẹ pada si oju-iwe ti eyiti awọn ibeere ti jẹri tẹlẹ yoo ṣe. Ti o ba gbiyanju awọn aṣẹ ti a mẹnuba ni awọn apakan akọkọ ti nkan naa pẹlu curl, iwọ yoo gba koodu naa 401 koodu ipo, ṣe afihan pe ko gba aṣẹ fun ibeere naa.
Jẹ ki a ṣe igbesẹ ti n tẹle - fun laṣẹ awọn ibeere.
Aṣẹ pẹlu Auth0
Ijeri gba wa laaye lati ni oye tani olumulo kan jẹ, ṣugbọn a nilo aṣẹ lati mọ kini wọn ni iwọle si. Istio nfunni awọn irinṣẹ fun eyi paapaa.
Gẹgẹbi apẹẹrẹ, jẹ ki a ṣẹda awọn ẹgbẹ olumulo meji (wo aworan ni isalẹ):
users(olumulo) - pẹlu wiwọle si SA-WebApp nikan ati awọn iṣẹ SA-Frontend;
Awọn oniwontunniwonsi(awọn oniwontunniwonsi) - pẹlu wiwọle si gbogbo awọn mẹta awọn iṣẹ.
Ilana aṣẹ
Lati ṣẹda awọn ẹgbẹ wọnyi, a yoo lo Ifaagun Aṣẹ Auth0 ati lo Istio lati pese wọn pẹlu awọn ipele iraye si oriṣiriṣi.
Fifi sori ẹrọ ati iṣeto ni ti Aṣẹ Auth0
Ni oju-ọna Auth0, lọ si awọn amugbooro (Amugbooro) ati fi sori ẹrọ Auth0 Aṣẹ. Lẹhin fifi sori ẹrọ, lọ si Itẹsiwaju Aṣẹ, ati nibẹ - si atunto agbatọju nipa tite lori oke apa ọtun ati yiyan aṣayan akojọ aṣayan ti o yẹ (Iṣeto ni). Mu awọn ẹgbẹ ṣiṣẹ (Awọn ẹgbẹ) ki o si tẹ lori awọn jade ofin bọtini (Ofin atẹjade).
Ṣiṣẹda awọn ẹgbẹ
Ni Ifaagun Aṣẹ lọ si Awọn ẹgbẹ ki o si ṣẹda ẹgbẹ kan Awọn alakoso. Niwọn igba ti a yoo tọju gbogbo awọn olumulo ti o jẹri bi awọn olumulo deede, ko si iwulo lati ṣẹda ẹgbẹ afikun fun wọn.
Yan ẹgbẹ kan Awọn alakoso, najmite na Ṣafikun Awọn ọmọ ẹgbẹ, ṣafikun akọọlẹ akọkọ rẹ. Fi diẹ ninu awọn olumulo silẹ laisi ẹgbẹ eyikeyi lati rii daju pe wọn ko iwọle si. (Awọn olumulo titun le ṣẹda pẹlu ọwọ nipasẹ Auth0 Portal> Awọn olumulo> Ṣẹda olumulo.)
Ṣafikun ẹtọ Ẹgbẹ si Tokini Wiwọle
Awọn olumulo ti ni afikun si awọn ẹgbẹ, ṣugbọn alaye yii gbọdọ tun ṣe afihan ni awọn ami iraye si. Lati ni ibamu pẹlu OpenID Connect ati ni akoko kanna pada awọn ẹgbẹ ti a nilo, aami yoo nilo lati fi ara rẹ kun aṣa nipe. Ti ṣe nipasẹ awọn ofin Auth0.
Lati ṣẹda ofin kan, lọ si Auth0 Portal si ofin, najmite na Ṣẹda Ofin ki o si yan ohun ṣofo ofin lati awọn awoṣe.
Daakọ koodu ni isalẹ ki o fipamọ bi ofin titun Fi Ipe Ẹgbẹ (namespacedGroup.js):
Daakọ: Koodu yii gba ẹgbẹ olumulo akọkọ ti asọye ni Ifaagun Aṣẹ ati ṣafikun rẹ si ami iraye si bi ẹtọ aṣa (labẹ aaye orukọ rẹ, bi a ti beere nipasẹ Auth0).
Pada si oju-iwe ofin ati ṣayẹwo pe o ni awọn ofin meji ti a kọ sinu ilana atẹle:
auth0-aṣẹ-itẹsiwaju
Fi Ipe Ẹgbẹ
Ilana naa ṣe pataki nitori aaye ẹgbẹ gba ofin ni asynchronously auth0-aṣẹ-itẹsiwaju ati lẹhin eyi o jẹ afikun bi ẹtọ nipasẹ ofin keji. Abajade jẹ ami iwọle bi eleyi:
Bayi o nilo lati tunto aṣoju Aṣoju lati ṣayẹwo iwọle olumulo, fun eyiti ẹgbẹ yoo fa lati ẹtọ (https://sa.io/group) ninu awọn pada wiwọle àmi. Eyi ni koko-ọrọ fun apakan atẹle ti nkan naa.
Iṣeto ni aṣẹ ni Istio
Fun aṣẹ lati ṣiṣẹ, o gbọdọ mu RBAC ṣiṣẹ fun Istio. Lati ṣe eyi, a yoo lo eto atẹle:
1 - mu RBAC ṣiṣẹ nikan fun awọn iṣẹ ati awọn aaye orukọ ti a ṣe akojọ si ni aaye Inclusion;
2 - a ṣe atokọ atokọ ti awọn iṣẹ wa.
Jẹ ki a lo iṣeto ni pẹlu aṣẹ atẹle:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
Gbogbo awọn iṣẹ ni bayi nilo Iṣakoso Wiwọle orisun-Ipa. Ni awọn ọrọ miiran, iraye si gbogbo awọn iṣẹ jẹ eewọ ati pe yoo ja si esi kan RBAC: access denied. Bayi jẹ ki a gba iwọle si awọn olumulo ti a fun ni aṣẹ.
Wiwọle iṣeto ni fun deede awọn olumulo
Gbogbo awọn olumulo gbọdọ ni iwọle si awọn iṣẹ SA-Frontend ati SA-WebApp. Ti ṣe imuse nipa lilo awọn orisun Istio atẹle:
Ipa Iṣẹ - ipinnu awọn ẹtọ ti olumulo ni;
IṣẹRoleBinding - pinnu ẹni ti Iṣẹ Iṣẹ yii jẹ ti.
Fun awọn olumulo lasan a yoo gba iraye si awọn iṣẹ kan (servicerole.yaml):
Njẹ "gbogbo awọn olumulo" tumọ si pe awọn olumulo ti ko ni idaniloju yoo tun ni iwọle si SA WebApp? Rara, eto imulo naa yoo ṣayẹwo iwulo ti ami JWT.
Jẹ ki a lo awọn atunto:
$ 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
Wiwọle iṣeto ni fun awọn oniwontunniwonsi
Fun awọn oniwontunniwonsi, a fẹ lati jẹ ki iraye si gbogbo awọn iṣẹ (moodi-iṣẹ-ipa.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
Nitori caching ni awọn aṣoju, o le gba to iṣẹju diẹ fun awọn ofin aṣẹ lati ni ipa. O le lẹhinna rii daju wipe awọn olumulo ati awọn oniwontunniwonsi ni orisirisi awọn ipele ti wiwọle.
Ipari lori apakan yii
Ni pataki botilẹjẹpe, njẹ o ti rii irọrun, ailagbara, iwọn ati ọna aabo si ijẹrisi ati aṣẹ?
Awọn orisun Istio mẹta nikan (RbacConfig, ServiceRole, ati ServiceRoleBinding) ni a nilo lati ṣaṣeyọri iṣakoso ti o dara lori ijẹrisi ati aṣẹ ti iraye si olumulo ipari si awọn iṣẹ.
Ni afikun, a ti ṣe abojuto awọn ọran wọnyi lati inu awọn iṣẹ aṣoju wa, ṣiṣe aṣeyọri:
idinku iye koodu jeneriki ti o le ni awọn iṣoro aabo ati awọn idun;
idinku nọmba awọn ipo aṣiwere ninu eyiti aaye ipari kan ti jade lati wa lati ita ati gbagbe lati jabo rẹ;
imukuro iwulo lati ṣe imudojuiwọn gbogbo awọn iṣẹ ni gbogbo igba ti ipa tuntun tabi ẹtọ ti ṣafikun;
pe awọn iṣẹ tuntun wa rọrun, aabo ati iyara.
ipari
Istio ngbanilaaye awọn ẹgbẹ lati dojukọ awọn orisun wọn lori awọn iṣẹ ṣiṣe to ṣe pataki ti iṣowo laisi fifi afikun si awọn iṣẹ, yi wọn pada si ipo micro.
Nkan naa (ni awọn ẹya mẹta) pese imọ ipilẹ ati awọn ilana iṣe adaṣe ti o ṣetan fun bibẹrẹ pẹlu Istio ni awọn iṣẹ akanṣe gidi.