Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Tuhipoka. whakamaori.: Ko te wahi tuatahi i whakatapua tenei raupapa ki te mohio ki nga kaha o Istio me te whakaatu i a raatau mahi, te tuarua — te ararere me te whakahaere waka whatunga. Inaianei ka korero matou mo te haumarutanga: ki te whakaatu i nga mahi taketake e pa ana ki a ia, ka whakamahi te kaituhi i te ratonga tuakiri Auth0, engari ka taea te whirihora i etahi atu kaiwhakarato i te huarahi rite.

I whakaturia e matou he kahui Kubernetes i tukuna e matou a Istio me tetahi tauira tono moroiti, Tirohanga Manao, hei whakaatu i nga kaha o Istio.

I te taha o Istio, i taea e matou te pupuri i a matou ratonga kia iti na te mea karekau ratou e hiahia ki te whakatinana i nga paparanga penei i te Ngana Anō, Te Wā, Nga Kaiwhati Porowhita, Te Tirohanga, Te Aroturuki. . I tua atu, i whakamahia e matou nga whakamatautau matatau me nga tikanga tuku: te whakamatautau A/B, te whakaata me te hurihanga canary.

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

I roto i nga rauemi hou, ka mahi maatau ki nga paparanga whakamutunga i runga i te huarahi ki te uara pakihi: motuhēhēnga me te whakamana - a i Istio he tino koa!

Motuhēhēnga me te whakamanatanga i Istio

Kaore au i whakapono ka whakaaweahia ahau e te motuhēhēnga me te whakamanatanga. He aha ka taea e Istio te tuku mai i te tirohanga hangarau kia ngahau enei kaupapa, me te mea nui ake, he whakahihiri ki a koe?

He ngawari te whakautu: Ka huri a Istio i te kawenga mo enei kaha mai i o ratonga ki te takawaenga Envoy. I te wa e tae atu ai nga tono ki nga ratonga, kua whakamotuhēhēhia, kua whakamanahia, na ko te mahi anake ko te tuhi i te waehere whai hua pakihi.

He pai te tangi? Me titiro ki roto!

Motuhēhēnga me te Motuhēhē0

Hei tūmau mo te tuakiri me te whakahaere urunga, ka whakamahia e matou a Auth0, he putanga whakamatautau, he maamaa ki te whakamahi me te pai ki ahau. Heoi ano, ka taea te whakamahi i enei kaupapa ki tetahi atu Whakamahinga OpenID Connect: KeyCloak, IdentityServer me te tini ke atu.

Hei timata, haere ki Pouaka Tuturu0 me to putea, hanga he kairëti (rëti - “rëti”, waeine arorau mo te wehe, mo etahi atu taipitopito tirohia tuhinga — āhua. whakawhiti.) ka haere ki Taupānga > Taupānga Taunoate kōwhiri Domain, pera i te whakaaturanga i raro nei:

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Tauwhāitihia tēnei rohe ki te kōnae resource-manifests/istio/security/auth-policy.yaml (puna):

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

Na taua rauemi, Pilot (kotahi o nga waahanga e toru o te Mahere Mana i Istio - tata ki te whakamaoritanga) ka whirihora i a Envoy ki te whakamotuhēhē i ngā tono i mua i te tuku atu ki ngā ratonga: sa-web-app и sa-feedback. I te wa ano, kaore e whakamahia te whirihoranga ki nga Kaihoko ratonga sa-frontend, ka taea e maatau te waiho i te pito o mua kaore he motika. Hei whakamahi i te Kaupapahere, whakahaeretia te whakahau:

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

Hoki atu ki te wharangi ka tono tono - ka kite koe ka mutu me te mana 401 Kare. Inaianei me huri ano nga kaiwhakamahi o mua ki te whakamotuhēhē me te Auth0.

Motuhēhēnga tono mā te Auth0

Hei whakamotuhēhē i ngā tono a te kaiwhakamahi mutunga, me hanga e koe he API ki Auth0 hei tohu mo nga ratonga whakamotuhēhē (arotake, taipitopito, me nga whakatau). Hei hanga API, haere ki Auth0 Portal > APIs > Waihanga API ka whakakiia te puka:

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Ko nga korero nui kei konei tautuhi, ka whakamahia e matou i muri mai i te tuhinga. Me tuhi penei:

  • Ngā kaipānui: {YOUR_AUDIENCE}

Ko nga toenga korero e hiahiatia ana kei runga i te Auth0 Portal i te waahanga tono — whiriwhiri Tono Whakamatau (i hanga aunoa me te API).

I konei ka tuhia e matou:

  • Domain: {YOUR_DOMAIN}
  • Id Kiritaki: {YOUR_CLIENT_ID}

Panuku ki Tono Whakamatau ki te mara kuputuhi Nga URL Waea Whakahoki Whakaaetia (nga URL kua whakatauhia mo te hokinga mai), ka tohua e matou te URL e tukuna ai te waea i muri i te otinga o te motuhēhēnga. I roto i to maatau ko:

http://{EXTERNAL_IP}/callback

Tuhinga o mua Whakaaetia nga URL Takiputa (whakaaetia nga URL mo te takiputa) taapiri:

http://{EXTERNAL_IP}/logout

Me haere tatou ki mua.

Whakahoutanga o mua

Hurihia ki te peka auth0 putunga [istio-mastery]. I roto i tenei peka, ka hurihia te waehere o mua ki te tuku i nga kaiwhakamahi ki te Auth0 mo te motuhēhēnga me te whakamahi i te tohu JWT i roto i nga tono ki etahi atu ratonga. Ko te whakamutunga ka whakatinanahia e whai ake nei (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));
}

Hei huri i te pito o mua ki te whakamahi i nga raraunga kairëti i Auth0, tuwhera sa-frontend/src/services/Auth.js ka whakakapi i nga uara i tuhia i runga ake nei (Auth.js):

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

Kua reri te tono. Tauwhāitihia to ID Docker i roto i nga whakahau i raro i te wa e hanga ana me te whakamahi i nga huringa i mahia:

$ 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

Whakamātauria te taupānga! Ka tukuna koe ki te Auth0, me whakauru koe (me rehita ranei), muri iho ka whakahokia koe ki te wharangi ka tukuna nga tono kua whakamanahia. Mena ka whakamatau koe i nga whakahau e whakahuahia ana i nga waahanga tuatahi o te tuhinga me te curl, ka whiwhi koe i te waehere 401 Waehere Tūnga, e tohu ana kaore i te whakamanahia te tono.

Me mahi te mahi ka whai ake - whakamana i nga tono.

Whakamanatanga me Auth0

Ko te motuhēhēnga ka taea e mātou te mārama ko wai te kaiwhakamahi, engari me whakamanahia kia mohio ai he aha ta ratou e uru atu ai. Ka tukuna ano e Istio nga taputapu mo tenei.

Hei tauira, me hanga kia rua nga roopu kaiwhakamahi (tirohia te hoahoa i raro nei):

  • kaiwhakamahi (kaiwhakamahi) — me te uru anake ki nga ratonga SA-WebApp me SA-Frontend;
  • Kaiwhakahaere (kaiwhakahaere) — me te uru ki nga ratonga e toru.

Hoki ki nga ratonga miihini me Istio. Wāhanga 3
Te ariā whakamana

Hei hanga i enei roopu, ka whakamahia e matou te toronga Whakamanatanga Auth0 me te whakamahi i a Istio ki te whakarato ki a raatau nga momo momo urunga.

Te whakaurunga me te whirihoranga o te Whakamanatanga Auth0

I te tomokanga Auth0, haere ki nga toronga (Toronga) ka tāuta Whakamanatanga0. I muri i te whakaurunga, haere ki Toronga Whakamana, a i reira - ki te whirihoranga a te kairëti ma te paato i te taha matau o runga me te kowhiri i te whiringa tahua e tika ana (Whirihoranga). Whakahohehia nga roopu (Nga Roopu) ka paato i te paatene ture whakaputa (Whakaputa ture).

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Te hanga roopu

I roto i te Whakaaetanga Toronga haere ki Ngā Roopu me te hanga roopu Ngā kaitono. I te mea ka whakatauhia e matou nga kaiwhakamahi whakamotuhēhē katoa hei kaiwhakamahi auau, kaore he take ki te hanga roopu taapiri mo ratou.

Whiriwhiria he roopu Ngā kaitono, Perehi Taapirihia Nga Mema, tāpirihia tō pūkete matua. Waiho etahi kaiwhakamahi kaore he roopu ki te whakarite kia kore ratou e uru. (Ka taea te hanga a ringa nga kaiwhakamahi hou ma te Auth0 Portal > Kaiwhakamahi > Waihanga Kaiwhakamahi.)

Tāpiri Kereme Rōpū ki te Tohu Uru

Kua whakauruhia nga kaiwhakamahi ki nga roopu, engari me whakaatu ano enei korero ki nga tohu uru. Hei ū ki te OpenID Connect me te whakahoki ano i nga roopu e hiahiatia ana e matou, me tapiri e te tohu ana ake kerēme ritenga. I whakatinanahia na roto i nga ture Auth0.

Hei waihanga ture, haere ki Auth0 Portal ki ture, Perehi Waihanga Ture ka kowhiria he ture kau mai i nga tauira.

Hoki ki nga ratonga miihini me Istio. Wāhanga 3

Tāruatia te waehere i raro ka tiakina hei ture hōu Tāpiri Kereme Rōpū (namespacedGroup.js):

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

parau: Ka tangohia e tenei waehere te roopu kaiwhakamahi tuatahi kua tautuhia i roto i te Toronga Whakamanatanga me te taapiri atu ki te tohu uru hei kereme ritenga (i raro i tana mokowā ingoa, e hiahiatia ana e Auth0).

Hoki ki te wharangi ture ka tirohia e rua nga ture kua tuhia ki te raupapa e whai ake nei:

  • mana-whakamana-toronga
  • Tāpiri Kereme Rōpū

He mea nui te ota na te mea ka whiwhi te mara roopu i te ture tukutahi mana-whakamana-toronga a muri iho ka apitihia hei kereme ma te ture tuarua. Ko te hua he tohu uru penei:

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

Inaianei me whirihora e koe te takawaenga o te Envoy ki te tirotiro i te urunga a te kaiwhakamahi, ka toia te roopu mai i te kereme (https://sa.io/group) i roto i te tohu uru i whakahokia. Koinei te kaupapa mo te waahanga e whai ake nei o te tuhinga.

whirihoranga whakamanatanga i Istio

Mo te whakamanatanga ki te mahi, me whakahohe koe i te RBAC mo Istio. Ki te mahi i tenei, ka whakamahia e matou te whirihoranga e whai ake nei:

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" 

Whakaahuatanga:

  • 1 — Whakahohehia te RBAC mo nga ratonga me nga mokowā ingoa kua whakarārangihia ki te mara Inclusion;
  • 2 — whakarārangihia e mātou he rārangi o ā mātou ratonga.

Me tono te whirihoranga me te whakahau e whai ake nei:

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

Ko nga ratonga katoa e hiahia ana inaianei ki te Mana Uru-a-Tunga. Arā, ka rāhuitia te uru ki ngā ratonga katoa, ā, ka puta he whakautu RBAC: access denied. Inaianei me tuku te uru ki nga kaiwhakamahi whai mana.

Te whirihoranga uru mo nga kaiwhakamahi auau

Me uru nga kaiwhakamahi katoa ki nga ratonga SA-Frontend me SA-WebApp. I whakatinanahia ma te whakamahi i nga rauemi Istio e whai ake nei:

  • Te Mahi Mahi — ka whakatau i nga mana kei te kaiwhakamahi;
  • RatongaRoleBinding — ka whakatau ko wai tenei ServiceRole.

Mo nga kaiwhakamahi noa ka whakaaetia e matou te uru ki etahi ratonga (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: ["*"]

Na roto i regular-user-binding hoatu ServiceRole ki nga manuhiri wharangi katoa (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"

Ko te tikanga "katoa nga kaiwhakamahi" ka uru ano nga kaiwhakamahi kore pono ki te SA WebApp? Kaore, ka tirohia e te kaupapa here te mana o te tohu JWT.

Me whakamahi nga whirihoranga:

$ 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

Te whirihoranga uru mo nga kaitakawaenga

Mo nga kaitakawaenga, e hiahia ana matou kia uru ki nga ratonga katoa (mod-service-role.yaml):

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

Engari kei te pirangi matou mo era motika anake mo nga kaiwhakamahi kei a ratou to tohu urunga kereme https://sa.io/group me te tikanga 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" 

Me whakamahi nga whirihoranga:

$ 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

Na te keteroki i roto i nga karere, he ruarua meneti pea ka whai mana nga ture whakamana. Ka taea e koe te whakarite he rereke nga taumata uru o nga kaiwhakamahi me nga kaitakawaenga.

Whakamutunga mo tenei wahanga

Heoi ano, kua kite koe i tetahi huarahi ngawari ake, ngawari, maamaa me te haumaru ki te motuhēhēnga me te whakamanatanga?

E toru noa nga rauemi Istio (RbacConfig, ServiceRole, me ServiceRoleBinding) i hiahiatia hei whakatutuki i te mana pai mo te whakamotuhēhēnga me te whakamanatanga o te urunga kaiwhakamahi mutunga ki nga ratonga.

I tua atu, kua whakahaerehia e matou enei take mai i a maatau ratonga karere, kua tutuki:

  • te whakaiti i te nui o te waehere whanui kei roto pea nga raru haumaru me nga pepeha;
  • te whakaiti i te maha o nga ahuatanga poauau i puta mai ai tetahi pito mutunga ka uru mai i waho ka wareware ki te ripoata;
  • te whakakore i te hiahia ki te whakahou i nga ratonga katoa i nga wa katoa ka taapirihia he mahi hou, he tika ranei;
  • kia noho ngawari nga ratonga hou, haumaru me te tere.

mutunga

Ka taea e Istio nga roopu ki te aro ki o raatau rauemi ki nga mahi whakahirahira-pakihi me te kore e taapiri atu ki nga ratonga, ka whakahoki ano ki te mana moroiti.

Ko te tuhinga (e toru nga waahanga) i whakarato i nga matauranga taketake me nga tohutohu mahi kua rite mo te tiimata me te Istio i roto i nga kaupapa tuuturu.

PS mai i te kaiwhakamaori

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero