рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП LDAP рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдлрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ

рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП LDAP рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдлрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ

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

рдЪрд╛рднреА рдХреА рд╕реНрдерд╛рдкрдирд╛

рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рд╣реИред рдпрд╣ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдлреНрд░реАрдЖрдИрдкреАрдП, рдУрдкрдирдПрд▓рдбреАрдПрдкреА рдпрд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЖрдк рд╕реАрдзреЗ рдХреАрдХреНрд▓реЛрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрдЖрдИрдбреАрд╕реА рдкреНрд░рджрд╛рддрд╛рдУрдВ (Google, Github, Gitlab) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП Keycloak рдХреЛ рд╣реА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЕрд▓рдЧ рд╕реЗ рдпрд╛ рд╕реАрдзреЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, рдЖрдк рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред

Keycloak рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ h2 (рд╕рднреА рдбреЗрдЯрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ postgres, mysql рдпрд╛ mariadb.
рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдХреАрдХреНрд▓реЛрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ.

рдлреЗрдбрд░реЗрд╢рди рдХреА рд╕реНрдерд╛рдкрдирд╛

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

рдХреНрд▓рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝реЗрдВ

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдирд╛рдо
kubernetes

рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
Kubernetes

HTML рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

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

рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рджрд╛рдпрд░рд╛ -> рдИрдореЗрд▓ -> рдорд╛рдирдЪрд┐рддреНрд░рдХрд╛рд░реЛрдВ -> рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реБрдЖ (рд╣рдЯрд╛рдПрдВ)

рдЖрдЗрдП рдЕрдм рдлреЗрдбрд░реЗрд╢рди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдЬрд╛рдПрдВрдЧреЗ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> рдкреНрд░рджрд╛рддрд╛ рдЬреЛрдбрд╝реЗрдВтАж -> ldap

рдпрд╣рд╛рдВ FreeIPA рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдХрдВрд╕реЛрд▓ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
freeipa.example.org

рд╡рд┐рдХреНрд░реЗрддрд╛
Red Hat Directory Server

рдпреВрдпреВрдЖрдИрдбреА рдПрд▓рдбреАрдПрдкреА рд╡рд┐рд╢реЗрд╖рддрд╛
ipauniqueid

рдХрдиреЗрдХреНрд╢рди рдпреВрдЖрд░рдПрд▓
ldaps://freeipa.example.org

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреА.рдПрди
cn=users,cn=accounts,dc=example,dc=org

рдмрд╛рдБрдз DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

рдмрд╛рдЗрдВрдб рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓
<password>

рдХрд░реНрдмрд░реЛрд╕ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ:
on

рдХреЗрд░реНрдмрд░реЛрд╕ рдХреНрд╖реЗрддреНрд░:
EXAMPLE.ORG

рд╕рд░реНрд╡рд░ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓:
HTTP/[email protected]

рдХреБрдВрдЬреА рдЯреИрдм:
/etc/krb5.keytab

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ keycloak-svc рд╣рдорд╛рд░реЗ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рдЪрдпрди рдХрд░реЗрдВ рд╡рд┐рдХреНрд░реЗрддрд╛: рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рдПрдВрдЧреАред

рдХреНрд▓рд┐рдХ рд╕рд╣реЗрдЬреЗрдВ

рдЕрдм рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> freeipa.example.org -> рдорд╛рдирдЪрд┐рддреНрд░рдХрд╛рд░реЛрдВ -> рдкреНрд░рдердо рдирд╛рдо

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдПрд▓рдбреАрдПрдкреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
givenName

рдЕрдм рдЧреНрд░реБрдк рдореИрдкрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> freeipa.example.org -> рдорд╛рдирдЪрд┐рддреНрд░рдХрд╛рд░реЛрдВ -> рдмрдирд╛рдПрдВ

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдирд╛рдо
groups

рдореИрдкрд░ рдкреНрд░рдХрд╛рд░
group-ldap-mapper

рдПрд▓рдбреАрдПрдкреА рд╕рдореВрд╣ рдбреАрдПрди
cn=groups,cn=accounts,dc=example,dc=org

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рд░рдгрдиреАрддрд┐
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

рдпрд╣ рдлрд╝реЗрдбрд░реЗрд╢рди рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЪрд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк

рдЖрдЗрдП рдПрдХ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдПрдВ (рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдХреАрдХреНрд▓реЛрдХ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛)ред рдЪрд▓ рджрд░:

рдЧреНрд░рд╛рд╣рдХреЛрдВ -> рдмрдирд╛рдПрдВ

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА
kubernetes

рдкрд╣реБрдВрдЪ рдкреНрд░рдХрд╛рд░
confidenrial

рд░реВрдЯ рдпреВрдЖрд░рдПрд▓
http://kubernetes.example.org/

рд╡реИрдз рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдпреВрдЖрд░рдЖрдИ
http://kubernetes.example.org/*

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдпреВрдЖрд░рдПрд▓
http://kubernetes.example.org/

рд╣рдо рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдмрдирд╛рдПрдВрдЧреЗ:

рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рджрд╛рдпрд░рд╛ -> рдмрдирд╛рдПрдВ

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдЯреЗрдореНрдкрд▓реЗрдЯ
No template

рдирд╛рдо
groups

рдкреВрд░реНрдг рд╕рдореВрд╣ рдкрде
false

рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдкрд░ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ:

рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рджрд╛рдпрд░рд╛ -> рд╕рдореВрд╣реЛрдВ -> рдорд╛рдирдЪрд┐рддреНрд░рдХрд╛рд░реЛрдВ -> рдмрдирд╛рдПрдВ

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдирд╛рдо
groups

рдореИрдкрд░ рдкреНрд░рдХрд╛рд░
Group membership

рдЯреЛрдХрди рджрд╛рд╡рд╛ рдирд╛рдо
groups

рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рджрд╛рдпрд░реЗ рдореЗрдВ рдЧреНрд░реБрдк рдореИрдкрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдЧреНрд░рд╛рд╣рдХреЛрдВ -> Kubernetes -> рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рджрд╛рдпрд░рд╛ -> рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк

рдЪреБрдирдирд╛ рд╕рдореВрд╣реЛрдВ ╨▓ рдЙрдкрд▓рдмреНрдз рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк, рдкреНрд░реЗрд╕ рдЪреБрдиреЗ рд╣реБрдП рдХреЛ рдЬреЛрдбрд╝реЛ

рдЖрдЗрдП рдЕрдм рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрдЯ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ:

рдЧреНрд░рд╛рд╣рдХреЛрдВ -> Kubernetes

рд╡рд┐рдХрд▓реНрдк
рд╡реИрд▓реНрдпреВ

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдХреНрд╖рдо
ON

рдЪрд▓реЛ рдзрдХреНрдХрд╛ рд▓рдЧрд╛рдУ рдмрдЪрд╛рдирд╛ рдФрд░ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдм рдЯреИрдм рдкрд░

рдЧреНрд░рд╛рд╣рдХреЛрдВ -> Kubernetes -> рд╕рд╛рдЦ

рддреБрдо рдкрд╛ рд╕рдХрддреЗ рд╣реЛ рдЧреБрдкреНрдд рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

рдУрдЖрдИрдбреАрд╕реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рдорд╛рдореВрд▓реА рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ OIDC рд╕рд░реНрд╡рд░ рдХрд╛ CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдбрд╛рд▓рдирд╛ рд╣реИ /etc/kubernetes/pki/oidc-ca.pem рдФрд░ kube-apiserver рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрджреНрдпрддрди рдХрд░реЗрдВ /etc/kubernetes/manifests/kube-apiserver.yaml рдЖрдкрдХреЗ рд╕рднреА рд╕реНрд╡рд╛рдорд┐рдпреЛрдВ рдкрд░:

...
spec:
  containers:
  - command:
    - kube-apiserver
...
    - --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem
    - --oidc-client-id=kubernetes
    - --oidc-groups-claim=groups
    - --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
    - --oidc-username-claim=email
...

рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ kubeadm рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рди рдЦреЛрдПрдВ:

kubectl edit -n kube-system configmaps kubeadm-config

...
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem
        oidc-client-id: kubernetes
        oidc-groups-claim: groups
        oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
        oidc-username-claim: email
...

рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рднреА рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг

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

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

Kuberos рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, kubeconfig рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдкреНрд░рдпреЛрдЧ рдЬреАрдердм рдкрд░ред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╕рдВрднрд╡ рд╣реИ kubelogin рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдореА kubeconfig рдХреЛ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ jwt.io. рдмрд╕ рдорд╛рди рдХреЙрдкреА рдХрд░реЗрдВ users[].user.auth-provider.config.id-token рдЕрдкрдиреЗ kubeconfig рд╕реЗ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рддрд┐рд▓реЗрдЦ рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЖрд░рдмреАрдПрд╕реА рд╕реЗрдЯрдЕрдк

рдЖрд░рдмреАрдПрд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рджреЛрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо (рдлрд╝реАрд▓реНрдб) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ name jwt рдЯреЛрдХрди рдореЗрдВ) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП (рдлрд╝реАрд▓реНрдб groups рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА рдЯреЛрдХрди рдореЗрдВ)ред рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ kubernetes-default-namespace-admins:

Kubernetes-default-namespace-admins.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: default-admins
  namespace: default
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: kubernetes-default-namespace-admins
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: default-admins
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: kubernetes-default-namespace-admins

рдЖрд░рдмреАрдПрд╕реА рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рдкреНрд░рд╛рдзрд┐рдХрд░рдг-рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯ рдХрд░рдирд╛

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

рдбреИрд╢рдмреЛрд░реНрдб-рдкреНрд░реЙрдХреНрд╕реА.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubernetes-dashboard-proxy
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: kubernetes-dashboard-proxy
    spec:
      containers:
      - args:
        - --listen=0.0.0.0:80
        - --discovery-url=https://keycloak.example.org/auth/realms/kubernetes
        - --client-id=kubernetes
        - --client-secret=<your-client-secret-here>
        - --redirection-url=https://kubernetes-dashboard.example.org
        - --enable-refresh-tokens=true
        - --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh
        - --upstream-url=https://kubernetes-dashboard.kube-system
        - --resources=uri=/*
        image: keycloak/keycloak-gatekeeper
        name: kubernetes-dashboard-proxy
        ports:
        - containerPort: 80
          livenessProbe:
            httpGet:
              path: /oauth/health
              port: 80
            initialDelaySeconds: 3
            timeoutSeconds: 2
          readinessProbe:
            httpGet:
              path: /oauth/health
              port: 80
            initialDelaySeconds: 3
            timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard-proxy
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: kubernetes-dashboard-proxy
  type: ClusterIP

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ