Kubernetes RBAC рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг

рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред : рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдФрд░ рдЖрд░рдмреАрдПрд╕реА рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдбрд╛рд▓реНрдЯрд╕ рдмрд┐рдЧ рдбреЗрдЯрд╛ рдХрдВрдкрдиреА рдХреЗ рдПрдХ рдлреНрд░рд╛рдВрд╕реАрд╕реА рд╕рд▓рд╛рд╣рдХрд╛рд░ рд╕реЗ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдЦрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдВ рдФрд░ рд╕реЗрд╡рд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред

рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрдд рд╣реИ: рдЗрд╕рдХрд╛ рднреА рджреЛрд╣рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

( рд╕реАрдПрдирд╕реАрдПрдл рдмреНрд▓реЙрдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░рдг - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджред)

рдпрд╣ рдЖрд▓реЗрдЦ X.509 рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдореВрд▓ рдЖрд░рдмреАрдПрд╕реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд░реЗрдВред рд╣рдо рдХреБрдЫ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ: рд░рдХреНрдХреЗрд╕, рдХреБрдмреНрд▓реЗрдЯ-рдЬреЛ-рдХреИрди, рдЖрд░рдмреИрдХ-рд▓реБрдХрдЕрдк рдФрд░ рдЖрд░рдмреАрдПрд╕реА рдореИрдиреЗрдЬрд░ред

рдкреВрд░реНрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдФрд░ рдорд╛рдиреНрдпрддрд╛рдПрдБ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдИ рдзрд╛рд░рдгрд╛рдПрдВ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рддреИрдпрд╛рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд▓реЗрдЦ (рдЖрд░реНрдерд░ BUSSER) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╡реИрдЧреНрд░рд╛рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CentOS 7 рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ 4 рдиреЛрдб рд╣реИрдВ: рдПрдХ рдорд╛рд╕реНрдЯрд░ рдФрд░ 3 рд╢реНрд░рдорд┐рдХред рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬ рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

RBAC API


рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг (RBAC) рдПрдХ рдХрдВрдкрдиреА рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред RBAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рднреА рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ CRUD (рдХреНрд░рд┐рдПрдЯ, рд░реАрдб, рдЕрдкрдбреЗрдЯ, рдбрд┐рд▓реАрдЯ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

  • рдирд╛рдо рд╕реНрдерд╛рди;
  • Pod'y;
  • Deployment'y;
  • рд▓рдЧрд╛рддрд╛рд░ рд╡реЙрд▓реНрдпреВрдо (PersistentVolumes);
  • ConfigMap'yред

рдФрд░ рдпрд╣рд╛рдВ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

  • create ;
  • get (рд╕реНрд╡рд╛рдЧрдд);
  • delete (рд╣рдЯрд╛рдирд╛) ;
  • list ( list рджреГрд╢реНрдп) ;
  • update ред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ RBAC рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • Role рдФрд░ ClusterRole ред рдпреЗ рдХреЗрд╡рд▓ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдо рд╕реЗрдЯ рд╣реИрдВред Role рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рднреАрддрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ClusterRole Role рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рднреА рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддрдерд╛рдХрдерд┐рдд рдЧреИрд░-рд╕рдВрд╕рд╛рдзрди рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ (рдЬреИрд╕реЗ /healthz - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж) ред
  • Subjects ред рд╡рд┐рд╖рдп рдПрдХ рдЗрдХрд╛рдИ рд╣реИ рдЬреЛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╕реЗрд╡рд╛рдПрдБ рдпрд╛ рд╕рдореВрд╣ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • RoleBinding рдФрд░ ClusterRoleBinding ред рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рднреВрдорд┐рдХрд╛ рдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╕реНрдЯрд░ рдХреЗ рдЕрдзреАрди рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреВрдорд┐рдХрд╛рдПрдБ рд╣реИрдВ:

  • view : рд░реАрдб-рдУрдирд▓реА рдПрдХреНрд╕реЗрд╕, рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░;
  • edit : рдЙрдкрд░реЛрдХреНрдд + рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рднреВрдорд┐рдХрд╛ рдмрдВрдзрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░;
  • admin : рдЙрдкрд░реЛрдХреНрдд + рдирд╛рдорд╕реНрдерд╛рди рд╕реНрддрд░ рдкрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рд░реЛрд▓ рдореИрдкрд┐рдВрдЧ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
  • cluster-admin : рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ред

рдмреЗрд╢рдХ, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ Roles рдФрд░ ClusterRoles рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдпрдерд╛рд╕рдВрднрд╡ рдпрдерд╛рд╕рдВрднрд╡ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рд╕рдм рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рд╣рдо рджреЛ рдирд╛рдорд╕реНрдерд╛рди рдмрдирд╛рдпреЗрдВрдЧреЗ: my-project-dev рдФрд░ my-project-prod , - рд╕рд╛рде рд╣реА рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: jean рдФрд░ sarah - рдЗрди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде:

  • рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛-рджреЗрд╡:
    • рдЬреАрди: рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
  • рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛-prod:
    • рдЬреАрди: рджреЗрдЦреЗрдВ
    • рд╕рд╛рд░рд╛: рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

X.509 рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдВ


рдЖрдорддреМрд░ рдкрд░, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдФрд░ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ ред рд╣рдо рдмрд╛рдж рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдХреИрд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдмрд╛рд╣рд░реА, рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рднреВрдорд┐рдХрд╛ рдирд┐рдЬреА рдХреБрдВрдЬреА, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬреИрд╕реЗ рдХрд┐рд╕реНрдЯреЛрди рдпрд╛ Google рдЦрд╛рддреЗ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рддрд░рдг рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рднрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИред API рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдореВрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ :
    • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдпрд╛ рд╕рдорд╛рди) рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛: рдкрд╛рд╕рд╡рд░реНрдб, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдпреВрдЖрдИрдбреА, рд╕рдореВрд╣;
  • X.509 рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░:
    • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд░реНрдорд╛рдг;
    • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг (рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реАрдП) рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг;
  • рдмрд┐рдпрд░рд░ рдЯреЛрдХрди (JSON рд╡реЗрдм рдХреИрдо, JWT):
    • рдУрдкреЗрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ
    • OAuth 2.0 рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░рдд;
    • рд╡реЗрдм рд╣реБрдХ (webhooks)ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЙрдирдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг X.509 рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ - рд╣рдо рдЙрди рд╕рднреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред рдХреНрд▓рд╕реНрдЯрд░ (рдХреНрд▓рд╕реНрдЯрд░-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ) рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рдХреЗ рддрд╣рдд рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ jean рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП):

  • рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рд╢реЗрд╖ рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ:

     useradd jean && cd /home/jean 
  • рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдмрдирд╛рдПрдБ:

     openssl genrsa -out jean.key 2048 
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдиреБрд░реЛрдз (CSR) рдмрдирд╛рдПрдВред CN рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ, O рд╕рдореВрд╣ рд╣реИред рдЖрдк рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдЕрдиреБрдорддрд┐ рд╡рд╛рд▓реЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ:

     #   openssl req -new -key jean.key \ -out jean.csr \ -subj "/CN=jean" #     $group openssl req -new -key jean.key \ -out jean.csr \ -subj "/CN=jean/O=$group" #       openssl req -new -key jean.key \ -out jean.csr \ -subj "/CN=jean/O=$group1/O=$group2/O=$group3" 
  • Kubernetes CA рдореЗрдВ CSR рд╕рд╛рдЗрди рдХрд░реЗрдВред рд╣рдореЗрдВ CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ /etc/kubernetes/pki ред рдкреНрд░рдорд╛рдгрдкрддреНрд░ 500 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрдЧрд╛:

     openssl x509 -req -in jean.csr \ -CA /etc/kubernetes/pki/ca.crt \ -CAkey /etc/kubernetes/pki/ca.key \ -CAcreateserial \ -out jean.crt -days 500 
  • .certs рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБред рдЗрд╕рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ:

     mkdir .certs && mv jean.crt jean.key .certs 
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ:

     kubectl config set-credentials jean \ --client-certificate=/home/jean/.certs/jean.crt \ --client-key=/home/jean/.certs/jean.key 
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░реЗрдВ:

     kubectl config set-context jean-context \ --cluster=kubernetes --user=jean 
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ /etc/kubernetes рдореЗрдВ рдирд┐рд╣рд┐рдд /etc/kubernetes : certificate-authority-data рдФрд░ server рдЪрд░ рдЙрд╕реА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:

     apiVersion: v1 clusters: - cluster: certificate-authority-data: {  } server: {  } name: kubernetes contexts: - context: cluster: kubernetes user: jean name: jean-context current-context: jean-context kind: Config preferences: {} users: - name: jean user: client-certificate: /home/jean/.certs/jean.cert client-key: /home/jean/.certs/jean.key 

    рдЕрдм рдЖрдкрдХреЛ .kube рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЙрдиреНрдлрд┐рдЧ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

     mkdir .kube && vi .kube/config 
  • рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рднреА рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рд╛рдореА рдмрдирд╛ рджреЗрддрд╛ рд╣реИ:

     chown -R jean: /home/jean/ 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ jean рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ jean ред рд╣рдо sarah рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗред рдХрд╛рдлреА рдХреБрдЫ рдЪрд░рдг рд╣реИрдВ, рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ: рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдЯрд╣рдм рдкрд░ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред : рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ рд╣рд╛рд▓рд┐рдпрд╛ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ "рджреЗрд╢реА" рддрд░реАрдХреЗ рд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдХреБрдмреЗрдбрдо рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп, рд╡реЗ рдЕрд▓реНрдлрд╛ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг kubeadm alpha kubeconfig user ред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдФрд░ рд╣рдо рджреЛ рдирд╛рдо рд╕реНрдерд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

 kubectl create namespace my-project-dev kubectl create namespace my-project-prod 

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 User: Jean kubectl get nodes Error from server (Forbidden): nodes is forbidden: User "jean" cannot list resource "nodes" in API group "" at the cluster scope kubectl get pods -n default Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "default" kubectl get pods -n my-project-prod Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "my-project-prod" kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "my-project-dev" 

 User: Sarah kubectl get nodes Error from server (Forbidden): nodes is forbidden: User "sarah" cannot list resource "nodes" in API group "" at the cluster scope kubectl get pods -n default Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "default" kubectl get pods -n my-project-prod Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-prod" kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-dev" 

рд░реЛрд▓ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз ClusterRole рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдпрд╣ рднреА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрдирд╛ Role рдФрд░ ClusterRole рдХреИрд╕реЗ рдмрдирд╛рдПрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, Role рдФрд░ ClusterRole рдХреЗрд╡рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ (рдЬрд┐рд╕реЗ verbs рдХрд╣рд╛ рдЬрд╛рддрд╛ verbs , ClusterRole , рд╢рдмреНрджрд╢рдГ - рдХреНрд░рд┐рдпрд╛) рдЬреЛ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг YAML рдлрд╝рд╛рдЗрд▓ рд╣реИ:

 apiVersion: rbac.authorization.k8s.io/v1beta1 kind: Role metadata: name: list-deployments namespace: my-project-dev rules: - apiGroups: [ apps ] resources: [ deployments ] verbs: [ get, list ] --------------------------------- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: list-deployments rules: - apiGroups: [ apps ] resources: [ deployments ] verbs: [ get, list ] 

рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

 kubectl create -f /path/to/your/yaml/file 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рднреВрдорд┐рдХрд╛ рдпрд╛ рдХреНрд▓рд╕реНрдЯрд░


рдЕрдм рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ ClusterRole ( edit рдФрд░ view ) рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ ClusterRole :

  • jean :
    • edit - рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ my-project-dev ;
    • view - рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ my-project-prod ;
  • sarah :
    • edit - my-project-prod рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВред

рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, jean рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рджреЛ рд░реЛрд▓рдмрд┐рдиреНрдбрд┐рдВрдЧ рдмрдирд╛рдПрдВрдЧреЗред рдПрдХ YAML рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ jean рд▓рд┐рдП рд░реЛрд▓рдмрд┐рдиреНрдбрд┐рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jean namespace: my-project-dev subjects: - kind: User name: jean apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: edit apiGroup: rbac.authorization.k8s.io --------------------------------- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jean namespace: my-project-prod subjects: - kind: User name: jean apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io 

рд╣рдо jean рдХреЛ my-project-prod рдХреЛ view рдФрд░ my-project-dev рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╡рд╣реА sarah рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

 kubectl apply -f /path/to/your/yaml/file 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, kubectl create рдмрдЬрд╛рдп kubectl apply рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ create рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ apply - рди рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐ рдорд┐рд▓реА рд╣реИред

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: sarah ( my-project-prod рдореЗрдВ edit )
    • my-project-prod
      • рдлрд▓реА (1) рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
      • рддреИрдирд╛рддреА (2) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
    • my-project-dev
      • рдкреЙрдбреНрд╕ (4) рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
      • рддреИрдирд╛рддреА (5) рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред

 (1) kubectl get pods -n my-project-prod No resources found. (2) kubectl run nginx --image=nginx --replicas=1 -n my-project-prod deployment.apps/nginx created (3) kubectl get pods -n my-project-prod NAME READY STATUS RESTARTS AGE nginx-7db9fccd9b-t14qw 1/1 Running 0 4s (4) kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-dev" (5) kubectl run nginx --image=nginx --replicas=1 -n my-project-dev Error from server (Forbidden): deployments.apps is forbidden: User "sarah" cannot create resource "deployments" in API group "apps" in the namespace "my-project-dev" 

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: jean ( my-project-prod рдФрд░ my-project-dev рдореЗрдВ edit )
    • my-project-prod
      • рдлрд▓реА (1) рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
      • рддреИрдирд╛рддреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ '(2);
      • рддреИрдирд╛рддреА (3) рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗред
    • рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛-рджреЗрд╡:
      • рдлрд▓реА (4) рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
      • рддреИрдирд╛рддреА (5) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ;
      • рддреИрдирд╛рддреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ '(6);
      • рддреИрдирд╛рддреА (7) рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

 (1) kubectl get pods -n my-project-prod NAME READY STATUS RESTARTS AGE nginx-7db9fccd9b-t14qw 1/1 Running 0 101s (2) kubectl get deploy -n my-project-prod NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 110s (3) kubectl delete deploy/nginx -n my-project-prod Error from server (Forbidden): deployments.extensions "nginx" is forbidden: User "jean" cannot delete resource "deployments" in API group "extensions" in the namespace "my-project-prod" (4) kubectl get pods -n my-project-dev No resources found. (5) kubectl run nginx --image=nginx --replicas=1 -n my-project-dev deployment.apps/nginx created (6) kubectl get deploy -n my-project-dev NAME READY UP-TO-DATE AVAILABLE AGE nginx 0/1 1 0 13s (7) kubectl delete deploy/nginx -n my-project-dev deployment.extensions "nginx" deleted (8) kubectl get deploy -n my-project-dev No resources found. 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдгреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдЕрдм рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ? рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИрдВ? рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╣реИ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рддреНрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рд╣рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдЪрд╛рд╣рд┐рдПред kubectl auth can-i рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 # kubectl auth can-i $action $resource --as $subject (1) kubectl auth can-i list pods (2) kubectl auth can-i list pods --as jean 

рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб (1) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ (2) - рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рдкреБрдирд░реНрдЬрдиреНрдо" рдХреЗрд╡рд▓ рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╣реИред

рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рд╣реИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдХреБрдмреНрдмреНрд▓реЗрдЯ рдСрд░реНрдЯ-рдХреИрди рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: рдЬрд╛рдУ рдФрд░ рдХреНрд░реВ ред

рд╕реНрдерд╛рдкрдирд╛ рдЬрд╛рдУ


рдЧреЛ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рд░рд▓, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдХреБрд╢рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ Google рджреНрд╡рд╛рд░рд╛ C рдФрд░ рдкрд╛рд╕реНрдХрд▓ рдХреА рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рддрд╣рдд рд░реЙрдмрд░реНрдЯ рдЧреНрд░рд┐рд╕реЗрдорд░ , рд░реЙрдм рдкрд╛рдЗрдХ рдФрд░ рдХреЗрди рдереЙрдореНрдкрд╕рди рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

 wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin 

рдХреНрд░реВ рд╕реНрдерд╛рдкрдирд╛


рдХреНрд░реВ рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдХреБрдмреНрд▓реЗрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред Krew рдЖрдкрдХреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдвреВрдВрдврдиреЗ, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ apt, dnf рдпрд╛ рдХрд╛рдврд╝рд╛ рдЬреИрд╕реЗ рдЯреВрд▓ рд╕реЗ рдорд┐рд▓рддрд╛ рдЬреБрд▓рддрд╛ рд╣реИред рдХреНрд░реВ рдХреЗрд╡рд▓ kubectl рд╕рдВрд╕реНрдХрд░рдг 1.12 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред

 set -x; cd "$(mktemp -d)" && curl -fsSLO "https://storage.googleapis.com/krew/v0.2.1/krew.{tar.gz,yaml}" && tar zxvf krew.tar.gz && ./krew-"$(uname | tr '[:upper:]' '[:lower:]')_amd64" install \ --manifest=krew.yaml --archive=krew.tar.gz export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" 

rakkess


рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреА рдЧрдИ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ jean рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 kubectl krew install access-matrix 

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд▓реЗрдЦрди GitHub рдкрд░ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╣рд╛рдБ рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 kubectl access-matrix -n my-project-dev --as jean 



kubect-рдХреМрди-рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: "рдпрд╣ рдХреМрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?" рд╕реНрдерд╛рдкрдирд╛:

 go get -v github.com/aquasecurity/kubectl-who-can 

рджрд╕реНрддрд╛рд╡реЗрдЬ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ ред рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг:

 kubectl-who-can list pods -n default No subjects found with permissions to list pods assigned through RoleBindings CLUSTERROLEBINDING SUBJECT TYPE SA-NAMESPACE cluster-admin system:masters Group rbac-manager rbac-manager ServiceAccount rbac-manager system:controller:attachdetach-controller attachdetach-controller ServiceAccount kube-system system:controller:clusterrole-aggregation-controller clusterrole-aggregation-controller ServiceAccount kube-system system:controller:cronjob-controller cronjob-controller ServiceAccount kube-system system:controller:daemon-set-controller daemon-set-controller ServiceAccount kube-system system:controller:deployment-controller deployment-controller ServiceAccount kube-system system:controller:endpoint-controller endpoint-controller ServiceAccount kube-system system:controller:generic-garbage-collector generic-garbage-collector ServiceAccount kube-system system:controller:horizontal-pod-autoscaler horizontal-pod-autoscaler ServiceAccount kube-system system:controller:job-controller job-controller ServiceAccount kube-system system:controller:namespace-controller namespace-controller ServiceAccount kube-system system:controller:node-controller node-controller ServiceAccount kube-system system:controller:persistent-volume-binder persistent-volume-binder ServiceAccount kube-system system:controller:pod-garbage-collector pod-garbage-collector ServiceAccount kube-system system:controller:pvc-protection-controller pvc-protection-controller ServiceAccount kube-system system:controller:replicaset-controller replicaset-controller ServiceAccount kube-system system:controller:replication-controller replication-controller ServiceAccount kube-system system:controller:resourcequota-controller resourcequota-controller ServiceAccount kube-system system:controller:statefulset-controller statefulset-controller ServiceAccount kube-system system:coredns coredns ServiceAccount kube-system system:kube-controller-manager system:kube-controller-manager User system:kube-scheduler system:kube-scheduler User 

RBAC-рджреЗрдЦрдиреЗ


рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ RBAC рдирд┐рдпрдореЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдпрд╣ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: " jean рдФрд░ sarah рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ?", "рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рднреВрдорд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ?", "рдкреВрд░реЗ рд╕рдореВрд╣ рдХреА рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ?"ред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

 kubectl krew install rbac-lookup 

рджрд╕реНрддрд╛рд╡реЗрдЬ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ ред рдпрд╣рд╛рдБ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 kubectl-rbac_lookup jean SUBJECT SCOPE ROLE jean my-project-dev ClusterRole/edit jean my-project-prod ClusterRole/view kubectl-rbac_lookup sarah SUBJECT SCOPE ROLE sarah my-project-prod ClusterRole/edit kubectl-rbac_lookup --kind user SUBJECT SCOPE ROLE jean my-project-dev ClusterRole/edit jean my-project-prod ClusterRole/view sarah my-project-prod ClusterRole/edit system:anonymous kube-public Role/kubeadm:bootstrap-signer-clusterinfo system:kube-controller-manager kube-system Role/extension-apiserver-authentication-reader system:kube-controller-manager kube-system Role/system::leader-locking-kube-controller-manager system:kube-controller-manager cluster-wide ClusterRole/system:kube-controller-manager system:kube-proxy cluster-wide ClusterRole/system:node-proxier system:kube-scheduler kube-system Role/extension-apiserver-authentication-reader system:kube-scheduler kube-system Role/system::leader-locking-kube-scheduler system:kube-scheduler cluster-wide ClusterRole/system:kube-scheduler system:kube-scheduler cluster-wide ClusterRole/system:volume-scheduler kubectl-rbac_lookup --kind group SUBJECT SCOPE ROLE system:authenticated cluster-wide ClusterRole/system:basic-user system:authenticated cluster-wide ClusterRole/system:discovery system:authenticated cluster-wide ClusterRole/system:public-info-viewer system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:node-bootstrapper system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:certificates.k8s.io:certificatesigningrequests:nodeclient system:bootstrappers:kubeadm:default-node-token kube-system Role/kube-proxy system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:kubelet-config-1.14 system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:nodes-kubeadm-config system:masters cluster-wide ClusterRole/cluster-admin system:nodes kube-system Role/kubeadm:kubelet-config-1.14 system:nodes kube-system Role/kubeadm:nodes-kubeadm-config system:nodes cluster-wide ClusterRole/system:certificates.k8s.io:certificatesigningrequests:selfnodeclient system:unauthenticated cluster-wide ClusterRole/system:public-info-viewer 

RBAC рдкреНрд░рдмрдВрдзрдХ


рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡рд╣ рдЖрд░рдмреАрдПрд╕реА рдХрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдпрд╣ рдХрдИ рдЖрд╡рд╢реНрдпрдХ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рднреВрдорд┐рдХрд╛рдПрдБ рдмрдирд╛рддреЗ рд╕рдордп, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реЛрд▓рдмрд┐рдиреНрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред RBAC рдкреНрд░рдмрдВрдзрдХ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GitHub рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ YAML рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреА рд╣реЛрдЧреА:

 kubectl apply -f /path/to/rbac/manager/yaml/file 

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ ред рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг:

 apiVersion: rbacmanager.reactiveops.io/v1beta1 kind: RBACDefinition metadata: name: jose rbacBindings: - name: jose subjects: - kind: User name: jose roleBindings: - namespace: my-project-prod clusterRole: edit - namespace: my-project-dev clusterRole: edit 

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рдУрдкрдирдПрдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде X.509 рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╢рдХреНрдд рдмрдирд╛рдпрд╛ред рдЖрд╕рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдЖрдк GitHub рдкрд░ рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ kubeadm рдХрдорд╛рдВрдб - рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди ред) ред рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдУрдкрди рд╕реЛрд░реНрд╕-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • kubectl Cort can-i : рдпрд╣ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
  • rakkess : рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ;
  • kubectl-who-can : рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
  • рдЖрд░рдмреИрдХ-рд▓реБрдХрд┐рдВрдЧ : рдЖрд░рдмреАрдПрд╕реА рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;
  • рдЖрд░рдмреАрдПрд╕реА рдореИрдиреЗрдЬрд░ : рд░рд╛рдЗрдЯреНрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рдВрдпреЛрдЬрди рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ, рд░рд╛рдЗрдЯреНрд╕ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░рдмреАрдПрд╕реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдмрдирд╛рддреЗ рд╣реИрдВ)ред рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд░рдкреЛрд░реЗрдЯ LDAP рдХреЛ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ ( Kismatic [ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд┐рддреНрдпрдХреНрдд рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ] рдФрд░ ObjectifLibre ) Kubernetes webhooks рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ LDAP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдУрдкрдирдЖрдИрдбреА рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдПрд▓рдбреАрдПрдкреА рдХреЗ рд╕рд╛рде рдмреИрдХреЗрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:

Source: https://habr.com/ru/post/hi470503/


All Articles