
Kubernetes рдХреЛ рдЕрдкрдиреЗ LDAP рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Kubernetes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ Keycloak рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП RBAC рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ Kubernetes рдбреИрд╢рдмреЛрд░реНрдб рдФрд░ рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА-рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
Keycloak рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА LDAP рд╕рд░реНрд╡рд░ рд╣реИред рдпрд╣ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, FreeIPA, OpenLDAP рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ LDAP рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЖрдк рд╕реАрдзреЗ Keycloak рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ oidc рдкреНрд░рджрд╛рддрд╛рдУрдВ (Google, Github, Gitlab) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЦреБрдж рдХреАрдХреНрд▓реЛрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ, рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдпрд╛ рддреБрд░рдВрдд рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, рдЖрдк рд╣рдореЗрд╢рд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реЗрд▓рдо рдЪрд╛рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Keycloak рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, h2
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рднреА рдбреЗрдЯрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди postgres
, mariadb
рдпрд╛ mariadb
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрднреА рднреА Keycloak рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рдорд┐рд▓реЗрдВрдЧреЗред
рдлреЗрдбрд░реЗрд╢рди рд╕реЗрдЯрдЕрдк
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдПрдБред рджрд╛рдпрд░реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрдерд╛рди рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рд╕реНрдЯрд░ рджрд╛рдпрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреАрд▓рдХрд▓реЛрдХ рджреНрд╡рд╛рд░рд╛ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред
Add рджрд╛рдпрд░реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдирд╛рдо | kubernetes |
рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ | Kubernetes |
HTML рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо | <img src="https://kubernetes.io/images/nav_logo.svg" width="400" \> |
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдИрдореЗрд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ LDAP рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд╛рдБрдЪ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ false
ред рдЖрдЗрдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ:
рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреЛрдк -> рдИрдореЗрд▓ -> рдореИрдкрд░ -> рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрд┐рдд (рд╣рдЯрд╛рдПрдВ)
рдЕрдм рдорд╣рд╛рд╕рдВрдШ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдЬрд╛рдПрдВрдЧреЗ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> рдкреНрд░рджрд╛рддрд╛ рдЬреЛрдбрд╝реЗрдВ ... -> ldap
рдпрд╣рд╛рдБ FreeIPA рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╣реИ:
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдХрдВрд╕реЛрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдирд╛рдо | freeipa.example.org |
рд╡рд┐рдХреНрд░реЗрддрд╛ | Red Hat Directory Server |
UUID LDAP рд╡рд┐рд╢реЗрд╖рддрд╛ | ipauniqueid |
рдХрдиреЗрдХреНрд╢рди URL | 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> |
Kerberos рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ: | on |
рдХреЗрд░реНрдмрд░реЛрд╕ рджрд╛рдпрд░реЗ: | EXAMPLE.ORG |
рд╕рд░реНрд╡рд░ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓: | HTTP/freeipa.example.org@EXAMPLE.ORG |
keyTab: | /etc/krb5.keytab |
keycloak-svc
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдорд╛рд░реЗ LDAP рд╕рд░реНрд╡рд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рд╡рд┐рдХреНрд░реЗрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ : рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝реЙрд░реНрдо рдореЗрдВ рдкреЙрдкреБрд▓реЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдЕрдм рдЪрд▓рддреЗ рд╣реИрдВ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрдбрд░реЗрд╢рди -> freeipa.example.org -> рдореИрдкрд░ -> рдкрд╣рд▓рд╛ рдирд╛рдо
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рд▓рджрдк рдЕрдЪрд░рдЬ | givenName |
рдЕрдм рдЧреНрд░реБрдк рдореИрдкрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрдбрд░реЗрд╢рди -> freeipa.example.org -> рдореИрдкрд░ -> рдмрдирд╛рдПрдБ
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдирд╛рдо | groups |
рдореИрдкрд░ рдкреНрд░рдХрд╛рд░ | group-ldap-mapper |
LDAP рдЧреНрд░реБрдк рдбреА.рдПрди. | cn=groups,cn=accounts,dc=example,dc=org |
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рд░рдгрдиреАрддрд┐ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ | GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE |
рдпрд╣ рдорд╣рд╛рд╕рдВрдШ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЪрд▓реЛ рдЧреНрд░рд╛рд╣рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк
рдПрдХ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ (рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Keycloak рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛)ред рд╣рдо рдкрд╛рд╕:
рдЧреНрд░рд╛рд╣рдХ -> рдмрдирд╛рдПрдБ
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА | kubernetes |
рдкрд╣реБрдВрдЪ рдкреНрд░рдХрд╛рд░ | confidenrial |
рд░реВрдЯ URL | http://kubernetes.example.org/ |
рдорд╛рдиреНрдп рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдпреВ.рдЖрд░.рдЖрдИ. | http://kubernetes.example.org/* |
рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ URL | http://kubernetes.example.org/ |
рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдмрдирд╛рдПрдБ:
рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреЛрдк -> рдмрдирд╛рдПрдБ
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдЦрд╛рдХрд╛ | No template |
рдирд╛рдо | groups |
рдкреВрд░реНрдг рд╕рдореВрд╣ рдкрде | false |
рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреЛрдк -> рд╕рдореВрд╣ -> рдореИрдкрд░ -> рдмрдирд╛рдПрдБ
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдирд╛рдо | groups |
рдореИрдкрд░ рдкреНрд░рдХрд╛рд░ | Group membership |
рдЯреЛрдХрди рдХреНрд▓реЗрдо рдирд╛рдо | groups |
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░рдг рд╕рдореВрд╣ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЧреНрд░рд╛рд╣рдХ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕
рдЙрдкрд▓рдмреНрдз рдЧреНрд░рд╛рд╣рдХ рд╕реНрдХреЛрдк рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЪрдпрдирд┐рдд рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдЕрдм рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ:
рдЧреНрд░рд╛рд╣рдХ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕
рд╡рд┐рдХрд▓реНрдк | рдореВрд▓реНрдп |
---|
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ | ON |
рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдм рдЯреИрдм рдкрд░
рдЧреНрд░рд╛рд╣рдХ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рд╕рд╛рдЦ
рдЖрдк рдЧреБрдкреНрдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
OIDC рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП Kubernetes рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ /etc/kubernetes/pki/oidc-ca.pem
рд╕рд░реНрд╡рд░ рдХрд╛ CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ /etc/kubernetes/pki/oidc-ca.pem
рдореЗрдВ /etc/kubernetes/pki/oidc-ca.pem
рдФрд░ рдХреНрдпреВрдм-рдЕрдкреАрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕рднреА рд╡рд┐рдЬрд╝рд╛рд░реНрдбреНрд╕ рдкрд░ /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 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛрдЧрд╛ред рдПрдХрдорд╛рддреНрд░ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдмреЗрдХреЙрдиреНрдлрд╝рд┐рдЧ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ kubeconfig рдХреЗ рд╕реНрд╡рдд: рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рд╢реЗрд╖ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рдорд╛рдкреНрдд рдХрд┐рдП рдЧрдП kubeconfig рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреБрдмреЗрд░реЛрд╕ рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕рднреА рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред
рдХреБрдмреЗрд░реЛрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреБрдмреЗрдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдВ:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП Github рдкрд░ рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВред
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реАрдзреЗ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдмреЗрд▓реЛрдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк kubeconfig рдХреЛ jwt.io рдкрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред users[].user.auth-provider.config.id-token
рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ users[].user.auth-provider.config.id-token
рдХреЛ рдЕрдкрдиреЗ kubeconfig рд╕реЗ рдлрд╝реЙрд░реНрдо рдкрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдлрд╝реЙрд░реНрдо рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
RBAC рд╕реЗрдЯрдЕрдк
RBAC рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рджреЛрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо (jwt рдЯреЛрдХрди рдореЗрдВ name
рдлрд╝реАрд▓реНрдб) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ (jwt рдЯреЛрдХрди рдореЗрдВ groups
рдлрд╝реАрд▓реНрдб) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ kubernetes-default-namespace-admins
рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
Kubernetes-default-рдирд╛рдо рд╕реНрдерд╛рди-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
рдЖрд░рдмреАрдПрд╕реА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░реЗрдВ
рдПрдХ рдЕрджреНрднреБрдд рдХреАрдХреНрд▓реЙрдХ-рдЧреЗрдЯрдХреАрдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдУрдЖрдИрдбреАрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбреИрд╢рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдбреИрд╢рдмреЛрд░реНрдб-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