рддрдкрд╛рдЗрдБрдХреЛ LDAP рд╕рд░реНрднрд░рдорд╛ Kubernetes рдЬрдбрд╛рди рдЧрд░реНрди рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рд╕рдореВрд╣рд╣рд░реВрдХреЛ рдЖрдпрд╛рдд рд╕реЗрдЯрдЕрдк рдЧрд░реНрди Keycloak рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ RBAC рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рд░ Kubernetes Dashboard рд░ рдЖрдлреВрд▓рд╛рдИ рдХрд╕рд░реА рдЕрдзрд┐рдХреГрдд рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдерд╛рд╣рд╛ рдирднрдПрдХрд╛ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг-рдкреНрд░реЛрдХреНрд╕реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред
рдХреАрдХреНрд▓реЛрдХ рд╕реНрдерд╛рдкрдирд╛
рдорд╛рдиреМрдВ рдХрд┐ рддрдкрд╛рдИрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ LDAP рд╕рд░реНрднрд░ рдЫред рдпреЛ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, FreeIPA, OpenLDAP, рд╡рд╛ рдЬреЗ рдкрдирд┐ рд╣реБрди рд╕рдХреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ LDAP рд╕рд░реНрднрд░ рдЫреИрди рднрдиреЗ, рддреНрдпрд╕реЛрднрдП рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд╕реАрдзрд╛ Keycloak рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╡рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ oidc рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ (Google, Github, Gitlab) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реБрдиреЗрдЫред
рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рдХрд┐рдХреНрд▓реЛрдХ рдЖрдлреИрдВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реМрдВ, рд╕реНрдерд╛рдкрдирд╛ рдЫреБрдЯреНрдЯреИ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рд╡рд╛ рд╕рд┐рдзреИ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдорд╛, рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдпрджрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ рдзреЗрд░реИ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЫрдиреН рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреЗрдЫред рдЕрд░реНрдХреЛрддрд░реНрдл, рддрдкрд╛рдИрдВ рд╕рдзреИрдВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
Keycloak рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЪрд╛рд╣рд┐рдиреНрдЫред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЫ h2
(рд╕рдмреИ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ), рддрд░ рдпреЛ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ postgres
, mysql
рд╡рд╛ mariadb
.
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрдЭреИ рдкрдирд┐ Keycloak рдЫреБрдЯреНрдЯреИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдорд╛ рдердк рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рдорд╣рд╛рд╕рдВрдШ рд╕реНрдерд╛рдкрдирд╛
рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рдирдпрд╛рдБ рдХреНрд╖реЗрддреНрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдХреНрд╖реЗрддреНрд░ рд╣рд╛рдореНрд░реЛ рдЖрд╡реЗрджрди рдХреЛ рдард╛рдЙрдБ рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдлрд░рдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд╕рдБрдЧ рдЖрдлреНрдиреИ рджрд╛рдпрд░рд╛ рд╣реБрди рд╕рдХреНрдЫред рдорд╛рд╕реНрдЯрд░ рдХреНрд╖реЗрддреНрд░ рдХрд┐рдХреНрд▓реЛрдХ рдЖрдлреИрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рдЫ рд░ рдпрд╕рд▓рд╛рдИ рдЕрд░реВ рдХреЗрд╣рд┐рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЧрд▓рдд рд╣реЛред
Push рдХреНрд╖реЗрддреНрд░ рдердкреНрдиреБрд╣реЛрд╕реН
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдирд╛рдо
kubernetes
рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
Kubernetes
HTML рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдЗрдореЗрд▓ рдкреБрд╖реНрдЯрд┐ рднрдПрдХреЛ рдЫ рд╡рд╛ рдЫреИрди рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ LDAP рд╕рд░реНрднрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рд╣реБрдирд╛рд▓реЗ, рдпреЛ рдЪреЗрдХ рд▓рдЧрднрдЧ рд╕рдзреИрдВ рдлрд┐рд░реНрддрд╛ рд╣реБрдиреЗрдЫ false
ред Kubernetes рдорд╛ рдпреЛ рд╕реЗрдЯрд┐рдЩ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрд╕рдХреНрд╖рдо рдЧрд░реМрдВ:
рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛ -> рдЗрдореЗрд▓ -> рдореНрдпрд╛рдкрд░рд╣рд░реВ -> рдЗрдореЗрд▓ рдкреНрд░рдорд╛рдгрд┐рдд (рдореЗрдЯрд╛рдЙрди)
рдЕрдм рдорд╣рд╛рд╕рдВрдШ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реМрдВ, рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд╛рдиреНрдЫреМрдВ:
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> рдкреНрд░рджрд╛рдпрдХ рдердкреНрдиреБрд╣реЛрд╕реН... -> ldap
рдпрд╣рд╛рдБ FreeIPA рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рдЫ:
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдХрдиреНрд╕реЛрд▓ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо
freeipa.example.org
рд╡рд┐рдХреНрд░реЗрддрд╛
Red Hat Directory Server
UUID LDAP рд╡рд┐рд╢реЗрд╖рддрд╛
ipauniqueid
рдЬрдбрд╛рди URL
ldaps://freeipa.example.org
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ DN
cn=users,cn=accounts,dc=example,dc=org
DN рдмрд╛рдБрдз
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрд╛рдБрдзреНрдиреБрд╣реЛрд╕реН
<password>
Kerberos рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдиреБрд╣реЛрд╕реН:
on
рдХрд░реНрдмреЗрд░реЛрд╕ рдХреНрд╖реЗрддреНрд░:
EXAMPLE.ORG
рд╕рд░реНрднрд░ рдкреНрд░рд┐рдиреНрд╕рд┐рдкрд▓:
HTTP/[email protected]
рдХреБрдЮреНрдЬреА рдЯреНрдпрд╛рдм:
/etc/krb5.keytab
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ keycloak-svc
рд╣рд╛рдореНрд░реЛ LDAP рд╕рд░реНрднрд░рдорд╛ рдЕрдЧреНрд░рд┐рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред
рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рдмрд╕ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╡рд┐рдХреНрд░реЗрддрд╛: рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдлрд╛рд░рдордорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реБрдиреЗрдЫрдиреНред
Push рдмрдЪрдд
рдЕрдм рдЕрдЧрд╛рдбрд┐ рдмрдвреМрдВ:
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> freeipa.example.org -> рдореНрдпрд╛рдкрд░рд╣рд░реВ -> рдкрд╣рд┐рд▓реЛ рдирд╛рдо
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
Ldap рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ
givenName
рдЕрдм рд╕рдореВрд╣ рдореНрдпрд╛рдкрд┐рдЩ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН:
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> freeipa.example.org -> рдореНрдпрд╛рдкрд░рд╣рд░реВ -> рд╕рд┐рд░реНрдЬрдирд╛
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдирд╛рдо
groups
рдореНрдпрд╛рдкрд░ рдкреНрд░рдХрд╛рд░
group-ldap-mapper
LDAP рд╕рдореВрд╣ DN
cn=groups,cn=accounts,dc=example,dc=org
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдкреБрди: рдкреНрд░рд╛рдкреНрддрд┐ рд░рдгрдиреАрддрд┐
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
рдпрд╕рд▓реЗ рдорд╣рд╛рд╕рдВрдШ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдЧрд░реНрджрдЫ, рдЧреНрд░рд╛рд╣рдХ рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рдЕрдЧрд╛рдбрд┐ рдмрдвреМрдВред
рдЧреНрд░рд╛рд╣рдХ рд╕реЗрдЯрдЕрдк
рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ (рдХрд┐рдХреНрд▓реЛрдХрдмрд╛рдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ)ред рдЬрд╛рдФрдВ:
рдЧреНрд░рд╛рд╣рдХрд╣рд░реБ -> рд╕рд┐рд░реНрдЬрдирд╛
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА
kubernetes
рдкрд╣реБрдБрдЪ рдкреНрд░рдХрд╛рд░
confidenrial
рдореВрд▓ рдпреБрдЖрд░рдПрд▓
http://kubernetes.example.org/
рд╡реИрдз рд░рд┐рдбрд┐рд░реЗрдХреНрдЯ URI рд╣рд░реВ
http://kubernetes.example.org/*
рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ URL
http://kubernetes.example.org/
рд╣рд╛рдореА рд╕рдореВрд╣рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рджрд╛рдпрд░рд╛ рдкрдирд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ:
рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛ -> рд╕рд┐рд░реНрдЬрдирд╛
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдЯреЗрдореНрдкрд▓реЗрдЯ
No template
рдирд╛рдо
groups
рдкреВрд░реНрдг рд╕рдореВрд╣ рдорд╛рд░реНрдЧ
false
рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдореНрдпрд╛рдкрд░ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН:
рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛ -> рд╕рдореВрд╣ -> рдореНрдпрд╛рдкрд░рд╣рд░реВ -> рд╕рд┐рд░реНрдЬрдирд╛
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдирд╛рдо
groups
рдореНрдпрд╛рдкрд░ рдкреНрд░рдХрд╛рд░
Group membership
рдЯреЛрдХрди рджрд╛рд╡реА рдирд╛рдо
groups
рдЕрдм рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛рдорд╛ рд╕рдореВрд╣ рдореНрдпрд╛рдкрд┐рдЩ рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
рдЧреНрд░рд╛рд╣рдХрд╣рд░реБ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛ -> рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛
рдЫрдиреМрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕рдореВрд╣ ╨▓ рдЙрдкрд▓рдмреНрдз рдЧреНрд░рд╛рд╣рдХ рджрд╛рдпрд░рд╛рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдердкреНрдиреБрд╣реЛрд╕реН
рдЕрдм рд╣рд╛рдореНрд░реЛ рдЖрд╡реЗрджрди рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реМрдВ, рдЬрд╛рдиреБрд╣реЛрд╕реН:
рдЧреНрд░рд╛рд╣рдХрд╣рд░реБ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕
рд╡рд┐рдХрд▓реНрдк
рдореВрд▓реНрдп
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдХреНрд╖рдо рдЧрд░рд┐рдпреЛ
ON
рдзрдХреЗрд▓реМрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░ рдпрд╕рд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдЧрд░реНрджрдЫ, рдЕрдм рдЯреНрдпрд╛рдмрдорд╛
рдЧреНрд░рд╛рд╣рдХрд╣рд░реБ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ
рддрдкрд╛рдИрдВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЧреЛрдкреНрдп рдЬреБрди рд╣рд╛рдореА рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред
Kubernetes рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ
OIDC рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ 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
...
рдпрд╕рд▓реЗ Kubernetes рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдЧрд░реНрдЫред рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХрд╛ рд╕рдмреИ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрдорд╛ рдпреА рдЪрд░рдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдпреА рдЪрд░рдгрд╣рд░реВ рдкрдЫрд┐, рддрдкрд╛рдИрдВрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ OIDC рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╣реБрдиреЗрдЫред рдПрдХ рдорд╛рддреНрд░ рдмрд┐рдиреНрджреБ рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдЗрдБрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд╕рдБрдЧ рдЕрдЭреИ рдкрдирд┐ рдЧреНрд░рд╛рд╣рдХ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рд╕рд╛рдереИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЖрдлреНрдиреИ kubeconfigред рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ 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 рдмрд╛рдЯ рд╕рд╛рдЗрдЯ рдорд╛ рдПрдХ рдлрд╛рд░рдо рд░ рдЯреНрд░рд╛рдиреНрд╕рдХреНрд░рд┐рдкреНрдЯ рддреБрд░реБрдиреНрддреИ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
RBAC рд╕реЗрдЯрдЕрдк
RBAC рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджрд╛, рддрдкрд╛рдЗрдБ рджреБрдмреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо (рдлрд┐рд▓реНрдб name
jwt рдЯреЛрдХрдирдорд╛) рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕рдореВрд╣рдХреЛ рд▓рд╛рдЧрд┐ (рдлрд┐рд▓реНрдб groups
jwt рдЯреЛрдХрдирдорд╛)ред рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╕рдореВрд╣рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдорддрд┐ рд╕реЗрдЯ рдЧрд░реНрдиреЗ рдПрдЙрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ 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
RBAC рдХреЛ рд▓рд╛рдЧрд┐ рдердк рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫ
рдкреНрд░рдорд╛рдгреАрдХрд░рдг-рдкреНрд░реЛрдХреНрд╕реА рд╕реЗрдЯ рдЧрд░реНрджреИ
рддреНрдпрд╣рд╛рдБ рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЫ
dashboard-proxy.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