āĻāĻĒāĻ¨āĻžāĻ° LDAP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ Kubernetes āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŦāĻ āĻā§āĻˇā§āĻ ā§āĻ° āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻā§āĻā§āĻ˛ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻā§āĻ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĨ¤ āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ RBAC āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ Kubernetes āĻĄā§āĻ¯āĻžāĻļāĻŦā§āĻ°ā§āĻĄ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ auth-proxy āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ā§ āĻ¨āĻžā§ˇ
āĻā§āĻā§āĻ˛ā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨
āĻ§āĻ°ā§āĻ¨ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻāĻŋ LDAP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻā§āĨ¤ āĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻāĻŋāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ, āĻĢā§āĻ°āĻŋāĻāĻāĻĒāĻŋāĻ, āĻāĻĒā§āĻ¨āĻāĻ˛āĻĄāĻŋāĻāĻĒāĻŋ āĻŦāĻž āĻ¯ā§ āĻā§āĻ¨āĻ āĻāĻŋāĻā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ LDAP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ¨āĻž āĻĨāĻžāĻā§, āĻ¤āĻŦā§ āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻā§āĻ˛ā§āĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻŦāĻž āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ ODC āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ (Google, Github, Gitlab) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻāĻ āĻšāĻŦā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻ¸ā§āĻ¨ āĻā§āĻā§āĻ˛ā§āĻ āĻ¨āĻŋāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋ, āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨āĻāĻŋ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻŦāĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§, āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¸āĻšāĻ āĻšāĻŦā§āĨ¤ āĻ
āĻ¨ā§āĻ¯āĻĻāĻŋāĻā§, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻā§āĻā§āĻ˛ā§āĻ āĻĄā§āĻāĻž āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§āĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻšāĻ¯āĻŧ h2
(āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĄā§āĻāĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ), āĻ¤āĻŦā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ āĻ¸āĻŽā§āĻāĻŦ postgres
, mysql
āĻŦāĻž mariadb
.
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻāĻ¨āĻ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻā§āĻā§āĻ˛ā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻ°āĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻāĻāĻĒ
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ°āĻžāĻā§āĻ¯ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ āĻ°āĻžāĻā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŦā§āĻĻāĻ¨ā§āĻ° āĻ¸ā§āĻĨāĻžāĻ¨āĨ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŦāĻ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸āĻš āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻŽā§āĻ˛ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻāĻŋ āĻā§āĻā§āĻ˛ā§āĻ āĻ¨āĻŋāĻā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯ āĻāĻŋāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻā§āĻ˛āĨ¤
āĻ§āĻžāĻā§āĻāĻž āĻ°āĻžāĻāĻ¤ā§āĻŦ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻĒāĻāĻ¨ā§āĻĻ
āĻŽā§āĻ˛ā§āĻ¯
āĻ¨āĻžāĻŽ
kubernetes
āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ¨āĻžāĻŽ
Kubernetes
HTML āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¨āĻžāĻŽ
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻŽā§āĻ˛ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ LDAP āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻāĻŋ, āĻāĻ āĻā§āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧāĻ āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻŦā§ false
. āĻāĻ¸ā§āĻ¨ Kubernetes-āĻ āĻāĻ āĻ¸ā§āĻāĻŋāĻāĻāĻŋāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ
āĻā§āĻˇāĻŽ āĻāĻ°āĻŋ:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻ-āĻŽā§āĻāĻ˛ -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ°āĻ¸ -> āĻāĻŽā§āĻāĻ˛ āĻ¯āĻžāĻāĻžāĻ (āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž)
āĻāĻāĻ¨ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¯āĻžāĻ, āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻ¯āĻžāĻ:
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ -> āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨... -> 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
āĻĄāĻŋāĻāĻ¨ āĻŦāĻžāĻāĻ§ā§āĻ¨
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 āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻā§ āĻĨā§āĻā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻŦāĻŋāĻā§āĻ°ā§āĻ¤āĻž: āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻĢāĻ°ā§āĻŽā§ āĻĸā§āĻāĻžāĻ¨ā§ āĻšāĻŦā§āĨ¤
āĻ§āĻžāĻā§āĻāĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĻ¨
āĻāĻāĻ¨ āĻāĻ˛ā§āĻ¨ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ -> 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
āĻ°ā§āĻ URL
http://kubernetes.example.org/
āĻŦā§āĻ§ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ URI
http://kubernetes.example.org/*
āĻ
ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ āĻāĻāĻāĻ°āĻāĻ˛
http://kubernetes.example.org/
āĻāĻŽāĻ°āĻž āĻā§āĻ°ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻ¯ā§āĻāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻ¸ā§āĻˇā§āĻāĻŋ
āĻĒāĻāĻ¨ā§āĻĻ
āĻŽā§āĻ˛ā§āĻ¯
āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ
No template
āĻ¨āĻžāĻŽ
groups
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻ°ā§āĻĒ āĻĒāĻĨ
false
āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻ¨:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻā§āĻ°ā§āĻĒ -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ°āĻ¸ -> āĻ¸ā§āĻˇā§āĻāĻŋ
āĻĒāĻāĻ¨ā§āĻĻ
āĻŽā§āĻ˛ā§āĻ¯
āĻ¨āĻžāĻŽ
groups
āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° āĻāĻžāĻāĻĒ
Group membership
āĻā§āĻā§āĻ¨ āĻĻāĻžāĻŦāĻŋāĻ° āĻ¨āĻžāĻŽ
groups
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒā§ āĻā§āĻ°ā§āĻĒ āĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ -> āĻā§āĻŦā§āĻ°āĻ¨ā§āĻāĻ¸ -> āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻā§āĻ°ā§āĻĒ в āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ, āĻāĻŋāĻĒā§āĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ¯āĻžāĻ, āĻāĻāĻžāĻ¨ā§ āĻ¯āĻžāĻ¨:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ -> āĻā§āĻŦā§āĻ°āĻ¨ā§āĻāĻ¸
āĻĒāĻāĻ¨ā§āĻĻ
āĻŽā§āĻ˛ā§āĻ¯
āĻ
āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻ¸āĻā§āĻˇāĻŽ
ON
āĻāĻ° āĻ§āĻžāĻā§āĻāĻž āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ āĻ°āĻā§āĻˇāĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻāĻāĻĒ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§, āĻāĻāĻ¨ āĻā§āĻ¯āĻžāĻŦā§
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ -> āĻā§āĻŦā§āĻ°āĻ¨ā§āĻāĻ¸ -> āĻĒāĻ°āĻŋāĻāĻ¯āĻŧāĻĒāĻ¤ā§āĻ°
āĻ¤ā§āĻŽāĻŋ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ° āĻā§āĻĒāĻ¨ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§
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 āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ Kubernetes āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĨāĻžāĻāĻŦā§āĨ¤ āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻšāĻ˛ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻāĻ¨āĻ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻ¨ā§āĻ, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻ¤āĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ kubeconfigāĨ¤ āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻĢāĻ˛ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ kubeconfig āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻāĻ¯āĻŧā§āĻŦ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĒā§āĻ°āĻŽāĻžāĻŖā§āĻāĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸āĻŽāĻžāĻĒā§āĻ¤ kubeconfig āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻāĻ
āĻā§āĻŦā§āĻ°ā§āĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, 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