เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” 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

Display Name
Kubernetes

เบŠเบทเปˆเบชเบฐเปเบ”เบ‡ HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบญเบตเป€เบกเบงเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบซเบผเบทเบšเปเปˆ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ LDAP เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ™เบตเป‰เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒเป€เบเบทเบญเบšเบชเบฐเป€เบซเบกเบต false. เปƒเบซเป‰เบ›เบดเบ”เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เปƒเบ™ Kubernetes:

เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒ -> Email -> เปเบœเบ™เบ—เบตเปˆ -> เบญเบตเป€เบกเบฅเปŒเบขเบฑเป‰เบ‡เบขเบทเบ™เปเบฅเป‰เบง (เบฅเบถเบš)

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบชเบฐเบซเบฐเบžเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ›:

เบชเบฐเบซเบฐเบžเบฑเบ™เบœเบนเป‰เปƒเบŠเป‰ -> เป€เบžเบตเปˆเบกเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™... -> 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 เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบˆเบฐเบ–เบทเบเปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบšเบšเบŸเบญเบกเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบเบนเป‰ เบšเบฑเบ™เบ—เบถเบ

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเบเป‰เบฒเบงเบ•เปเปˆเป„เบ›:

เบชเบฐเบซเบฐเบžเบฑเบ™เบœเบนเป‰เปƒเบŠเป‰ -> 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). เป„เบ›โ€‹เบเบฑเบ™โ€‹เป€เบฅเบตเบ:

เบฅเบนเบเบ„เป‰เบฒ -> เบชเป‰เบฒเบ‡

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบกเบนเบ™เบ„เปˆเบฒ

ID เบฅเบนเบเบ„เป‰เบฒ
kubernetes

เบ›เบฐเป€เบžเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡
confidenrial

URL เบฎเบฒเบ
http://kubernetes.example.org/

เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ URIs
http://kubernetes.example.org/*

URL เบ‚เบญเบ‡เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš
http://kubernetes.example.org/

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบˆเบฐเบชเป‰เบฒเบ‡เบ‚เบญเบšเป€เบ‚เบ”เบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบก:

เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒ -> เบชเป‰เบฒเบ‡

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบกเบนเบ™เบ„เปˆเบฒ

เปเบกเปˆเปเบšเบš
No template

เบŠเบทเปˆ
groups

เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบธเปˆเบกเป€เบ•เบฑเบก
false

เปเบฅเบฐโ€‹เบ•เบฑเป‰เบ‡โ€‹เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹:

เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒ -> เบเบธเปˆเบก -> เปเบœเบ™เบ—เบตเปˆ -> เบชเป‰เบฒเบ‡

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบกเบนเบ™เบ„เปˆเบฒ

เบŠเบทเปˆ
groups

เบ›เบฐเป€เบžเบ”เปเบœเบ™เบ—เบตเปˆ
Group membership

เบŠเบทเปˆเบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡ Token
groups

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบเบธเปˆเบกเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เบฅเบนเบเบ„เป‰เบฒ -> kubernetes -> เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒ -> เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เป€เบฅเบทเบญเบ เบเบธเปˆเบก ะฒ เบ‚เบญเบšเป€เบ‚เบ”เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบกเบตเบขเบนเปˆ, เบเบปเบ” เป€เบžเบตเปˆเบกเบ—เบตเปˆเป€เบฅเบทเบญเบ

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป„เบ›เบ—เบตเปˆ:

เบฅเบนเบเบ„เป‰เบฒ -> kubernetes

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
เบกเบนเบ™เบ„เปˆเบฒ

เป€เบ›เบตเบ”เปƒเบŠเป‰เบชเบดเบ”เบญเบฐเบ™เบธเบเบฒเบ”เปเบฅเป‰เบง
ON

เปƒเบซเป‰เบเบนเป‰ save เปเบฅเบฐเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบนเบเบ„เป‰เบฒเบชเปเบฒเป€เบฅเบฑเบ”, เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เปเบ–เบš

เบฅเบนเบเบ„เป‰เบฒ -> kubernetes -> Credentials

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš Secret เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบ•เปเปˆเบกเบฒ.

เบเบณเบ™เบปเบ”เบ„เปˆเบฒ Kubernetes

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Kubernetes เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” OIDC เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ. เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบกเปˆเบ™เปƒเบชเปˆเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™ CA เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ODC เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบชเปˆ /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 เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” ODC เปเบฅเป‰เบง. เบˆเบธเบ”เบ”เบฝเบงเปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเบฅเบนเบเบ„เป‰เบฒ configured, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš kubeconfig เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบญเบญเบ kubeconfig เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเบžเบดเป€เบชเบ”เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ”เบฒเบงเป‚เบซเบฅเบ” kubeconfig เบชเปเบฒเป€เบฅเบฑเบ”เบฎเบนเบš. เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฐเบ”เบงเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™ Kuberos, เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบเบธเปˆเบก 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 token) เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบกเบœเบนเป‰เปƒเบŠเป‰ (เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก groups เปƒเบ™ jwt token). เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบก 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 เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ auth-proxy

เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ›เบฐเป€เบชเบตเบ” keycloak-gatekeeper, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ”เป†เป‚เบ”เบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ODC. เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ Kubernetes Dashboard เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡:

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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™