Air ais gu microservices le Istio. Pàirt 3

Air ais gu microservices le Istio. Pàirt 3

Thoir an aire. eadar-theangachadh.: A 'chiad phàirt bha an t-sreath seo gu sònraichte airson eòlas fhaighinn air comasan Istio agus an taisbeanadh ann an gnìomh, an dàrna fear - slighe air a ghleusadh gu grinn agus riaghladh trafaic lìonra. A-nis bruidhnidh sinn mu thèarainteachd: gus na gnìomhan bunaiteach co-cheangailte ris a nochdadh, bidh an t-ùghdar a’ cleachdadh seirbheis dearbh-aithne Auth0, ach faodar solaraichean eile a rèiteachadh san aon dòigh.

Stèidhich sinn cruinneachadh Kubernetes anns an do chleachd sinn Istio agus eisimpleir de thagradh microservice, Sentiment Analysis, gus comasan Istio a nochdadh.

Le Istio, bha e comasach dhuinn na seirbheisean againn a chumail beag oir chan fheum iad sreathan mar Retries, Timeouts, Circuit Breakers, Tracing, Monitoring. . A bharrachd air an sin, chleachd sinn dòighean deuchainn is cleachdadh adhartach: deuchainn A/B, sgàthan agus sgaoileadh canary.

Air ais gu microservices le Istio. Pàirt 3

Anns an stuth ùr, bidh sinn a 'dèiligeadh ris na sreathan mu dheireadh air an t-slighe gu luach gnìomhachais: dearbhadh agus ùghdarras - agus ann an Istio tha e na fhìor thoileachas!

Dearbhadh agus ùghdarras ann an Istio

Cha bhiodh mi a-riamh air a chreidsinn gum bithinn air mo bhrosnachadh le dearbhadh agus ùghdarras. Dè as urrainn do Istio a thabhann bho shealladh teicneòlais gus na cuspairean sin a dhèanamh spòrsail agus, eadhon nas motha na sin, brosnachail dhut?

Tha am freagairt sìmplidh: bidh Istio a’ gluasad uallach airson na comasan sin bho na seirbheisean agad gu neach-ionaid Envoy. Mun àm a ruigeas na h-iarrtasan na seirbheisean, tha iad air an dearbhadh agus air an ceadachadh mu thràth, agus mar sin chan eil agad ach còd a tha feumail airson gnìomhachas a sgrìobhadh.

Tha e glè mhath? Bheir sinn sùil a-staigh!

Dearbhadh le Ùghdar 0

Mar fhrithealaiche airson dearbh-aithne agus riaghladh ruigsinneachd, cleachdaidh sinn Auth0, aig a bheil dreach deuchainn, a tha intuitive a chleachdadh agus is toil leam e gu sìmplidh. Ach, faodar na h-aon phrionnsapalan a chuir an sàs ann an gin eile Gnìomhan OpenID Connect: KeyCloak, IdentityServer agus mòran eile.

Gus tòiseachadh, rachaibh gu Portal Ùghdar 0 leis a’ chunntas agad, cruthaich neach-gabhail (neach-gabhail - “neach-gabhail”, aonad aonaranachd loidsigeach, airson tuilleadh fiosrachaidh faic sgrìobhainnean - mu thuairmeas. eadar-theangachadh.) agus rach gu Aplacaidean > Default Appa ’taghadh Domain, mar a chithear san dealbh gu h-ìosal:

Air ais gu microservices le Istio. Pàirt 3

Sònraich an àrainn seo san fhaidhle resource-manifests/istio/security/auth-policy.yaml (tùs):

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

Le leithid de ghoireas, Pilot (aon de na trì co-phàirtean Plane Smachd bunaiteach ann an Istio - approx. transl.) a’ rèiteachadh Tosgaire gus iarrtasan a dhearbhadh mus cuir iad air adhart iad gu seirbheisean: sa-web-app и sa-feedback. Aig an aon àm, chan eil an rèiteachadh air a chuir an sàs ann an teachdaichean seirbheis sa-frontend, a’ leigeil leinn an aghaidh fhàgail gun dearbhadh. Gus am Poileasaidh a chuir an sàs, ruith an àithne:

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

Till don duilleag agus dèan iarrtas - chì thu gu bheil e a 'crìochnachadh leis an inbhe 401 Gun chead. A-nis leig dhuinn luchd-cleachdaidh aghaidh ath-stiùireadh gus dearbhadh le Auth0.

A’ dearbhadh iarrtasan le Auth0

Gus iarrtasan cleachdaiche deireannach a dhearbhadh, feumaidh tu API a chruthachadh ann an Auth0 a bhios a’ riochdachadh nan seirbheisean dearbhte (lèirmheasan, mion-fhiosrachadh, agus rangachadh). Gus API a chruthachadh, rachaibh gu Portal Auth0> APIs> Cruthaich API agus lìon am foirm:

Air ais gu microservices le Istio. Pàirt 3

Tha am fiosrachadh cudromach an seo chomharrachadh, a chleachdas sinn nas fhaide air adhart san sgriobt. Sgrìobhaidh sinn e mar seo:

  • Luchd-amais: {YOUR_AUDIENCE}

Tha am mion-fhiosrachadh a tha a dhìth oirnn suidhichte air Portal Auth0 san roinn Tagraidhean — tagh Iarrtas deuchainn (air a chruthachadh gu fèin-ghluasadach còmhla ris an API).

An seo bidh sinn a 'sgrìobhadh:

  • Domain: {YOUR_DOMAIN}
  • ID neach-dèiligidh: {YOUR_CLIENT_ID}

Sgrolaich gu Iarrtas deuchainn gu raon teacsa URLan Callback ceadaichte (URLan fuasglaidh airson a’ ghairm air ais), anns am bi sinn a’ sònrachadh an URL far am bu chòir an gairm a chuir às deidh an dearbhadh a chrìochnachadh. Anns a 'chùis againn tha e:

http://{EXTERNAL_IP}/callback

Agus airson URLan Log a-mach ceadaichte (URLan ceadaichte airson logadh a-mach) cuir ris:

http://{EXTERNAL_IP}/logout

Gluaisidh sinn air adhart chun an aghaidh.

Ùrachadh luath air ìre Frontend

Tionndaidh gu meur auth0 repozitoria [istio-mastery]. Anns a’ mheur seo, tha an còd aghaidh air atharrachadh gus luchd-cleachdaidh ath-stiùireadh gu Auth0 airson dearbhadh agus an comharra JWT a chleachdadh ann an iarrtasan gu seirbheisean eile. Tha an tè mu dheireadh air a chur an gnìomh mar a leanas (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));
}

Gus an aghaidh atharrachadh gus dàta luchd-gabhail a chleachdadh ann an Auth0, fosgail sa-frontend/src/services/Auth.js agus cuir na luachan a sgrìobh sinn gu h-àrd an àite (Ùghdar.js):

const Config = {
    clientID: '{YOUR_CLIENT_ID}',
    domain:'{YOUR_DOMAIN}',
    audience: '{YOUR_AUDIENCE}',
    ingressIP: '{EXTERNAL_IP}' // Используется для редиректа после аутентификации
}

Tha an tagradh deiseil. Sònraich an ID Docker agad anns na h-òrdughan gu h-ìosal nuair a bhios tu a’ togail agus a’ cleachdadh nan atharrachaidhean a chaidh a dhèanamh:

$ 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

Feuch an aplacaid! Thèid do ath-stiùireadh gu Auth0, far am feum thu logadh a-steach (no clàradh), às deidh sin thèid do chuir air ais chun duilleag às an tèid iarrtasan dearbhte a dhèanamh. Ma dh’ fheuchas tu ris na h-òrdughan a tha air an ainmeachadh anns a’ chiad phàirtean den artaigil le curl, gheibh thu an còd 401 Inbhe Còd, a’ comharrachadh nach eil an t-iarrtas ceadaichte.

Gabhamaid an ath cheum - ùghdarrachadh iarrtasan.

Ceadachadh le Ùghdar 0

Leigidh dearbhadh leinn tuigse fhaighinn air cò an neach-cleachdaidh a th’ ann, ach tha feum air cead gus faighinn a-mach cò ris a tha cothrom aca. Tha Istio a’ tabhann innealan airson seo cuideachd.

Mar eisimpleir, cruthaichidh sinn dà bhuidheann luchd-cleachdaidh (faic an dealbh gu h-ìosal):

  • Luchd-cleachdaidh (luchd-cleachdaidh) - le ruigsinneachd a-mhàin air seirbheisean SA-WebApp agus SA-Frontend;
  • Modaireatairean (modaireatairean) - le cothrom air na trì seirbheisean.

Air ais gu microservices le Istio. Pàirt 3
Bun-bheachd ùghdarrachadh

Gus na buidhnean sin a chruthachadh, cleachdaidh sinn an leudachadh Ùghdarrachadh Auth0 agus cleachdaidh sinn Istio gus diofar ìrean ruigsinneachd a thoirt dhaibh.

Stàladh agus rèiteachadh Ùghdarrachadh Auth0

Ann am portal Auth0, rachaibh gu leudachain (leudachain) agus a stàladh Ùghdarrachadh ugh0. Às deidh an stàladh, rachaibh gu Leudachadh Ùghdarrachaidh, agus an sin - gu rèiteachadh an neach-gabhail le bhith a’ cliogadh air an taobh dheas gu h-àrd agus a’ taghadh an roghainn clàr iomchaidh (Rèiteachadh). Cuir buidhnean an gnìomh (buidhnean) agus cliog air a’ phutan foillsich riaghailt (Foillsich riaghailt).

Air ais gu microservices le Istio. Pàirt 3

A’ cruthachadh bhuidhnean

Ann an Leudachadh Ceadachaidh rachaibh gu buidhnean agus cruthaich buidheann Modaireatairean. Leis gun làimhsich sinn a h-uile neach-cleachdaidh dearbhte mar luchd-cleachdaidh cunbhalach, chan eil feum air buidheann a bharrachd a chruthachadh dhaibh.

Tagh buidheann Modaireatairean, Clò-bhuail Cuir buill ris, cuir do phrìomh chunntas. Fàg cuid de luchd-cleachdaidh gun bhuidheann sam bith gus dèanamh cinnteach gu bheil ruigsinneachd air a dhiùltadh dhaibh. (Faodar luchd-cleachdaidh ùr a chruthachadh le làimh tro Portal Auth0> Luchd-cleachdaidh> Cruthaich cleachdaiche.)

Cuir tagradh buidhne ri Access Token

Chaidh cleachdaichean a chur ri buidhnean, ach feumaidh am fiosrachadh seo a bhith air a nochdadh ann an comharran ruigsinneachd. Gus gèilleadh ri OpenID Connect agus aig an aon àm na buidhnean a tha a dhìth oirnn a thilleadh, feumaidh an tòcan a chuid fhèin a chur ris tagradh àbhaisteach. Air a chur an gnìomh tro riaghailtean Auth0.

Gus riaghailt a chruthachadh, rachaibh gu Auth0 Portal gu riaghailtean, Clò-bhuail Cruthaich Riaghailt agus tagh riaghailt falamh bho na teamplaidean.

Air ais gu microservices le Istio. Pàirt 3

Dèan lethbhreac den chòd gu h-ìosal agus sàbhail e mar riaghailt ùr Cuir Tagradh Buidhne ris (namespacedGroup.js):

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

thuirt: Bidh an còd seo a’ gabhail a’ chiad bhuidheann luchd-cleachdaidh a tha air am mìneachadh anns an Leudachadh Ùghdarrachaidh agus ga chur ris an tòcan ruigsinneachd mar thagradh àbhaisteach (fon ainm-àite, mar a dh’ fheumar le Auth0).

Till dhan duilleag riaghailtean agus dèan cinnteach gu bheil dà riaghailt agad sgrìobhte san òrdugh a leanas:

  • ùghdar0-ùghdarrachadh-leudachadh
  • Cuir Tagradh Buidhne ris

Tha an t-òrdugh cudromach oir tha an raon buidhne a 'faighinn an riaghailt gu neo-chinnteach ùghdar0-ùghdarrachadh-leudachadh agus an deigh sin tha e air a chur ris mar thagradh leis an dara riaghailt. Is e an toradh comharra ruigsinneachd mar seo:

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

A-nis feumaidh tu an neach-ionaid Envoy a rèiteachadh gus sùil a thoirt air ruigsinneachd luchd-cleachdaidh, far an tèid am buidheann a tharraing bhon tagradh (https://sa.io/group) anns a’ chomharra ruigsinneachd air ais. Is e seo an cuspair airson an ath earrann den artaigil.

Rèiteachadh ùghdarrais ann an Istio

Airson cead a bhith ag obair, feumaidh tu RBAC a chomasachadh airson Istio. Gus seo a dhèanamh, cleachdaidh sinn an rèiteachadh a leanas:

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" 

Mìneachaidhean:

  • 1 - cuir an comas RBAC a-mhàin airson seirbheisean agus àiteachan ainmean air an liostadh san raon Inclusion;
  • 2 - tha sinn a 'toirt liosta de na seirbheisean againn.

Feuch an cuir sinn an rèiteachadh an sàs leis an òrdugh a leanas:

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

Feumaidh a h-uile seirbheis a-nis Smachd Ruigsinneachd Stèidhichte air Dreuchd. Ann am faclan eile, tha ruigsinneachd air a h-uile seirbheis toirmisgte agus thig e gu freagairt RBAC: access denied. A-nis leig leinn cothrom a thoirt do luchd-cleachdaidh ùghdarraichte.

Suidheachadh ruigsinneachd airson luchd-cleachdaidh cunbhalach

Feumaidh cothrom a bhith aig a h-uile neach-cleachdaidh air seirbheisean SA-Frontend agus SA-WebApp. Air a bhuileachadh a’ cleachdadh na goireasan Istio a leanas:

  • Seirbheis Role - a 'dearbhadh nan còraichean a tha aig an neach-cleachdaidh;
  • SeirbheisRoleBinding - a’ dearbhadh cò dha a bhuineas an t-Seirbheis seo.

Do luchd-cleachdaidh àbhaisteach leigidh sinn cothrom air seirbheisean sònraichte (seirbheis.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: ["*"]

Agus às deidh regular-user-binding cuir ServiceRole an sàs anns a h-uile neach-tadhail duilleag (cunbhalach-cleachdaiche-seirbheis-ròl-ceangail.yaml):

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

A bheil “a h-uile neach-cleachdaidh” a’ ciallachadh gum bi cothrom aig luchd-cleachdaidh gun dearbhadh air SA WebApp cuideachd? Chan e, nì am poileasaidh sgrùdadh air dligheachd comharra JWT.

Feuch an cuir sinn na rèiteachaidhean an sàs:

$ 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

Suidheachadh ruigsinneachd airson modaireatairean

Airson modaireatairean, tha sinn airson cothrom fhaighinn air a h-uile seirbheis (mod-seirbheis-ròl.yaml):

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

Ach tha sinn ag iarraidh a leithid de chòraichean a-mhàin don luchd-cleachdaidh sin aig a bheil tagradh anns a’ chomharra ruigsinneachd https://sa.io/group le brìgh Moderators (mod-seirbheis-ròl-ceangail.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" 

Feuch an cuir sinn na rèiteachaidhean an sàs:

$ 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

Mar thoradh air tasgadh ann an teachdairean, dh’ fhaodadh gun toir e mionaid no dhà mus tig riaghailtean ceadachaidh gu buil. Faodaidh tu an uairsin dèanamh cinnteach gu bheil diofar ìrean ruigsinneachd aig luchd-cleachdaidh agus modaireatairean.

Co-dhùnadh am pìos seo a

Gu fìrinneach, ge-tà, am faca tu a-riamh dòigh-obrach nas sìmplidh, gun oidhirp, scalable agus tèarainte a thaobh dearbhadh agus ùghdarras?

Cha robh feum ach air trì goireasan Istio (RbacConfig, ServiceRole, agus ServiceRoleBinding) gus smachd mionaideach a choileanadh air dearbhadh agus ceadachadh ruigsinneachd cleachdaiche deireannach air seirbheisean.

A bharrachd air an sin, tha sinn air aire a thoirt do na cùisean sin a-mach às na seirbheisean teachdaiche againn, a’ coileanadh:

  • a 'lùghdachadh na tha de chòd coitcheann a dh' fhaodadh duilgheadasan tèarainteachd agus biastagan a bhith ann;
  • a 'lùghdachadh an àireamh de shuidheachaidhean gòrach far an robh aon cheann-uidhe ruigsinneach bhon taobh a-muigh agus dhìochuimhnich aithris a dhèanamh air;
  • cur às don fheum air a h-uile seirbheis ùrachadh a h-uile uair a thèid dreuchd no còir ùr a chur ris;
  • gum bi seirbheisean ùra fhathast sìmplidh, tèarainte agus luath.

co-dhùnadh

Tha Istio a’ leigeil le sgiobaidhean na goireasan aca a chuimseachadh air gnìomhan a tha deatamach do ghnìomhachas gun a bhith a’ cur cosgais air seirbheisean, gan tilleadh gu meanbh-inbhe.

Thug an artaigil (ann an trì pàirtean) seachad eòlas bunaiteach agus stiùireadh practaigeach deiseil airson tòiseachadh le Istio ann am fìor phròiseactan.

PS bhon eadar-theangair

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann