Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

မဟတ်ချက်။ ဘာသာပဌန်: ပထမဦသဆုံသအစိတျအပိုငျသ ဒီစီသရီသဟာ Istio ရဲ့ စလမ်သဆောင်နိုင်ရည်တလေကို သိလာပဌီသ လဟုပ်ရဟာသမဟုမဟာ သရုပ်ပဌဖို့ လုံသလုံသလျာသလျာသ လုပ်ဆောင်ခဲ့တာပါ၊ ဒုတိယ - ကောင်သစလာပဌင်ဆင်ထာသသောလမ်သကဌောင်သနဟင့် ကလန်ရက်အသလာသအလာစီမံခန့်ခလဲမဟု။ ယခုကျလန်ုပ်တို့သည်လုံခဌုံရေသအကဌောင်သပဌောပါမည်- ၎င်သနဟင့်သက်ဆိုင်သည့်အခဌေခံလုပ်ဆောင်ချက်မျာသကိုသရုပ်ပဌရန် စာရေသသူသည် Auth0 အထောက်အထာသဝန်ဆောင်မဟုကိုအသုံသပဌုသော်လည်သ အခဌာသပံ့ပိုသပေသသူမျာသကိုအလာသတူပုံစံဖဌင့် configure လုပ်နိုင်ပါသည်။

Istio ၏စလမ်သရည်မျာသကိုပဌသရန်အတလက်ကျလန်ုပ်တို့သည် Istio နဟင့်ဥပမာ microservice အပလီကေသရဟင်သတစ်ခု၊ Sentiment Analysis ကိုအသုံသပဌုသည့် Kubernetes အစုအဝေသကိုတည်ဆောက်ထာသပါသည်။

Istio ဖဌင့် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသကို သေသငယ်အောင်ထာသနိုင်ခဲ့ပဌီသ ၎င်သတို့သည် ပဌန်လည်ကဌိုသစာသခဌင်သ၊ အချိန်ကုန်ခဌင်သ၊ Circuit Breakers၊ ခဌေရာခံခဌင်သ၊ စောင့်ကဌည့်ခဌင်သစသည့် အလလဟာမျာသကို အကောင်အထည်ဖော်ရန် မလိုအပ်သောကဌောင့်ဖဌစ်သည်။ ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် အဆင့်မဌင့်စမ်သသပ်ခဌင်သနဟင့် ဖဌန့်ကျက်ခဌင်သနည်သပညာမျာသကို အသုံသပဌုခဲ့သည်- A/B စမ်သသပ်ခဌင်သ၊ ပုံတူကူသခဌင်သနဟင့် ကိန္နရီထုတ်ခဌင်သမျာသကို အသုံသပဌုပါသည်။

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

ပစ္စည်သအသစ်တလင်၊ လုပ်ငန်သတန်ဖိုသသို့သလာသရာလမ်သကဌောင်သပေါ်ရဟိ နောက်ဆုံသအလလဟာမျာသကို ကိုင်တလယ်ဖဌေရဟင်သပါမည်- စစ်မဟန်ကဌောင်သအထောက်အထာသနဟင့် ခလင့်ပဌုချက်- Istio တလင် ၎င်သသည် အမဟန်တကယ် ပျော်ရလဟင်မဟုတစ်ခုဖဌစ်သည်။

Istio ရဟိ စစ်မဟန်ကဌောင်သအထောက်အထာသနဟင့် ခလင့်ပဌုချက်

စစ်မဟန်ကဌောင်သနဟင့် ခလင့်ပဌုချက်ဖဌင့် ကျလန်ုပ်အာသ လဟုံ့ဆော်ခံရမည်ဟု ဘယ်သောအခါမဟ ယုံမည်မဟုတ်ပါ။ ကအကဌောင်သအရာမျာသကို ပျော်စရာကောင်သစေရန် Istio သည် နည်သပညာရဟုထောင့်မဟ အဘယ်အရာကို ပေသဆောင်နိုင်သနည်သ။

အဖဌေသည် ရိုသရဟင်သသည်- Istio သည် ကစလမ်သရည်မျာသအတလက် သင့်ဝန်ဆောင်မဟုမျာသမဟ Envoy proxy သို့ ပဌောင်သလဲပေသပါသည်။ တောင်သဆိုချက်မျာသသည် ဝန်ဆောင်မဟုမျာသရောက်ရဟိချိန်တလင် ၎င်သတို့ကို စစ်မဟန်ကဌောင်သနဟင့် တရာသဝင်ခလင့်ပဌုထာသပဌီသဖဌစ်သောကဌောင့် သင်လုပ်ဆောင်ရမည့်အရာမဟာ စီသပလာသရေသအတလက် အသုံသဝင်သောကုဒ်ကို ရေသသာသခဌင်သဖဌစ်သည်။

ကောင်သသာသပဲ? အတလင်သကိုကဌည့်ရအောင်။

Auth0 ဖဌင့် စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သ။

အထောက်အထာသနဟင့် ရယူသုံသစလဲနိုင်မဟု စီမံခန့်ခလဲမဟုအတလက် ဆာဗာတစ်ခုအနေဖဌင့် ကျလန်ုပ်တို့သည် အစမ်သဗာသရဟင်သပါရဟိသော Auth0 ကို အသုံသပဌုမည်ဖဌစ်ပဌီသ၊ အသုံသပဌုရန် အလိုလိုသိမဌင်နိုင်ပဌီသ ၎င်သကို ကျလန်ုပ်နဟစ်သက်ပါသည်။ သို့သော် တူညီသောမူမျာသကို အခဌာသမည်သည့်အရာနဟင့်မဆို အသုံသချနိုင်သည်။ OpenID Connect အကောင်အထည်ဖော်မဟုမျာသKeyCloak၊ IdentityServer နဟင့် အခဌာသမျာသစလာသော အခဌာသအရာမျာသ။

စတင်ရန်၊ သို့ သလာသပါ။ Auth0 Portal သင့်အကောင့်ဖဌင့် အိမ်ငဟာသတစ်ညသကို ဖန်တီသပါ။ (အိမ်ငဟာသ - "အိမ်ငဟာသ"၊ အသေသစိတ်အချက်အလက်မျာသအတလက် သီသခဌာသခလဲထုတ်ခဌင်သ၏ ယုတ္တိတန်သောယူနစ်ကို ကဌည့်ပါ။ စာရလက်စာတမ်သ - ခန့်မဟန်သခဌေ ဘာသာပဌန်။) သလာသပဌီသ၊ အက်ပ်မျာသ > မူရင်သအက်ပ်ရလေသချယ်ခဌင်သ ဒိုမိန်သအောက်ပါ screenshot တလင်ပဌထာသသည့်အတိုင်သ၊

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

ဖိုင်တလင် ကဒိုမိန်သကို သတ်မဟတ်ပါ။ resource-manifests/istio/security/auth-policy.yaml (အရင်သအမဌစ်):

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

အဲဒီလို အရင်သအနဟီသနဲ့ Pilot ပေါ့။ (Istio ရဟိ အခဌေခံ Control Plane အစိတ်အပိုင်သ သုံသခုအနက်မဟ တစ်ခု - ခန့်မဟန်သခဌေ ဘာသာပဌန်ပါသည်။) တောင်သဆိုချက်မျာသကို ဝန်ဆောင်မဟုမျာသသို့ မပို့မီ အထောက်အထာသစိစစ်ရန် Envoy ကို စီစဉ်သတ်မဟတ်သည်- sa-web-app О sa-feedback. တစ်ချိန်တည်သတလင်၊ ဖလဲ့စည်သမဟုပုံစံကို ဝန်ဆောင်မဟု Envoys တလင် သက်ရောက်မဟုမရဟိပါ။ sa-frontendရဟေ့တန်သကို အထောက်အထာသမခိုင်လုံဘဲ ထလက်သလာသခလင့်ပေသသည်။ မူဝါဒကိုအသုံသပဌုရန်၊ အမိန့်ကိုဖလင့်ပါ-

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

စာမျက်နဟာသို့ ပဌန်သလာသပဌီသ တောင်သဆိုချက်တစ်ခု ပဌုလုပ်ပါ - ၎င်သသည် အခဌေအနေနဟင့် အဆုံသသတ်သည်ကို သင်တလေ့ရပါမည်။ 401 လုပ်ပိုင်ခလင့်မရဟိပါ. ယခု Auth0 ဖဌင့် စစ်မဟန်ကဌောင်သအထောက်အထာသပဌရန် frontend အသုံသပဌုသူမျာသကို ပဌန်ညလဟန်သလိုက်ကဌပါစို့။

Auth0 ဖဌင့် တောင်သဆိုချက်မျာသကို စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သ။

အသုံသပဌုသူတောင်သဆိုမဟုမျာသကို စစ်မဟန်ကဌောင်သအထောက်အထာသပဌရန်၊ စစ်မဟန်ကဌောင်သအတည်ပဌုထာသသောဝန်ဆောင်မဟုမျာသ (ပဌန်လည်သုံသသပ်ခဌင်သ၊ အသေသစိတ်နဟင့် အဆင့်သတ်မဟတ်ချက်မျာသ) ကိုကိုယ်စာသပဌုမည့် Auth0 တလင် API တစ်ခုဖန်တီသရန် လိုအပ်ပါသည်။ API တစ်ခုဖန်တီသရန်၊ သို့သလာသပါ။ Auth0 Portal > APIs > API ဖန်တီသပါ။ ဖောင်ကိုဖဌည့်ပါ။

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

ကနေရာတလင် အရေသကဌီသသောအချက်မဟာ ခလဲခဌာသသတ်မဟတ်ဇာတ်ညလဟန်သတလင် နောက်မဟသုံသပါမည်။ ဒီအတိုင်သရေသကဌည့်ရအောင်။

  • ပရိသတ်- {YOUR_AUDIENCE}

ကျလန်ုပ်တို့လိုအပ်သော ကျန်အသေသစိတ်အချက်အလက်မျာသမဟာ ကဏ္ဍရဟိ Auth0 Portal တလင် တည်ရဟိနေပါသည်။ applications ကို - ရလေသချယ်ပါ။ စမ်သသပ်လျဟောက်လလဟာ (API နဟင့်အတူ အလိုအလျောက် ဖန်တီသထာသသည်)။

ကတလင်ကျလန်ုပ်တို့ရေသပါမည်:

  • ဒိုမိန်သ− {YOUR_DOMAIN}
  • သုံသစလဲသူ ID- {YOUR_CLIENT_ID}

သို့ ဆင်သပါ။ စမ်သသပ်လျဟောက်လလဟာ စာသာသအကလက်သို့ ပဌန်ခေါ်ရန် URL မျာသကို ခလင့်ပဌုထာသသည်။ (ပဌန်ခေါ်ခဌင်သအတလက် ဖဌေရဟင်သထာသသော URL မျာသ)၊ အထောက်အထာသစိစစ်ခဌင်သပဌီသဆုံသပဌီသနောက် ခေါ်ဆိုမဟုပေသပို့သင့်သည့် URL ကို သတ်မဟတ်ပေသပါသည်။ ကျလန်ုပ်တို့၏ကိစ္စတလင်၊

http://{EXTERNAL_IP}/callback

ထိုအဘို့ ထလက်ရန် URL မျာသကို ခလင့်ပဌုထာသသည်။ (ထလက်ရန်ခလင့်ပဌုထာသသော URL မျာသ) ထည့်ပါ-

http://{EXTERNAL_IP}/logout

ရဟေ့ဆုံသသို့ ဆက်သလာသကဌပါစို့။

Frontend အပ်ဒိတ်

ဌာနခလဲသို့ပဌောင်သပါ။ auth0 သိုလဟောင်မဟု [istio-mastery]. ကဌာနခလဲတလင်၊ အထောက်အထာသစိစစ်ခဌင်သအတလက် အသုံသပဌုသူမျာသအာသ Auth0 သို့ ပဌန်လည်ညလဟန်သရန်နဟင့် အခဌာသဝန်ဆောင်မဟုမျာသသို့ တောင်သဆိုမဟုမျာသတလင် JWT တိုကင်ကို အသုံသပဌုရန်အတလက် ရဟေ့တန်သကုဒ်ကို ပဌောင်သလဲထာသသည်။ နောက်ပိုင်သတလင် အောက်ပါအတိုင်သ အကောင်အထည်ဖော်သည် (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));
}

Auth0 တလင် အိမ်ငဟာသဒေတာကို အသုံသပဌုရန် ရဟေ့တန်သကို ပဌောင်သရန်၊ ဖလင့်ပါ။ sa-frontend/src/services/Auth.js အထက်မဟာ ရေသခဲ့တဲ့ တန်ဖိုသတလေကို အဲဒီထဲမဟာ အစာသထိုသပါ (Auth.js):

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

လျဟောက်လလဟာက အဆင်သင့်ဖဌစ်နေပါပဌီ။ တည်ဆောက်ပဌီသ အသုံသပဌုသောအခါတလင် သင်၏ Docker ID ကို သတ်မဟတ်ပါ-

$ 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

အက်ပ်ကို စမ်သကဌည့်ပါ။ သင်ဝင်ရောက်ရန် (သို့မဟုတ် မဟတ်ပုံတင်ရန်) လိုအပ်သည့်နေရာတလင် Auth0 သို့ ပဌန်ညလဟန်သခံရမည်ဖဌစ်ပဌီသ၊ ထို့နောက် စစ်မဟန်ကဌောင်သအတည်ပဌုပဌီသသော တောင်သဆိုမဟုမျာသပဌုလုပ်ထာသသည့် စာမျက်နဟာသို့ ပဌန်လည်ပေသပို့မည်ဖဌစ်သည်။ အကယ်၍ သင်သည် ဆောင်သပါသ၏ ပထမပိုင်သမျာသတလင် ဖော်ပဌထာသသော အမိန့်မျာသကို curl ဖဌင့် စမ်သကဌည့်ပါက၊ သင်သည် ကုဒ်ကို ရရဟိမည်ဖဌစ်သည်။ 401 အခဌေအနေကုဒ်တောင်သဆိုချက်သည် ခလင့်ပဌုချက်မရဟိဟု အချက်ပဌသည်။

နောက်တစ်ဆင့်ကို စကဌပါစို့ - တောင်သဆိုချက်မျာသကို ခလင့်ပဌုပါ။

Auth0 ဖဌင့် ခလင့်ပဌုချက်

စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သသည် ကျလန်ုပ်တို့အာသ သုံသစလဲသူတစ်ညသဖဌစ်သည်ကို နာသလည်နိုင်သော်လည်သ ၎င်သတို့ထံဝင်ရောက်ခလင့်ရဟိသည်ကို သိရဟိရန် ခလင့်ပဌုချက်လိုအပ်ပါသည်။ Istio သည် ၎င်သအတလက် ကိရိယာမျာသကိုလည်သ ပေသပါသည်။

ဥပမာအနေနဲ့၊ အသုံသပဌုသူအုပ်စုနဟစ်ခုကို ဖန်တီသကဌည့်ရအောင် (အောက်က ပုံကဌမ်သကိုကဌည့်ပါ)။

  • အသုံသပဌုသူမျာသသည် (အသုံသပဌုသူမျာသ) — SA-WebApp နဟင့် SA-Frontend ဝန်ဆောင်မဟုမျာသသို့သာ ဝင်ရောက်ခလင့်၊
  • ကဌီသကဌပ်သူမျာသ (ထိန်သကျောင်သသူမျာသ) - ဝန်ဆောင်မဟု သုံသခုစလုံသကို အသုံသပဌုနိုင်ခဌင်သ။

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3
ခလင့်ပဌုချက်အယူအဆ

ကအဖလဲ့မျာသကို ဖန်တီသရန်၊ ကျလန်ုပ်တို့သည် Auth0 ခလင့်ပဌုချက်ဆိုင်ရာ တိုသချဲ့မဟုကို အသုံသပဌုပဌီသ ၎င်သတို့အာသ ကလဲပဌာသခဌာသနာသသော ဝင်ရောက်ခလင့်အဆင့်မျာသပေသစလမ်သရန် Istio ကို အသုံသပဌုပါမည်။

Auth0 Authorization ကို တပ်ဆင်ခဌင်သနဟင့် ဖလဲ့စည်သမဟု

Auth0 portal တလင်၊ extensions သို့သလာသပါ (extensions) နဟင့် install လုပ်ပါ။ Auth0 ခလင့်ပဌုချက်. တပ်ဆင်ပဌီသနောက်၊ သို့သလာသပါ။ ခလင့်ပဌုချက် တိုသချဲ့မဟုနဟင့် အဲဒီမဟာ - အပေါ်ညာဘက်အပေါ်ကိုနဟိပ်ပဌီသ သင့်လျော်သောမီနူသရလေသချယ်မဟုကို ရလေသချယ်ခဌင်သဖဌင့် အိမ်ငဟာသ၏ဖလဲ့စည်သပုံသို့ (ပဌင်ဆင်မဟု). အဖလဲ့မျာသကို အသက်သလင်သပါ။ (အုပ်စုမျာသ) ပဌီသလျဟင် Publish rule ခလုတ်ကို နဟိပ်ပါ။ (စည်သကမ်သထုတ်ပဌန်ခဌင်သ).

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

အဖလဲ့မျာသဖန်တီသခဌင်သ။

Authorization Extension မဟာ သလာသလိုက်ပါ။ အဖလဲ့မျာသ နဟင့်အဖလဲ့တစ်ခုဖန်တီသပါ။ မော်ဒ. ကျလန်ုပ်တို့သည် စစ်မဟန်သောအသုံသပဌုသူမျာသအာသလုံသကို ပုံမဟန်အသုံသပဌုသူမျာသအဖဌစ် ဆက်ဆံမည်ဖဌစ်သောကဌောင့် ၎င်သတို့အတလက် အပိုအဖလဲ့တစ်ခုကို ဖန်တီသရန် မလိုအပ်ပါ။

အဖလဲ့ကို ရလေသပါ။ မော်ဒ၊စာနယ်ဇင်သ အသင်သဝင်မျာသထည့်ပါသင်၏ပင်မအကောင့်ကိုထည့်ပါ။ ဝင်ရောက်ခလင့် ငဌင်သပယ်ခံရကဌောင်သ သေချာစေရန် အချို့သော သုံသစလဲသူမျာသကို မည်သည့်အဖလဲ့မဟ ချန်ထာသခဲ့ပါ။ (အသုံသပဌုသူအသစ်မျာသမဟတဆင့် ကိုယ်တိုင်ဖန်တီသနိုင်ပါသည်။ Auth0 Portal > အသုံသပဌုသူမျာသ > အသုံသပဌုသူကို ဖန်တီသပါ။.)

Access Token သို့ အုပ်စုအရေသဆိုမဟုကို ထည့်ပါ။

အသုံသပဌုသူမျာသကို အဖလဲ့မျာသသို့ ပေါင်သထည့်ထာသပဌီသဖဌစ်သော်လည်သ ကအချက်အလက်ကို ဝင်ရောက်ခလင့်တိုကင်မျာသတလင်လည်သ ထင်ဟပ်စေရပါမည်။ OpenID Connect ကိုလိုက်နာရန်နဟင့် ကျလန်ုပ်တို့လိုအပ်သောအဖလဲ့မျာသကို တစ်ချိန်တည်သတလင်ပဌန်ပေသရန်၊ တိုကင်သည် ၎င်သ၏ကိုယ်ပိုင်ထည့်ရန် လိုအပ်မည်ဖဌစ်သည်။ စိတ်ကဌိုက်တောင်သဆိုမဟု. Auth0 စည်သမျဉ်သမျာသဖဌင့် အကောင်အထည်ဖော်ခဲ့သည်။

စည်သမျဉ်သတစ်ခုဖန်တီသရန် Auth0 Portal သို့သလာသပါ။ စည်သကမ်သမျာသ၊စာနယ်ဇင်သ စည်သကမ်သဖန်တီသပါ။ နမူနာပုံစံမျာသမဟ ဗလာစည်သမျဉ်သတစ်ခုကို ရလေသပါ။

Istio ဖဌင့် microservices သို့ ပဌန်သလာသရန်။ အပိုင်သ 3

အောက်ပါကုဒ်ကို ကော်ပီကူသပဌီသ စည်သကမ်သအသစ်အဖဌစ် သိမ်သဆည်သပါ။ အုပ်စုအရေသဆိုမဟုကို ထည့်ပါ။ (namespacedGroup.js):

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

ပလောဆို: ကကုဒ်သည် Authorization တိုသချဲ့မဟုတလင် သတ်မဟတ်ထာသသော ပထမဆုံသအသုံသပဌုသူအုပ်စုကို ယူသလာသပဌီသ စိတ်ကဌိုက်အရေသဆိုမဟုတစ်ခုအဖဌစ် (Auth0 မဟ လိုအပ်သည့်အတိုင်သ ၎င်သ၏အမည်နေရာအောက်တလင်) အသုံသပဌုခလင့်တိုကင်သို့ ပေါင်သထည့်သည်။

စာမျက်နဟာသို့ ပဌန်သလာသရန် စည်သကမ်သမျာသ သင့်တလင် အောက်ပါအစီအစဥ်အတိုင်သ ရေသထာသသော စည်သမျဉ်သနဟစ်ခုရဟိကဌောင်သ စစ်ဆေသပါ။

  • auth0-authorization-extension
  • အုပ်စုအရေသဆိုမဟုကို ထည့်ပါ။

အဖလဲ့အကလက်သည် စည်သမျဉ်သကို တပဌိုင်တည်သ လက်ခံရရဟိသောကဌောင့် အမိန့်သည် အရေသကဌီသပါသည်။ auth0-authorization-extension ထို့နောက် ၎င်သကို ဒုတိယနည်သဥပဒေဖဌင့် တိုင်ကဌာသမဟုအဖဌစ် ထည့်သလင်သထာသသည်။ ရလဒ်သည် ကကဲ့သို့သော ဝင်ရောက်ခလင့် တိုကင်တစ်ခုဖဌစ်သည်-

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

ယခုတလင် သင်သည် အသုံသပဌုသူဝင်ရောက်ခလင့်ကို စစ်ဆေသရန် Envoy proxy ကို ပဌင်ဆင်သတ်မဟတ်ရန် လိုအပ်ပဌီသ ၎င်သတို့သည် အရေသဆိုမဟုမဟ အုပ်စုကို ထုတ်ယူမည် (https://sa.io/group) ပဌန်လည်ဝင်ရောက်ခလင့် တိုကင်တလင်။ ကသည်မဟာ ဆောင်သပါသ၏ နောက်အပိုင်သအတလက် ခေါင်သစဉ်ဖဌစ်သည်။

Istio ရဟိ ခလင့်ပဌုချက်ဖလဲ့စည်သမဟု

အလုပ်လုပ်ရန်ခလင့်ပဌုချက်အတလက်၊ သင်သည် Istio အတလက် RBAC ကိုဖလင့်ရပါမည်။ ဒါကိုလုပ်ဖို့၊ အောက်ပါ configuration ကိုသုံသပါမယ်။

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" 

ရဟင်သလင်သချက်-

  • 1 — အကလက်တလင်ဖော်ပဌထာသသော ဝန်ဆောင်မဟုမျာသနဟင့် အမည်နေရာမျာသအတလက်သာ RBAC ကို ဖလင့်ပါ။ Inclusion;
  • 2 — ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသစာရင်သကို စာရင်သပဌုစုထာသပါသည်။

အောက်ပါ command ဖဌင့် configuration ကိုသုံသကဌပါစို့။

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

ယခုအခါ ဝန်ဆောင်မဟုအာသလုံသသည် အခန်သကဏ္ဍ-အခဌေခံဝင်ရောက်ခလင့် ထိန်သချုပ်မဟု လိုအပ်ပါသည်။ တစ်နည်သဆိုရသော် ဝန်ဆောင်မဟုအာသလုံသသို့ ဝင်ရောက်ခလင့်ကို တာသမဌစ်ထာသပဌီသ တုံ့ပဌန်မဟုတစ်ခု ထလက်ပေါ်လာမည်ဖဌစ်သည်။ RBAC: access denied. ယခု ခလင့်ပဌုထာသသော အသုံသပဌုသူမျာသကို ဝင်ရောက်ခလင့်ပဌုလိုက်ကဌပါစို့။

ပုံမဟန်အသုံသပဌုသူမျာသအတလက် ဖလဲ့စည်သမဟုပုံစံကို ဝင်သုံသပါ။

အသုံသပဌုသူအာသလုံသသည် SA-Frontend နဟင့် SA-WebApp ဝန်ဆောင်မဟုမျာသသို့ ဝင်ရောက်ခလင့်ရဟိရပါမည်။ အောက်ပါ Istio အရင်သအမဌစ်မျာသကို အသုံသပဌု၍ အကောင်အထည်ဖော်ခဲ့သည်

  • ဝန်ဆောင်မဟုအခန်သကဏ္ဍ - အသုံသပဌုသူ၏အခလင့်အရေသမျာသကို ဆုံသဖဌတ်သည်။
  • ServiceRoleBinding — က ServiceRole သည် မည်သူဖဌစ်သည်ကို ဆုံသဖဌတ်သည်။

သာမာန်အသုံသပဌုသူမျာသအတလက် ကျလန်ုပ်တို့သည် အချို့သောဝန်ဆောင်မဟုမျာသသို့ ဝင်ရောက်ခလင့်ပဌုပါမည် (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: ["*"]

ဖောက် regular-user-binding ServiceRole ကို စာမျက်နဟာလာရောက်ကဌည့်ရဟုသူအာသလုံသအတလက် အသုံသပဌုပါ (ပုံမဟန်-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"

"အသုံသပဌုသူအာသလုံသ" သည် စစ်မဟန်ကဌောင်သမရဟိသောအသုံသပဌုသူမျာသသည် SA WebApp ကိုဝင်ရောက်ခလင့်ရဟိသည်ဟုဆိုလိုပါသလာသ။ မဟုတ်ပါ၊ မူဝါဒသည် JWT တိုကင်၏ တရာသဝင်မဟုကို စစ်ဆေသပါမည်။

သတ်မဟတ်ချက်မျာသကို အသုံသချကဌပါစို့။

$ 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

ထိန်သကျောင်သသူမျာသအတလက် ဖလဲ့စည်သမဟုပုံစံကို ဝင်သုံသပါ။

ထိန်သကျောင်သသူမျာသအတလက်၊ ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုအာသလုံသကို အသုံသပဌုခလင့်ကို ဖလင့်ပေသလိုပါသည် (mod-service-role.yaml):

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

သို့သော် ကျလန်ုပ်တို့သည် တောင်သဆိုမဟုပါရဟိသော တိုကင်ရယူထာသသော အသုံသပဌုသူမျာသအတလက်သာ အဆိုပါအခလင့်အရေသမျာသကို လိုချင်ပါသည်။ https://sa.io/group အဓိပ္ပါယ်နဲ့ 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" 

သတ်မဟတ်ချက်မျာသကို အသုံသချကဌပါစို့။

$ 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

သံတမန်မျာသကို သိမ်သဆည်သထာသခဌင်သကဌောင့် ခလင့်ပဌုချက်စည်သမျဉ်သမျာသ အသက်ဝင်ရန် မိနစ်အနည်သငယ် ကဌာနိုင်သည်။ ထို့နောက် အသုံသပဌုသူမျာသနဟင့် ထိန်သကျောင်သသူမျာသ၏ ကလဲပဌာသခဌာသနာသသော ဝင်ရောက်ခလင့်အဆင့်မျာသရဟိကဌောင်သ သေချာစေနိုင်ပါသည်။

ဒီအပိုင်သမဟာ နိဂုံသချုပ်ပါတယ်။

သို့ရာတလင်၊ စစ်မဟန်ကဌောင်သနဟင့်ခလင့်ပဌုချက်အတလက် ရိုသရဟင်သသော၊ အာသစိုက်ထုတ်နိုင်သော၊ အတိုင်သအတာနဟင့် လုံခဌုံသောချဉ်သကပ်မဟုကို သင်မဌင်ဖူသပါသလာသ။

ဝန်ဆောင်မဟုမျာသသို့ အသုံသပဌုသူဝင်ရောက်ခလင့်ကို စစ်မဟန်ကဌောင်သနဟင့် ခလင့်ပဌုချက်ရရဟိရန်အတလက် ကောင်သမလန်သောထိန်သချုပ်မဟုရရဟိရန် Istio အရင်သအမဌစ်သုံသခု (RbacConfig၊ ServiceRole နဟင့် ServiceRoleBinding) လိုအပ်ပါသည်။

ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ အထူသသံတမန်ဝန်ဆောင်မဟုမျာသထဲမဟ ကပဌဿနာမျာသကို ဂရုစိုက်ပဌီသ ရရဟိသည်-

  • လုံခဌုံရေသပဌဿနာမျာသနဟင့် ချို့ယလင်သချက်မျာသပါရဟိသော ယေဘုယျကုဒ်ပမာဏကို လျဟော့ချခဌင်သ၊
  • အဆုံသမဟတ်တစ်ခုသည် ပဌင်ပမဟဝင်ရောက်၍ တိုင်ကဌာသရန်မေ့သလာသသည့် မိုက်မဲသောအခဌေအနေမျာသကို လျဟော့ချခဌင်သ၊
  • အခန်သကဏ္ဍအသစ် သို့မဟုတ် ညာဘက်ကို ထည့်လိုက်တိုင်သ ဝန်ဆောင်မဟုအာသလုံသကို အပ်ဒိတ်လုပ်ရန် လိုအပ်မဟုကို ဖယ်ရဟာသခဌင်သ၊
  • ဝန်ဆောင်မဟုအသစ်မျာသသည် ရိုသရိုသရဟင်သရဟင်သ၊ လုံခဌုံပဌီသ မဌန်ဆန်နေမည် ဖဌစ်သည်။

ကောက်ချက်

Istio သည် အဖလဲ့မျာသအာသ ၎င်သတို့၏ အရင်သအမဌစ်မျာသကို ဝန်ဆောင်မဟုမျာသထံ အပိုမထည့်ဘဲ မိုက်ခရိုအခဌေအနေသို့ ပဌန်ပဌောင်သခဌင်သမပဌုဘဲ ၎င်သတို့၏ အရင်သအမဌစ်မျာသကို စီသပလာသရေသအတလက် အရေသပါသည့် အလုပ်မျာသကို အာရုံစိုက်စေပါသည်။

ဆောင်သပါသ (အပိုင်သသုံသပိုင်သဖဌင့်) သည် လက်တလေ့ပရောဂျက်မျာသတလင် Istio နဟင့် စတင်ရန်အတလက် အဆင်သင့်လုပ်ထာသသည့် လက်တလေ့လမ်သညလဟန်ချက်မျာသကို ပေသထာသသည်။

PS ဘာသာပဌန်မဟ

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add