αž™αžΎαž„αž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž LDAP αž‘αŸ… Kubernetes

αž™αžΎαž„αž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž LDAP αž‘αŸ… Kubernetes

αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αžαžΌαž…αž˜αž½αž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎ Keycloak αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹ Kubernetes αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ LDAP αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž€αŸ’αžšαž»αž˜αŸ” αžœαžΆαž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ†αž‘αžΎαž„ RBAC αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžš Kubernetes Dashboard αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž±αŸ’αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŸαŸ„

αž§αž”αž˜αžΆαžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ 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αŸ–

αžœαž·αžŸαžΆαž›αž—αžΆαž–αž’αžαž·αžαž·αž‡αž“ -> αž’αŸŠαžΈαž˜αŸ‚αž› -> αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž•αŸ‚αž“αž‘αžΈ -> αž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž’αŸŠαžΈαž˜αŸ‚αž› (αž›αž»αž”)

αž₯αž‘αžΌαžœβ€‹αž™αžΎαž„β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžŸαž αž–αŸαž“αŸ’αž’β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžšαžΏαž„β€‹αž“αŸαŸ‡β€‹αž™αžΎαž„β€‹αž‘αŸ…αŸ–

αžŸαž αž–αŸαž“αŸ’αž’αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ -> αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆ... -> αž‘αžΆαžŠαžΆαž”αŸ‹

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ 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 αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž’αŸ’αž“αž€αž›αž€αŸ‹αŸ– αžαžαžŸαž€αž˜αŸ’αž˜ αž αžΎαž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž‡αŸ†αžšαž»αž‰ 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

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΎαž€αž€αžΆαžšαž‚αžΌαžŸαž•αŸ‚αž“αž‘αžΈαž€αŸ’αžšαž»αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αžŸαžΆαž›αž—αžΆαž–αž’αžαž·αžαž·αž‡αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž’αžαž·αžαž·αž‡αž“ -> Kubernetes -> αžœαž·αžŸαžΆαž›αž—αžΆαž–αž’αžαž·αžαž·αž‡αž“ -> αžœαž·αžŸαžΆαž›αž—αžΆαž–αž’αžαž·αžαž·αž‡αž“αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜

αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž€αŸ’αžšαž»αž˜ Π² αžœαž·αžŸαžΆαž›αž—αžΆαž–αž’αžαž·αžαž·αž‡αž“αžŠαŸ‚αž›αž˜αžΆαž“αž…αž»αž… αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŸαžΌαž˜αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αŸ–

αž’αžαž·αžαž·αž‡αž“ -> Kubernetes

αž‡αž˜αŸ’αžšαžΎαžŸ
αžαž˜αŸ’αž›αŸƒ

αž”αžΆαž“αž”αžΎαž€αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž
ON

αž…αžΌαžšαž™αžΎαž„αžšαž»αž‰ αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžš αž αžΎαž™αžœαžΆαž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸ…αž›αžΎαž•αŸ’αž‘αžΆαŸ†αž„

αž’αžαž·αžαž·αž‡αž“ -> Kubernetes -> αž›αž·αžαž·αžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹

αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“ αž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹ αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ”

αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ 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 αžšαž½αž…β€‹αž αžΎαž™β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž–αžΈ OIDC αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αž…αŸ†αžŽαž»αž…αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž˜αž·αž“αž‘αžΆαž“αŸ‹αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž€αŸαžŠαžΌαž…αž‡αžΆ kubeconfig αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž…αŸαž‰ kubeconfig αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‘αžΆαž‰αž™αž€ kubeconfig αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ” αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαž‚αžΊ KuberosαžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžαžΌαžšαžšαžœαžΆαž„αž–αž½αž€αžœαžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Kuberos αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‚αŸ†αžšαžΌαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ kubeconfig αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαžŸαžΌαž˜αž˜αžΎαž› αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αŸ…αž›αžΎ Github αŸ”

αžœαžΆαž€αŸαž’αžΆαž…αž”αŸ’αžšαžΎαž•αž„αžŠαŸ‚αžšαŸ” kubelogin αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αž”αžΎαž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαžŠαŸ‚αž›αž˜αžΆαž“αž‘αž˜αŸ’αžšαž„αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž›αž‘αŸ’αž’αž•αž› 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 αž•αŸ’αž›αžΌαžœαž€αžΆαžš

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ

αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αž½αž™αŸ” αž€αŸ’αž„αŸ„αž€αž‘αŸ’αžœαžΆαžš - αžŸαŸ„αžšαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αžΆαž“αžΆαž“αžΌαžœαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ ODC αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹