рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдЕрдкрдиреЗ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдХреНрд▓реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдмреАрдПрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдСрде-рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдЦреБрдж рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдЪрд╛рднреА рдХреА рд╕реНрдерд╛рдкрдирд╛
рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рд╣реИред рдпрд╣ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдлреНрд░реАрдЖрдИрдкреАрдП, рдУрдкрдирдПрд▓рдбреАрдПрдкреА рдпрд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрд▓рдбреАрдПрдкреА рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЖрдк рд╕реАрдзреЗ рдХреАрдХреНрд▓реЛрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрдЖрдИрдбреАрд╕реА рдкреНрд░рджрд╛рддрд╛рдУрдВ (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
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╕рдВрднрд╡ рд╣реИ
рдкрд░рд┐рдгрд╛рдореА kubeconfig рдХреЛ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ 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
рдЖрд░рдмреАрдПрд╕реА рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдкреНрд░рд╛рдзрд┐рдХрд░рдг-рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯ рдХрд░рдирд╛
рдПрдХ рдЕрджреНрднреБрдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ
рдбреИрд╢рдмреЛрд░реНрдб-рдкреНрд░реЙрдХреНрд╕реА.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