Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

рдиреЛрдВрдж. рдЕрдиреБрд╡рд╛рдж: рдкрд╣рд┐рд▓рд╛ рднрд╛рдЧ рд╣реА рдорд╛рд▓рд┐рдХрд╛ Istio рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдХреГрддреАрдд рджрд╛рдЦрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рд╣реЛрддреА, рджреБрд╕рд░рд╛ - рдмрд╛рд░реАрдХ рдЯреНрдпреВрди рдХреЗрд▓реЗрд▓реЗ рд░реВрдЯрд┐рдВрдЧ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╣рджрд╛рд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди. рдЖрддрд╛ рдЖрдкрдг рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдмрджреНрджрд▓ рдмреЛрд▓реВ: рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓рднреВрдд рдХрд╛рд░реНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд▓реЗрдЦрдХ Auth0 рдУрд│рдЦ рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рддреЛ, рдкрд░рдВрддреБ рдЗрддрд░ рдкреНрд░рджрд╛рддреЗ рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЖрдореНрд╣реА Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ Istio рдЖрдгрд┐ Istio рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реЗрдВрдЯрд┐рдореЗрдВрдЯ ре▓рдирд╛рд▓рд┐рд╕рд┐рд╕, рддреИрдирд╛рдд рдХреЗрд▓реЗ.

Istio рд╕рд╣, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡рд╛ рд▓рд╣рд╛рди рдареЗрд╡реВ рд╢рдХрд▓реЛ рдХрд╛рд░рдг рддреНрдпрд╛рдВрдирд╛ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди, рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░реНрд╕, рдЯреНрд░реЗрд╕рд┐рдВрдЧ, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд╛рд░рдЦреЗ рд╕реНрддрд░ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рдкреНрд░рдЧрдд рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдЙрдкрдпреЛрдЬрди рддрдВрддреНрд░реЗ рд╡рд╛рдкрд░рд▓реА: A/B рдЪрд╛рдЪрдгреА, рдорд┐рд░рд░рд┐рдВрдЧ рдЖрдгрд┐ рдХреЕрдирд░реА рд░реЛрд▓рдЖрдЙрдЯреНрд╕.

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

рдирд╡реАрди рд╕рд╛рдордЧреНрд░реАрдордзреНрдпреЗ, рдЖрдореНрд╣реА рд╡реНрдпрд╡рд╕рд╛рдп рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░реАрд▓ рдЕрдВрддрд┐рдо рд╕реНрддрд░рд╛рдВрд╡рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реВ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛ - рдЖрдгрд┐ Istio рдордзреНрдпреЗ рд╣рд╛ рдЦрд░рд╛ рдЖрдирдВрдж рдЖрд╣реЗ!

Istio рдордзреНрдпреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛

рдорд▓рд╛ рдХрдзреАрдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрд╕рд▓рд╛ рдирд╛рд╣реА рдХреА рдореА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддреЗрдиреЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдИрд▓. рд╣реЗ рд╡рд┐рд╖рдп рдордиреЛрд░рдВрдЬрдХ рдЖрдгрд┐ рддреНрдпрд╛рд╣реВрдирд╣реА рдЕрдзрд┐рдХ, рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЗрд░рдгрд╛рджрд╛рдпреА рдмрдирд╡рдгреНрдпрд╛рд╕рд╛рдареА рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдХреЛрдирд╛рддреВрди Istio рдХрд╛рдп рджреЗрдК рд╢рдХрддреЗ?

рдЙрддреНрддрд░ рд╕реЛрдкреЗ рдЖрд╣реЗ: Istio рдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреА рдЬрдмрд╛рдмрджрд╛рд░реА рддреБрдордЪреНрдпрд╛ рд╕реЗрд╡рд╛рдВрдордзреВрди рджреВрдд рдкреНрд░реЙрдХреНрд╕реАрдХрдбреЗ рд╣рд▓рд╡рддреЗ. рд╕реЗрд╡рд╛рдВрдкрд░реНрдпрдВрдд рд╡рд┐рдирдВрддреНрдпрд╛ рдкреЛрд╣реЛрдЪреЗрдкрд░реНрдпрдВрдд, рддреНрдпрд╛ рдЖрдзреАрдЪ рдкреНрд░рдорд╛рдгрд┐рдд рдЖрдгрд┐ рдЕрдзрд┐рдХреГрдд рдХреЗрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд╡реНрдпрд╡рд╕рд╛рдп-рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рд▓рд┐рд╣рд╛рдпрдЪрд╛ рдЖрд╣реЗ.

рдЫрд╛рди рд╡рд╛рдЯрддрдВрдп? рдЪрд▓рд╛ рдЖрдд рдПрдХ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛!

Auth0 рд╕рд╣ рдкреНрд░рдорд╛рдгреАрдХрд░рдг

рдУрд│рдЦ рдЖрдгрд┐ рдкреНрд░рд╡реЗрд╢ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рд╕рд╛рдареА рд╕рд░реНрд╡реНрд╣рд░ рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА Auth0 рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ, рдЬреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ, рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рдиреА рдЖрд╣реЗ рдЖрдгрд┐ рдорд▓рд╛ рддреЗ рдЖрд╡рдбрддреЗ. рддрдерд╛рдкрд┐, рд╕рдорд╛рди рддрддреНрддреНрд╡реЗ рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд OpenID Connect рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА: KeyCloak, IdentityServer рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ.

рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд░ рдЬрд╛ Auth0 рдкреЛрд░реНрдЯрд▓ рддреБрдордЪреНрдпрд╛ рдЦрд╛рддреНрдпрд╛рд╕рд╣, рднрд╛рдбреЗрдХрд░реВ рддрдпрд╛рд░ рдХрд░рд╛ (рднрд╛рдбреЗрдХрд░реВ - тАЬрднрд╛рдбреЗрдХрд░реВтАЭ, рдЕрд▓рдЧрд╛рд╡рдЪреЗ рддрд╛рд░реНрдХрд┐рдХ рдПрдХрдХ, рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╛рдВрд╕рд╛рдареА рдкрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг - рдЕрдВрджрд╛рдЬреЗ рдЕрдиреБрд╡рд╛рдж.) рдЖрдгрд┐ рдЬрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ > рдбреАрдлреЙрд▓реНрдЯ ре▓рдкрдирд┐рд╡рдбрдд рдЖрд╣реЗ рдбреЛрдореЗрдирдЦрд╛рд▓реАрд▓ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ:

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

рдЕрд╢рд╛ рд╕рдВрд╕рд╛рдзрдирд╛рд╕рд╣, рдкрд╛рдпрд▓рдЯ (Istio рдордзреАрд▓ рддреАрди рдореВрд▓рднреВрдд рдХрдВрдЯреНрд░реЛрд▓ рдкреНрд▓реЗрди рдШрдЯрдХрд╛рдВрдкреИрдХреА рдПрдХ - рдЕрдВрджрд╛рдЬреЗ рднрд╛рд╖рд╛рдВрддрд░.) рд╡рд┐рдирдВрддреНрдпрд╛ рд╕реЗрд╡рд╛рдВрдирд╛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреВрдд рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ: sa-web-app ╨╕ sa-feedback. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрд╡рд╛ рджреВрддрд╛рдВрдирд╛ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА sa-frontend, рдЖрдореНрд╣рд╛рд▓рд╛ рдлреНрд░рдВрдЯрдПрдВрдб рдЕрдирдзрд┐рдХреГрддрдкрдгреЗ рд╕реЛрдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдзреЛрд░рдг рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛:

$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io тАЬauth-policyтАЭ created

рдкреГрд╖реНрдард╛рд╡рд░ рдкрд░рдд рдпрд╛ рдЖрдгрд┐ рд╡рд┐рдирдВрддреА рдХрд░рд╛ - рдЖрдкрдг рдкрд╣рд╛рд▓ рдХреА рддреЗ рд╕реНрдерд┐рддреАрд╕рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ 401 рдЕрдирдзрд┐рдХреГрдд. рдЖрддрд╛ рдлреНрд░рдВрдЯрдПрдВрдб рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ Auth0 рд╕рд╣ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реВрдпрд╛.

Auth0 рд╕рд╣ рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдд рдЖрд╣реЗ

рдЕрдВрддрд┐рдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ Auth0 рдордзреНрдпреЗ рдПрдХ API рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╕реЗрд╡рд╛ (рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдиреЗ, рддрдкрд╢реАрд▓ рдЖрдгрд┐ рд░реЗрдЯрд┐рдВрдЧ) рджрд░реНрд╢рд╡реЗрд▓. API рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд░ рдЬрд╛ Auth0 рдкреЛрд░реНрдЯрд▓ > API > API рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдлреЙрд░реНрдо рднрд░рд╛:

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

рдпреЗрдереЗ рдорд╣рддреНрд╡рд╛рдЪреА рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЖрдкрдг рдирдВрддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдХрд░реВ. рдЪрд▓рд╛ рддреЗ рдЕрд╕реЗ рд▓рд┐рд╣реВрдпрд╛:

  • рдкреНрд░реЗрдХреНрд╖рдХ: {YOUR_AUDIENCE}

рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдЙрд░реНрд╡рд░рд┐рдд рддрдкрд╢реАрд▓ рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ Auth0 рдкреЛрд░реНрдЯрд▓рд╡рд░ рдЖрд╣реЗрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ - рдирд┐рд╡рдбрд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ (API рд╕рд╣ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ).

рдпреЗрдереЗ рдЖрдореНрд╣реА рд▓рд┐рд╣реВ:

  • рдбреЛрдореЗрди: {YOUR_DOMAIN}
  • рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдпрдбреА: {YOUR_CLIENT_ID}

рдкрд░реНрдпрдВрдд рд╕реНрдХреНрд░реЛрд▓ рдХрд░рд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ рдордЬрдХреВрд░ рдлреАрд▓реНрдбрд╡рд░ рдЕрдиреБрдордд рдХреЙрд▓рдмреЕрдХ URL (рдХреЙрд▓рдмреЕрдХрд╕рд╛рдареА рд╕реЛрдбрд╡рд▓реЗрд▓реЗ URL), рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдХреЙрд▓ рдХреЛрдареЗ рдкрд╛рдард╡рд▓рд╛ рдЬрд╛рд╡рд╛ рддреЗ рдЖрдореНрд╣реА URL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рддреЗ рдЖрд╣реЗ:

http://{EXTERNAL_IP}/callback

рдЖрдгрд┐ рд╕рд╛рдареА рдЕрдиреБрдордд рд▓реЙрдЧрдЖрдЙрдЯ URL (рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реЗрд▓реНрдпрд╛ URL) рдЬреЛрдбрд╛:

http://{EXTERNAL_IP}/logout

рдЪрд▓рд╛ рдлреНрд░рдВрдЯрдПрдВрдб рд╡рд░ рдЬрд╛рдКрдпрд╛.

рдлреНрд░рдВрдЯрдПрдВрдб рдЕрдкрдбреЗрдЯ

рд╢рд╛рдЦреЗрдд рдЬрд╛ auth0 REPOZITORIA [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 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 рд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓, рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд▓реЙрдЧ рдЗрди (рдХрд┐рдВрд╡рд╛ рдиреЛрдВрджрдгреА) рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛ рдкреГрд╖реНрдард╛рд╡рд░ рдкрд░рдд рдкрд╛рдард╡рд▓реЗ рдЬрд╛рдИрд▓ рдЬреНрдпрд╛рд╡рд░реВрди рдЖрдзреАрдЪ рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╡рд┐рдирдВрддреНрдпрд╛ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓. рддреБрдореНрд╣реА рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рднрд╛рдЧрд╛рдд рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдЬреНрдЮрд╛ рдХрд░реНрд▓ рд╡рд╛рдкрд░реВрди рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдб рдорд┐рд│реЗрд▓ 401 рд╕реНрдерд┐рддреА рдХреЛрдб, рд╡рд┐рдирдВрддреА рдЕрдзрд┐рдХреГрдд рдирд╕рд▓реНрдпрд╛рдЪреЗ рд╕рдВрдХреЗрдд рджреЗрдд рдЖрд╣реЗ.

рдЪрд▓рд╛ рдкреБрдвреАрд▓ рдЪрд░рдг рдШреЗрдК - рд╡рд┐рдирдВрддреНрдпрд╛ рдЕрдзрд┐рдХреГрдд рдХрд░рд╛.

Auth0 рд╕рд╣ рдЕрдзрд┐рдХреГрддрддрд╛

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреЛрдг рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдирд╛ рдХрд╛рдп рдкреНрд░рд╡реЗрд╢ рдЖрд╣реЗ рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХреГрддрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. Istio рдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рд╕рд╛рдзрдиреЗ рдСрдлрд░ рдХрд░рддреЗ.

рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рджреЛрди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЧрдЯ рддрдпрд╛рд░ рдХрд░реВ (рдЦрд╛рд▓реАрд▓ рдЖрдХреГрддреА рдкрд╣рд╛):

  • рд╡рд╛рдкрд░рдХрд░реНрддреЗ (рд╡рд╛рдкрд░рдХрд░реНрддреЗ) тАФ рдлрдХреНрдд SA-WebApp рдЖрдгрд┐ SA-Frontend рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╣;
  • рдирд┐рдпрдВрддреНрд░рдХ (рдирд┐рдпрдВрддреНрд░рдХ) - рддрд┐рдиреНрд╣реА рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╣.

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3
рдЕрдзрд┐рдХреГрддрддрд╛ рд╕рдВрдХрд▓реНрдкрдирд╛

рд╣реЗ рдЧрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА Auth0 рдСрдереЛрд░рд╛рдпрдЭреЗрд╢рди рдПрдХреНрд╕реНрдЯреЗрдВрд╢рди рд╡рд╛рдкрд░реВ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╡рд┐рдз рд╕реНрддрд░рд╛рдВрд╡рд░ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Istio рд╡рд╛рдкрд░реВ.

Auth0 рдЕрдзрд┐рдХреГрддрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

Auth0 рдкреЛрд░реНрдЯрд▓рдордзреНрдпреЗ, рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╡рд░ рдЬрд╛ (рд╡рд┐рд╕реНрддрд╛рд░) рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ Auth0 рдЕрдзрд┐рдХреГрддрддрд╛. рд╕реНрдерд╛рдкрдиреЗрдирдВрддрд░, рд╡рд░ рдЬрд╛ рдЕрдзрд┐рдХреГрддрддрд╛ рд╡рд┐рд╕реНрддрд╛рд░, рдЖрдгрд┐ рддреЗрдереЗ - рд╡рд░рдЪреНрдпрд╛ рдЙрдЬрд╡реАрдХрдбреЗ рдХреНрд▓рд┐рдХ рдХрд░реВрди рдЖрдгрд┐ рдпреЛрдЧреНрдп рдореЗрдиреВ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбреВрди рднрд╛рдбреЗрдХрд░реВрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╡рд░ рдЬрд╛ (рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди). рдЧрдЯ рд╕рдХреНрд░рд┐рдп рдХрд░рд╛ (рдЧрдЯ) рдЖрдгрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд┐рдпрдо рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ (рдирд┐рдпрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рд╛).

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

рдЧрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдЕрдзрд┐рдХреГрддрддрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд╛рдордзреНрдпреЗ рдЬрд╛ рдЧрдЯ рдЖрдгрд┐ рдПрдХ рдЧрдЯ рддрдпрд╛рд░ рдХрд░рд╛ рдирд┐рдпрдВрддреНрд░рдХ. рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдкреНрд░рдорд╛рдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдорд╛рдирдгрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.

рдПрдХ рдЧрдЯ рдирд┐рд╡рдбрд╛ рдирд┐рдпрдВрддреНрд░рдХ, рджрд╛рдмрд╛ рд╕рднрд╛рд╕рдж рдЬреЛрдбрд╛, рддреБрдордЪреЗ рдореБрдЦреНрдп рдЦрд╛рддреЗ рдЬреЛрдбрд╛. рдХрд╛рд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдирд╛рдХрд╛рд░рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧрдЯрд╛рд╢рд┐рд╡рд╛рдп рд╕реЛрдбрд╛. (рдирд╡реАрди рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдпрд╛рджреНрд╡рд╛рд░реЗ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд Auth0 рдкреЛрд░реНрдЯрд▓ > рд╡рд╛рдкрд░рдХрд░реНрддреЗ > рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛.)

рдкреНрд░рд╡реЗрд╢ рдЯреЛрдХрдирдордзреНрдпреЗ рдЧрдЯ рд╣рдХреНрдХ рдЬреЛрдбрд╛

рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдЧрдЯрд╛рдВрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╣реА рдорд╛рд╣рд┐рддреА рдНрдХреНрд╕реЗрд╕ рдЯреЛрдХрдирдордзреНрдпреЗ рджреЗрдЦреАрд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. OpenID Connect рдЪреЗ рдкрд╛рд▓рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдЧрдЯ рдкрд░рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЯреЛрдХрдирд▓рд╛ рд╕реНрд╡рддрдГрдЪреЗ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╕рд╛рдиреБрдХреВрд▓ рджрд╛рд╡рд╛. Auth0 рдирд┐рдпрдорд╛рдВрджреНрд╡рд╛рд░реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ.

рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, Auth0 рдкреЛрд░реНрдЯрд▓рд╡рд░ рдЬрд╛ рдирд┐рдпрдо, рджрд╛рдмрд╛ рдирд┐рдпрдо рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рдордзреВрди рд░рд┐рдХреНрдд рдирд┐рдпрдо рдирд┐рд╡рдбрд╛.

Istio рд╕рд╣ microservices рд╡рд░ рдкрд░рдд. рднрд╛рдЧ 3

рдЦрд╛рд▓реАрд▓ рдХреЛрдб рдХреЙрдкреА рдХрд░рд╛ рдЖрдгрд┐ рдирд╡реАрди рдирд┐рдпрдо рдореНрд╣рдгреВрди рд╕реЗрд╡реНрд╣ рдХрд░рд╛ рдЧрдЯ рд╣рдХреНрдХ рдЬреЛрдбрд╛ (namespacedGroup.js):

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

рд╢реЗрд░рд╛: рд╣рд╛ рдХреЛрдб рдСрдереЛрд░рд╛рдпрдЭреЗрд╢рди рдПрдХреНрд╕реНрдЯреЗрдВрд╢рдирдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдкрд╣рд┐рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЧрдЯ рдШреЗрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рд╕рд╛рдиреБрдХреВрд▓ рд╣рдХреНрдХ рдореНрд╣рдгреВрди рдкреНрд░рд╡реЗрд╢ рдЯреЛрдХрдирдордзреНрдпреЗ рдЬреЛрдбрддреЛ (рддреНрдпрд╛рдЪреНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕ рдЕрдВрддрд░реНрдЧрдд, Auth0 рджреНрд╡рд╛рд░реЗ рдЖрд╡рд╢реНрдпрдХ).

рдкреГрд╖реНрдард╛рд╡рд░ рдкрд░рдд рдпрд╛ рдирд┐рдпрдо рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЦрд╛рд▓реАрд▓ рдХреНрд░рдорд╛рдиреЗ рджреЛрди рдирд┐рдпрдо рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗрдд рдХрд╛ рддреЗ рддрдкрд╛рд╕рд╛:

  • auth0-рдЕрдзрд┐рдХреГрддреАрдХрд░рдг-рд╡рд┐рд╕реНрддрд╛рд░
  • рдЧрдЯ рд╣рдХреНрдХ рдЬреЛрдбрд╛

рдСрд░реНрдбрд░ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдЖрд╣реЗ рдХрд╛рд░рдг рдЧреНрд░реБрдк рдлреАрд▓реНрдбрд▓рд╛ рдирд┐рдпрдо рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕рдкрдгреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЛ auth0-рдЕрдзрд┐рдХреГрддреАрдХрд░рдг-рд╡рд┐рд╕реНрддрд╛рд░ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рддреЗ рджреБрд╕рд▒реНрдпрд╛ рдирд┐рдпрдорд╛рджреНрд╡рд╛рд░реЗ рд╣рдХреНрдХ рдореНрд╣рдгреВрди рдЬреЛрдбрд▓реЗ рдЬрд╛рддреЗ. рдкрд░рд┐рдгрд╛рдо рдЕрд╕рд╛ рдкреНрд░рд╡реЗрд╢ рдЯреЛрдХрди рдЖрд╣реЗ:

{
 "https://sa.io/group": "Moderators",
 "iss": "https://sentiment-analysis.eu.auth0.com/",
 "sub": "google-oauth2|196405271625531691872"
 // [╤Б╨╛╨║╤А╨░╤Й╨╡╨╜╨╛ ╨┤╨╗╤П ╨╜╨░╨│╨╗╤П╨┤╨╜╨╛╤Б╤В╨╕]
}

рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪрд╛ рдкреНрд░рд╡реЗрд╢ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рдЬреНрдпрд╛рд╕рд╛рдареА рдЧрдЯ рджрд╛рд╡реНрдпрд╛рддреВрди рдмрд╛рд╣реЗрд░ рдХрд╛рдврд▓рд╛ рдЬрд╛рдИрд▓ (https://sa.io/group) рдкрд░рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рд╡реЗрд╢ рдЯреЛрдХрдирдордзреНрдпреЗ. рд╣рд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рднрд╛рдЧрд╛рдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ.

Istio рдордзреНрдпреЗ рдЕрдзрд┐рдХреГрддрддрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХреГрддрддреЗрд╕рд╛рдареА, рддреБрдореНрд╣реА Istio рд╕рд╛рдареА RBAC рд╕рдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡рд╛рдкрд░реВ:

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 тАФ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡рд╛рдВрдЪреА рдпрд╛рджреА рдХрд░рддреЛ.

рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдбрд╕рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реВрдпрд╛:

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

рд╕рд░реНрд╡ рд╕реЗрд╡рд╛рдВрдирд╛ рдЖрддрд╛ рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рд╕рд░реНрд╡ рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│реЗрд▓ RBAC: access denied. рдЖрддрд╛ рдЕрдзрд┐рдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рджреНрдпрд╛.

рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ SA-Frontend рдЖрдгрд┐ SA-WebApp рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ Istio рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░реВрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА:

  • рд╕реЗрд╡рд╛рднреВрдорд┐рдХрд╛ тАФ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ;
  • рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ тАФ рд╣реА рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓ рдХреЛрдгрд╛рдЪреА рдЖрд╣реЗ рд╣реЗ рдард░рд╡рддреЗ.

рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЖрдореНрд╣реА рдХрд╛рд╣реА рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдК (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 рд╕рд░реНрд╡ рдкреГрд╖реНрда рдЕрднреНрдпрд╛рдЧрддрд╛рдВрдирд╛ рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓ рд▓рд╛рдЧреВ рдХрд░рд╛ (рдирд┐рдпрдорд┐рдд-рд╡рд╛рдкрд░рдХрд░реНрддрд╛-рд╕реЗрд╡рд╛-рднреВрдорд┐рдХрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.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 рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореВрд▓рднреВрдд рдЬреНрдЮрд╛рди рдЖрдгрд┐ рддрдпрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рдЕрдиреБрд╡рд╛рджрдХрд╛рдХрдбреВрди рдкреБрдирд╢реНрдЪ

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛