Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Fanamarihana. transl.: Ny ampahany voalohany ity andiany ity dia natokana hahafantarana ny fahaizan'i Istio sy hanehoana azy ireo amin'ny asa, ny faharoa - zotra voarindra tsara sy fitantanana ny fifamoivoizana amin'ny tambajotra. Ankehitriny dia hiresaka momba ny fiarovana isika: mba hampisehoana ireo fiasa fototra mifandraika amin'izany, ny mpanoratra dia mampiasa ny serivisy famantarana Auth0, fa ny mpamatsy hafa dia azo amboarina amin'ny fomba mitovy.

Nanangana cluster Kubernetes izay nametrahanay an'i Istio sy ohatra fampiharana microservice, Fanadihadiana Sentiment, mba hanehoana ny fahaizan'i Istio.

Miaraka amin'ny Istio, afaka nitazona ny serivisy ho kely izahay satria tsy mila mametraka sosona toy ny Retries, Timeout, Circuit Breakers, Tracing, Monitoring. . Ho fanampin'izay, nampiasa teknika fitiliana sy fametrahana mandroso izahay: fitiliana A/B, fitaratra ary fanodikodinana canary.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Ao amin'ny fitaovana vaovao, hiatrika ny sosona farany amin'ny lalana mankany amin'ny sandan'ny orinasa isika: fanamarinana sy fanomezan-dΓ lana - ary ao Istio dia tena fahafinaretana!

Fanamarinana sy fanomezan-dΓ lana ao Istio

Tsy nino mihitsy aho fa ho aingam-panahy avy amin'ny fanamarinana sy fanomezan-dΓ lana. Inona no azon'i Istio atolotra avy amin'ny fomba fijery ara-teknolojia mba hampifaliana ireo lohahevitra ireo ary indrindra indrindra, manentana anao?

Tsotra ny valiny: Afindran'i Istio ny andraikitra amin'ireo fahaiza-manao ireo avy amin'ny serivisinao mankany amin'ny proxy Envoy. Rehefa tonga any amin'ny serivisy ny fangatahana dia efa voamarina sy nahazo alalana izy ireo, ka ny hany ataonao dia ny manoratra kaody mahasoa amin'ny raharaham-barotra.

Toa tsara izany? Andeha hojerentsika ny ao anatiny!

Fanamarinana amin'ny Auth0

Amin'ny maha-mpizara ho an'ny fitantanana ny maha-izy azy sy ny fidirana, dia hampiasa ny Auth0 izahay, izay manana dikan-tsarimihetsika, intuitive ampiasaina ary tiako fotsiny. Na izany aza, ireo fitsipika ireo dia azo ampiharina amin'ny hafa OpenID Connect fampiharana: KeyCloak, IdentityServer sy ny maro hafa.

Mba hanombohana, mandehana mankany Auth0 Portal miaraka amin'ny kaontinao, mamorona mpanofa (mpanofa - "mpanofa", singa lojika mitokana, raha mila fanazavana fanampiny dia jereo tahirin-kevitra - eo ho eo. transl.) ary mandehana Applications > App Defaultmifidy Domain, araka ny aseho amin'ny pikantsary eto ambany:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Ampidiro ao amin'ny rakitra ity sehatra ity resource-manifests/istio/security/auth-policy.yaml (SOURCE):

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: auth-policy
spec:
  targets:
  - name: sa-web-app
  - name: sa-feedback
  origins:
  - jwt:
      issuer: "https://{YOUR_DOMAIN}/"
      jwksUri: "https://{YOUR_DOMAIN}/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

Miaraka amin'ny loharano toy izany, Pilot (iray amin'ireo singa telo fototra amin'ny fiaramanidina Fanaraha-maso ao Istio - eo ho eo amin'ny transl.) manitsy ny Envoy hanamarina ny fangatahana alohan'ny handefasana azy ireo amin'ny serivisy: sa-web-app ΠΈ sa-feedback. Amin'izay fotoana izay ihany koa dia tsy mihatra amin'ny Envoys ny serivisy sa-frontend, mamela antsika hamela ny frontend ho tsy voamarina. Raha hampihatra ny Politika dia araho ny baiko:

$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io β€œauth-policy” created

Miverena amin'ny pejy ary manaova fangatahana - ho hitanao fa mifarana amin'ny sata izany 401 Tsy nahazoana alalana. Andeha hojerentsika ny mpampiasa frontend hanamarina amin'ny Auth0.

Manamarina ny fangatahana amin'ny Auth0

Mba hanamarinana ny fangatahan'ny mpampiasa farany dia mila mamorona API ao amin'ny Auth0 ianao izay hisolo tena ny serivisy voamarina (famerenana, antsipiriany ary naoty). Raha te hamorona API dia mandehana any Auth0 Portal > API > Mamorona API ary fenoy ny taratasy:

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Ny fampahalalana manan-danja eto dia Solon'anarana, izay hampiasaintsika any aoriana any amin'ny script. Aleo soratana toy izao:

  • mpihaino: {YOUR_AUDIENCE}

Ny antsipiriany sisa ilaintsika dia hita ao amin'ny Auth0 Portal ao amin'ny fizarana Applications - mifidy Fampiharana fitsapana (voaforona ho azy miaraka amin'ny API).

Eto isika dia hanoratra:

  • Domain: {DOMAIN_ANAO}
  • ID mpanjifa: {YOUR_CLIENT_ID}

Scroll to Fampiharana fitsapana amin'ny sehatry ny lahatsoratra URL navela Callback (URL voavaha ho an'ny antso miverina), izay amaritanay ny URL tokony handefasana ny antso rehefa vita ny fanamarinana. Amin'ny tranga misy antsika dia:

http://{EXTERNAL_IP}/callback

And for URL navela hivoaka (URL navela hivoahana) ampio:

http://{EXTERNAL_IP}/logout

Andao hiroso amin'ny frontend.

Fanavaozana Frontend

Hiverina any amin'ny branch auth0 repository [istio-mastery]. Ao amin'ity sampana ity, ny kaody frontend dia ovaina mba hamerenana ireo mpampiasa amin'ny Auth0 ho fanamarinana ary hampiasa ny marika JWT amin'ny fangatahana amin'ny serivisy hafa. Ity farany dia ampiharina toy izao manaraka izao (App.js):

analyzeSentence() {
    fetch('/sentiment', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${auth.getAccessToken()}` // Access Token
        },
        body: JSON.stringify({ sentence: this.textField.getValue() })
    })
        .then(response => response.json())
        .then(data => this.setState(data));
}

Raha hanova ny frontend hampiasa angon'ny mpanofa ao amin'ny Auth0, sokafy sa-frontend/src/services/Auth.js ary soloy ao ny soatoavina nosoratanay teo ambony (Auth.js):

const Config = {
    clientID: '{YOUR_CLIENT_ID}',
    domain:'{YOUR_DOMAIN}',
    audience: '{YOUR_AUDIENCE}',
    ingressIP: '{EXTERNAL_IP}' // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚Π° послС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
}

Efa vonona ny fampiharana. Ampidiro ny ID Docker anao amin'ny baiko etsy ambany rehefa manangana sy mametraka ny fanovana natao:

$ docker build -f sa-frontend/Dockerfile 
 -t $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0 
 sa-frontend

$ docker push $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0

$ kubectl set image deployment/sa-frontend 
 sa-frontend=$DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0

Andramo ny app! Haverina any amin'ny Auth0 ianao, izay mila miditra (na misoratra anarana), aorian'izay dia halefa any amin'ny pejy izay hanaovanao fangatahana efa voamarina ianao. Raha manandrana ny baiko voalaza ao amin'ny ampahany voalohany amin'ny lahatsoratra miaraka amin'ny curl ianao dia hahazo ny kaody 401 Kaody sata, manambara fa tsy nahazoana alalana ny fangatahana.

Andeha isika hanao ny dingana manaraka - manome alalana ny fangatahana.

Fanomezana alalana amin'ny Auth0

Ny fanamarinana dia mamela antsika hahatakatra hoe iza no mpampiasa, fa ilaina ny fanomezan-dΓ lana hahafantarana izay azon'izy ireo idirana. Istio dia manolotra fitaovana ho an'izany koa.

Ohatra, andao hamorona vondrona mpampiasa roa (jereo ny kisary etsy ambany):

  • mpampiasa (mpampiasa) - miaraka amin'ny fidirana amin'ny serivisy SA-WebApp sy SA-Frontend ihany;
  • Ireo mpandrindra (mpandrindra) - miaraka amin'ny fidirana amin'ny serivisy telo.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3
Hevitra fanomezan-dΓ lana

Mba hamoronana ireo vondrona ireo dia hampiasa ny fanitarana Auth0 Authorization izahay ary hampiasa Istio mba hanomezana azy ireo ambaratonga fidirana samihafa.

Fametrahana sy fanamafisana ny Auth0 Authorization

Ao amin'ny vavahadin-tserasera Auth0, mandehana any amin'ny fanitarana (fanitarana) ary hametraka Auth0 Fanomezana. Aorian'ny fametrahana dia mandehana mankany Fanitarana Fanomezana, ary eo - mankany amin'ny firafitry ny mpanofa amin'ny fipihana eo amin'ny farany ambony havanana ary misafidy ny safidy sakafo mety (Fampifanarahana). Ampidiro ny vondrona (vondrona) ary tsindrio ny bokotra famoahana fitsipika (Fitsipika avoaka).

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Famoronana vondrona

Ao amin'ny Fanitarana Fanomezan-dΓ lana mandehana mankany Groups ary mamorona vondrona Moderators. Koa satria horaisinay ho toy ny mpampiasa mahazatra ny mpampiasa voamarina rehetra, dia tsy ilaina ny mamorona vondrona fanampiny ho azy ireo.

Mifidiana vondrona Moderators, Press Manampy Mpikambana, ampio ny kaontinao fototra. Avelao tsy hisy vondrona ny mpampiasa sasany mba hahazoana antoka fa tsy mahazo miditra izy ireo. (Ny mpampiasa vaovao dia azo noforonina tanana amin'ny alΓ lan'ny Auth0 Portal > Mpampiasa > Mamorona mpampiasa.)

Ampio ny fitakiana vondrona amin'ny Access Token

Nampiana vondrona ireo mpampiasa, saingy tsy maintsy hita taratra amin'ny token'ny fidirana ihany koa ity fampahalalana ity. Mba hanarahana ny OpenID Connect ary hamerina ireo vondrona ilaintsika, dia mila manampy ny azy ny marika fitakiana manokana. Nampiharina tamin'ny alΓ lan'ny fitsipika Auth0.

Raha te hamorona fitsipika dia mandehana any amin'ny Auth0 Portal to fitsipika, Press Mamorona fitsipika ary mifidiana fitsipika foana avy amin'ny mΓ΄dely.

Miverina amin'ny microservices miaraka amin'i Istio. Fizarana 3

Adikao ny kaody etsy ambany ary tehirizo ho fitsipika vaovao Ampio fitakiana vondrona (namespacedGroup.js):

function (user, context, callback) {
    context.accessToken['https://sa.io/group'] = user.groups[0];
    return callback(null, user, context);
}

fanamarihana: Ity kaody ity dia maka ny vondrona mpampiasa voalohany voafaritra ao amin'ny Fanitarana Fanomezan-dΓ lana ary manampy azy amin'ny mari-pamantarana fidirana ho toy ny fitakiana manokana (eo ambanin'ny toerana misy azy, araka ny takian'ny Auth0).

Hiverina any amin'ny page fitsipika ary jereo fa manana fitsipika roa nosoratana araka izao filaharana manaraka izao ianao:

  • auth0-fanomezana-fanitarana
  • Ampio fitakiana vondrona

Zava-dehibe ny baiko satria ny sahan'ny vondrona dia mandray ny fitsipika asynchronous auth0-fanomezana-fanitarana ary rehefa afaka izany dia ampiana ho fitakiana ny fitsipika faharoa. Ny vokatr'izany dia famantarana fidirana toy izao:

{
 "https://sa.io/group": "Moderators",
 "iss": "https://sentiment-analysis.eu.auth0.com/",
 "sub": "google-oauth2|196405271625531691872"
 // [сокращСно для наглядности]
}

Ankehitriny dia mila manamboatra ny proxy Envoy ianao mba hanamarinana ny fidirana amin'ny mpampiasa, izay hanesorana ny vondrona amin'ny fitakiana (https://sa.io/group) ao amin'ny token'ny fidirana miverina. Ity no lohahevitra ho an'ny fizarana manaraka amin'ny lahatsoratra.

Fametrahana fahazoan-dΓ lana amin'ny Istio

Mba hahazoana alalana hiasa dia tsy maintsy avelanao ny RBAC ho an'ny Istio. Mba hanaovana izany, dia hampiasa ity konfigurasi manaraka ity izahay:

apiVersion: "rbac.istio.io/v1alpha1"
kind: RbacConfig
metadata:
  name: default
spec:
  mode: 'ON_WITH_INCLUSION'                     # 1
  inclusion:
    services:                                   # 2
    - "sa-frontend.default.svc.cluster.local"
    - "sa-web-app.default.svc.cluster.local"
    - "sa-feedback.default.svc.cluster.local" 

fanazavana:

  • 1 - avelao ny RBAC ho an'ny serivisy sy ny toerana misy anarana voatanisa ao an-tsaha Inclusion;
  • 2 β€” mitanisa lisitr'ireo tolotray izahay.

Andao hampihatra ny configuration miaraka amin'ity baiko manaraka ity:

$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created

Ny serivisy rehetra izao dia mila fanaraha-maso ny fidirana amin'ny anjara andraikitra. Raha lazaina amin'ny teny hafa dia voarara ny fidirana amin'ny serivisy rehetra ary hiteraka valiny RBAC: access denied. Andeha isika hamela ny fidirana amin'ireo mpampiasa nahazo alalana.

Fametrahana fidirana ho an'ny mpampiasa mahazatra

Ny mpampiasa rehetra dia tsy maintsy manana fidirana amin'ny serivisy SA-Frontend sy SA-WebApp. Nampiharina tamin'ny fampiasana ireto loharanon-karena Istio manaraka ireto:

  • ServiceRole - mamaritra ny zo ananan'ny mpampiasa;
  • ServiceRoleBinding β€” mamaritra hoe an'iza io ServiceRole io.

Ho an'ny mpampiasa tsotra dia avelanay miditra amin'ny serivisy sasany (servicerole.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: regular-user
  namespace: default
spec:
  rules:
  - services: 
    - "sa-frontend.default.svc.cluster.local" 
    - "sa-web-app.default.svc.cluster.local"
    paths: ["*"]
    methods: ["*"]

Ary rehefa afaka regular-user-binding ampiharo ServiceRole amin'ny mpitsidika pejy rehetra (regular-user-service-role-binding.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: regular-user-binding
  namespace: default
spec:
  subjects:
  - user: "*"
  roleRef:
    kind: ServiceRole
    name: "regular-user"

Midika ve ny "mpampiasa rehetra" fa ny mpampiasa tsy voamarina dia hanana fidirana amin'ny SA WebApp ihany koa? Tsia, ny politika dia hanamarina ny maha-ara-dalΓ na ny marika JWT.

Andao hampihatra ny configurations:

$ 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

Fametrahana fidirana ho an'ny mpandrindra

Ho an'ny mpanelanelana, tianay ny hamela ny fidirana amin'ny serivisy rehetra (mod-service-role.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: mod-user
  namespace: default
spec:
  rules:
  - services: ["*"]
    paths: ["*"]
    methods: ["*"]

Fa ny zo toy izany ihany no tadiavinay ho an'ireo mpampiasa izay manana fitakiana ny token'ny fidirana https://sa.io/group misy dikany Moderators (mod-service-role-binding.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: mod-user-binding
  namespace: default
spec:
  subjects:
  - properties:
      request.auth.claims[https://sa.io/group]: "Moderators"
  roleRef:
    kind: ServiceRole
name: "mod-user" 

Andao hampihatra ny configurations:

$ 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

Noho ny caching ao amin'ny iraka, dia mety haharitra minitra vitsivitsy vao hanan-kery ny fitsipiky ny fanomezan-dΓ lana. Azonao atao ny miantoka fa manana ambaratonga fidirana samihafa ny mpampiasa sy ny mpandrindra.

Famaranana amin'ity ampahany ity

Raha ny tena marina anefa, efa nahita fomba tsotra kokoa, tsy misy ezaka, azo scalable ary azo antoka ve ianao amin'ny fanamarinana sy fanomezan-dΓ lana?

Loharano Istio telo ihany (RbacConfig, ServiceRole, ary ServiceRoleBinding) no takiana mba hahazoana fanaraha-maso tsara momba ny fanamarinana sy ny fanomezan-dΓ lana ny fidirana amin'ny serivisy ho an'ny mpampiasa farany.

Ho fanampin'izay, nikarakara ireto olana ireto izahay tamin'ny serivisy iraka, ka nahavita:

  • fampihenana ny habetsaky ny kaody jeneraly izay mety misy olana momba ny fiarovana sy ny bibikely;
  • fampihenana ny isan'ny toe-javatra adala izay nivadika ho azo idirana avy any ivelany ny teboka iray ka nanadino ny mitatitra izany;
  • fanafoanana ny filΓ na fanavaozana ny serivisy rehetra isaky ny misy andraikitra na zo vaovao ampiana;
  • fa ny serivisy vaovao dia mijanona ho tsotra, azo antoka ary haingana.

famaranana

Istio dia mamela ny ekipa hifantoka amin'ny loharanon-karenany amin'ny asa manan-danja amin'ny fandraharahana nefa tsy manampy ny serivisy, mamerina azy ireo amin'ny sata micro.

Ny lahatsoratra (amin'ny fizarana telo) dia nanome fahalalana fototra sy torolalana azo ampiharina amin'ny fanombohana amin'ny Istio amin'ny tetikasa tena izy.

PS avy amin'ny mpandika teny

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment