Π—Π°ΠΊΡ€Π΅ΠΏΠ²Π°ΠΌΠ΅ LDAP оторизация към Kubernetes

Π—Π°ΠΊΡ€Π΅ΠΏΠ²Π°ΠΌΠ΅ LDAP оторизация към Kubernetes

Малък ΡƒΡ€ΠΎΠΊ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Keycloak, Π·Π° Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Kubernetes към вашия LDAP ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π΄Π° настроитС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΈ. Π’ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° настроитС RBAC Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ auth-proxy Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° Kubernetes Dashboard ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ знаят ΠΊΠ°ΠΊ Π΄Π° сС ΠΎΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°Ρ‚.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Keycloak

Π”Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ LDAP ΡΡŠΡ€Π²ΡŠΡ€. МоТС Π΄Π° Π΅ Active Directory, FreeIPA, OpenLDAP ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. Ако няматС LDAP ΡΡŠΡ€Π²ΡŠΡ€, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² интСрфСйса Π½Π° Keycloak ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ доставчици Π½Π° oidc (Google, Github, Gitlab), Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Ρ‰Π΅ бъдС ΠΏΠΎΡ‡Ρ‚ΠΈ ΡΡŠΡ‰ΠΈΡΡ‚.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° инсталирамС самия Keycloak, инсталацията ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ няколко ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Kubernetes, Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-лСсно Π΄Π° Π³ΠΎ инсталиратС ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ. ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π½Π° ΠΊΠΎΡ€ΠΌΠΈΠ»ΠΎΡ‚ΠΎ ΠΈ Π³ΠΎ инсталирайтС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ във вашия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.

Π—Π° Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π½Π° Keycloak, Ρ‰Π΅ Π²ΠΈ трябва Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ h2 (всички Π΄Π°Π½Π½ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΎ), Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° postgres, mysql ΠΈΠ»ΠΈ mariadb.
Ако всС ΠΏΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄Π° инсталиратС Keycloak ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ инструкции Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация.

Настройка Π½Π° фСдСрацията

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° създадСм Π½ΠΎΠ²ΠΎ царство. Realm Π΅ пространството Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Всяко ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° собствСна област с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ настройки Π·Π° оторизация. Π“Π»Π°Π²Π½ΠΎΡ‚ΠΎ царство сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ самия Keycloak ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π΅ Π³Ρ€Π΅ΡˆΠ½ΠΎ.

Ρ‚Π»Π°ΡΡŠΠΊ Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ област

ΠžΠΏΡ†ΠΈΡ
Бтойност

ИмС
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

ΠžΠ±Π»Π°ΡΡ‚ Kerberos:
EXAMPLE.ORG

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Π» Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°:
HTTP/[email protected]

ΠΊΠ»ΡŽΡ‡ΠΎΠ² Ρ€Π°Π·Π΄Π΅Π»:
/etc/krb5.keytab

ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» keycloak-svc трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ създадСни ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° нашия LDAP ΡΡŠΡ€Π²ΡŠΡ€.

Π’ случай Π½Π° Active Directory просто ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Доставчик: Active Directory ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ настройки Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ въвСдСни Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Ρ‚Π»Π°ΡΡŠΠΊ Save

Π‘Π΅Π³Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ:

ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠ° фСдСрация -> 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

Π’ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° настройката Π½Π° фСдСрацията, Π½Π΅ΠΊΠ° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към настройката Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Настройка Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

НСка създадСм Π½ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ Keycloak). Π”Π° Ρ‚Ρ€ΡŠΠ³Π²Π°ΠΌΠ΅:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈ -> БъздаванС Π½Π°

ΠžΠΏΡ†ΠΈΡ
Бтойност

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€
kubernetes

Π’ΠΈΠΏ Π΄ΠΎΡΡ‚ΡŠΠΏ
confidenrial

ΠšΠΎΡ€Π΅Π½ URL
http://kubernetes.example.org/

Π’Π°Π»ΠΈΠ΄Π½ΠΈ URI адрСси Π·Π° прСнасочванС
http://kubernetes.example.org/*

АдминистративСн URL адрСс
http://kubernetes.example.org/

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ създадСм ΠΎΠ±Ρ…Π²Π°Ρ‚ Π·Π° Π³Ρ€ΡƒΠΏΠΈ:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ ΠΎΠ±Ρ…Π²Π°Ρ‚ -> БъздаванС Π½Π°

ΠžΠΏΡ†ΠΈΡ
Бтойност

Π¨Π°Π±Π»ΠΎΠ½
No template

ИмС
groups

ПълСн Π³Ρ€ΡƒΠΏΠΎΠ² ΠΏΡŠΡ‚
false

И настройтС ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ Π·Π° тях:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ ΠΎΠ±Ρ…Π²Π°Ρ‚ -> Π³Ρ€ΡƒΠΏΠΈ -> ΠšΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈ -> БъздаванС Π½Π°

ΠžΠΏΡ†ΠΈΡ
Бтойност

ИмС
groups

Π’ΠΈΠΏ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„
Group membership

ИмС Π½Π° иск Π·Π° Ρ‚ΠΎΠΊΠ΅Π½
groups

Π‘Π΅Π³Π° трябва Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ Π³Ρ€ΡƒΠΏΠΎΠ²ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½Π΅ Π² ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° нашия ΠΊΠ»ΠΈΠ΅Π½Ρ‚:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈ -> ΠΊΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈ -> ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ ΠΎΠ±Ρ…Π²Π°Ρ‚ -> ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈ ΠΎΠ±Ρ…Π²Π°Ρ‚ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅

Π˜Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³Ρ€ΡƒΠΏΠΈ Π² Налични клиСнтски обхватинатиснСтС ДобавянС Π½Π° ΠΈΠ·Π±Ρ€Π°Π½ΠΈ

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° настроим удостовСряванСто Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π°:

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈ -> ΠΊΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈ

ΠžΠΏΡ†ΠΈΡ
Бтойност

Π£ΠΏΡŠΠ»Π½ΠΎΠΌΠΎΡ‰Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ
ON

Π”Π° натискамС Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈ Ρ‚ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° настройката Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, сСга Π² Ρ€Π°Π·Π΄Π΅Π»Π°

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈ -> ΠΊΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈ -> Π°ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΈΠ²Π½ΠΈ писма

моТСш Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆ Π’Π°ΠΉΠ½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-късно.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Kubernetes

НастройванСто Π½Π° Kubernetes Π·Π° OIDC оторизация Π΅ доста Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΎ ΠΈ Π½Π΅ Π΅ Π½Π΅Ρ‰ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ слоТно. Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ Π΄Π° поставитС CA сСртификата Π½Π° вашия OIDC ΡΡŠΡ€Π²ΡŠΡ€ /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.

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π‘Π»Π΅Π΄ Ρ‚Π΅Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ Π²Π΅Ρ‡Π΅ Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° OIDC. ЕдинствСният ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅, Ρ‡Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ всС ΠΎΡ‰Π΅ нямат ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ своя собствСна kubeconfig. Π—Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, трябва Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° kubeconfig Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ слСд ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ спСциални ΡƒΠ΅Π± прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° удостовСритС потрСбитСля ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ готовия kubeconfig. Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-ΡƒΠ΄ΠΎΠ±Π½ΠΈΡ‚Π΅ Π΅ ΠšΡƒΠ±Π΅Ρ€ΠΎΡ, Π²ΠΈ позволява Π΄Π° ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ всички ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π½Π° Kubernetes Π² Π΅Π΄Π½Π° конфигурация ΠΈ лСсно Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ тях.

Π—Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Kuberos Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ шаблона Π·Π° kubeconfig ΠΈ Π΄Π° Π³ΠΎ стартиратС със слСднитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

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

Π—Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ подробности Π²ΠΆ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π² Github.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° kubelogin Π°ΠΊΠΎ искатС Π΄Π° ΡƒΠΏΡŠΠ»Π½ΠΎΠΌΠΎΡ‰ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° Π½Π° потрСбитСля. Π’ Ρ‚ΠΎΠ·ΠΈ случай потрСбитСлят Ρ‰Π΅ ΠΎΡ‚Π²ΠΎΡ€ΠΈ Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ с формуляр Π·Π° оторизация Π½Π° localhost.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡΡ‚ kubeconfig ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π½Π° сайта jwt.io. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ стойността 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 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация Π½Π° Kubernetes

Настройка Π½Π° прокси Π·Π° удостовСряванС

Има прСкрасСн ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ keycloak-gatekeeper, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ всяко ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ Π½Π° потрСбитСля Π΄Π° сС удостовСри Π½Π° OIDC ΡΡŠΡ€Π²ΡŠΡ€Π°. Π©Π΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ настроитС, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΎΡ‚ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Kubernetes ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€