Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 3

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 3

рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджред: рдкрд╣рд┐рд▓реЛ рднрд╛рдЧ рдпреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ Istio рдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдЬрд╛рдиреНрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╛рд░реНрдпрдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдорд░реНрдкрд┐рдд рдерд┐рдпреЛ, рджреЛрд╕реНрд░реЛ - рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЯреНрдпреБрди рдЧрд░рд┐рдПрдХреЛ рдорд╛рд░реНрдЧ рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдиред рдЕрдм рд╣рд╛рдореА рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВ: рдпрд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рд▓реЗрдЦрдХрд▓реЗ Auth0 рдкрд╣рд┐рдЪрд╛рди рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рддрд░ рдЕрдиреНрдп рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ рд╕рдорд╛рди рд░реВрдкрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рд╣рд╛рдореАрд▓реЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдпреМрдВ рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ Istio рд░ рдЙрджрд╛рд╣рд░рдг рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рд╕реЗрдиреНрдЯреАрдореЗрдиреНрдЯ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕, Istio рдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред

Istio рдХреЛ рд╕рд╛рде, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрд▓рд╛рдИ рд╕рд╛рдиреЛ рд░рд╛рдЦреНрди рд╕рдХреНрд╖рдо рднрдпреМрдВ рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ, рдЯрд╛рдЗрдордЖрдЙрдЯрд╣рд░реВ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░рд╣рд░реВ, рдЯреНрд░реЗрд╕рд┐рдЩ, рдирд┐рдЧрд░рд╛рдиреА рдЬрд╕реНрддрд╛ рддрд╣рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рдердк рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдЙрдиреНрдирдд рдкрд░реАрдХреНрд╖рдг рд░ рддреИрдирд╛рддреА рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ: A/B рдкрд░реАрдХреНрд╖рдг, рдорд┐рд░рд░рд┐рдЩ рд░ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВред

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 3

рдирдпрд╛рдБ рд╕рд╛рдордЧреНрд░реАрдорд╛, рд╣рд╛рдореА рд╡реНрдпрд╛рдкрд╛рд░ рдореВрд▓реНрдпрдХреЛ рдорд╛рд░реНрдЧрдорд╛ рдЕрдиреНрддрд┐рдо рддрд╣рд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг - рд░ Istio рдорд╛ рдпреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдиреНрдж рд╣реЛ!

Istio рдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг

рдо рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рд╣реБрдиреЗрдЫреБ рднрдиреЗрд░ рдореИрд▓реЗ рдХрд╣рд┐рд▓реНрдпреИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрджрд┐рдиред Istio рд▓реЗ рдпреА рд╡рд┐рд╖рдпрд╣рд░реВрд▓рд╛рдИ рд░рдорд╛рдЗрд▓реЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреА рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдЕрдЭ рдмрдвреА, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░реЗрд░рд┐рдд рдЧрд░реНрди?

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

рд░рд╛рдореНрд░реЛ рд▓рд╛рдЧреНрдЫ? рднрд┐рддреНрд░ рд╣реЗрд░реМрдВ!

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

рдкрд╣рд┐рдЪрд╛рди рд░ рдкрд╣реБрдБрдЪ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореА Auth0 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдЫ, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рд╣рдЬ рдЫ рд░ рдорд▓рд╛рдИ рдпреЛ рдордирдкрд░реНрдЫред рдпрджреНрдпрдкрд┐, рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдХреБрдиреИ рдкрдирд┐ рдЕрдиреНрдпрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ OpenID рдЬрдбрд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: 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 рдкреЛрд░реНрдЯрд▓ > APIs > API рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдлрд╛рд░рдо рднрд░реНрдиреБрд╣реЛрд╕реН:

Istio рд╕рдВрдЧ microservices рдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рднрд╛рдЧ 3

рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдЫ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛, рдЬреБрди рд╣рд╛рдореА рдкрдЫрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рд▓реЗрдЦреМрдВ:

  • рджрд░реНрд╢рдХ: {YOUR_AUDIENCE}

рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рдмрд╛рдБрдХреА рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЦрдгреНрдбрдХреЛ Auth0 рдкреЛрд░реНрдЯрд▓рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рдЖрд╡реЗрджрди - рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди (рдПрдкреАрдЖрдИрдХреЛ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ)ред

рдпрд╣рд╛рдБ рд╣рд╛рдореА рд▓реЗрдЦреНрдиреЗрдЫреМрдВ:

  • рдбреЛрдореЗрди: {YOUR_DOMAIN}
  • рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА: {YOUR_CLIENT_ID}

рдорд╛ рд╕реНрдХреНрд░реЛрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкрд╛рда рдХреНрд╖реЗрддреНрд░рдорд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдХрд▓рдмреНрдпрд╛рдХ URL рд╣рд░реВ (рдХрд▓рдмреНрдпрд╛рдХрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдПрдХреЛ URLs), рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдХрд▓ рдкрдард╛рдЗрдиреЗ URL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рдорд╛ рдпреЛ рдЫ:

http://{EXTERNAL_IP}/callback

рд░ рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рд▓рдЧрдЖрдЙрдЯ URL рд╣рд░реВ (рд▓рдЧ рдЖрдЙрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ URL рд╣рд░реВ) рдердкреНрдиреБрд╣реЛрд╕реН:

http://{EXTERNAL_IP}/logout

рдЕрдЧрд╛рдбрд┐ рдмрдвреМрдВред

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

рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН auth0 REPOSITORIA [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;
  • реи - рд╣рд╛рдореА рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрдЫреМрдВред

рдирд┐рдореНрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реМрдВ:

$ 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.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 рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдирд┐рдпрдорд┐рдд-рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рд╕реЗрд╡рд╛-рднреВрдорд┐рдХрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.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

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди