āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻ˛āĻā§āĻˇā§āĻ¯ā§ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻŦā§āĻ¨:
- āĻāĻžāĻŦāĻŋāĻāĻžāĻ āĻŋ āĻāĻāĻāĻŋ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĨ¤ āĻ¯āĻž āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ LDAP āĻāĻŦāĻ OpenID āĻ¸āĻš āĻ āĻ¨ā§āĻ āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§, āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻā§āĻ°āĻšā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĨ¤
- āĻāĻžāĻŦāĻŋāĻāĻžāĻ āĻŋ āĻĻāĻžāĻ°ā§āĻ¯āĻŧāĻžāĻ¨ â āĻāĻāĻāĻŋ āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻĒā§āĻ°āĻā§āĻ¸āĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻā§āĻ˛ā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻ¸āĻāĻšāĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤
- āĻā§āĻ¯āĻžāĻāĻāĻ¯āĻŧā§ â āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¯āĻž kubectl-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻ¯āĻžāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ OpenID āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ˛āĻ āĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ Kubernetes API-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§ āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻāĻŽāĻ°āĻž āĻāĻ°āĻŦāĻŋāĻāĻ¸āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§/āĻā§āĻˇā§āĻ ā§āĻ° āĻ āĻ§āĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻā§āĻā§āĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻāĻŽāĻŋ āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻŦ āĻ¨āĻžāĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻāĻ°āĻ¤ā§ RBAC āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻā§āĻ āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻžāĨ¤ āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ Kubernetes-āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻāĻāĻžāĻ° āĻĄā§āĻ˛āĻŋāĻāĻžāĻ°āĻŋ āĻŽā§āĻāĻžāĻ¨āĻŋāĻāĻŽ āĻĻāĻ°āĻāĻžāĻ°āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž Kuberntes OpenID-āĻ¤ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ āĻ¯ā§āĻ āĻāĻ°āĻŦ, āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŦā§ āĻ¯ā§ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨, āĻāĻŦāĻ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻ¨āĻŋāĻā§āĻ āĻ¤āĻžāĻā§ āĻ āĻ§āĻŋāĻāĻžāĻ° āĻĻā§āĻŦā§āĨ¤
āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŖ
- āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻŦāĻž āĻŽāĻŋāĻ¨āĻŋāĻā§āĻŦā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§
- āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ
- āĻĄā§āĻŽā§āĻ¨:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - āĻĄā§āĻŽā§āĻ¨ āĻŦāĻž āĻ¸ā§āĻŦ-āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻŦ-āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ°āĻŋāĻ¤ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻ¸ā§ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻŋ āĻŦāĻŋāĻļāĻĻā§ āĻ¯āĻžāĻŦ āĻ¨āĻž; āĻāĻĒāĻ¨āĻžāĻā§ 2āĻāĻŋ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻāĻŋ āĻšāĻ˛ āĻ°ā§āĻ (āĻ¸āĻžāĻ°ā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻāĻ°ā§āĻ¤ā§āĻĒāĻā§āĻˇ) āĻāĻŦāĻ *.example.org āĻĄā§āĻŽā§āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻāĻ¯āĻŧāĻžāĻāĻ˛ā§āĻĄāĻāĻžāĻ°ā§āĻĄ
āĻāĻĒāĻ¨āĻŋ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻšāĻŖ/āĻ˛ā§āĻāĻžāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§; āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻĒāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨āĻā§āĻ°ā§āĻ¸ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ
āĻā§āĻā§āĻ˛ā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨
āĻāĻŽāĻŋ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻ¯ā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸āĻšāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž, āĻ¯ā§āĻŽāĻ¨ āĻšā§āĻ˛āĻŽ āĻāĻžāĻ°ā§āĻāĨ¤
āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻ¨:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻš āĻāĻāĻāĻŋ keycloak.yml āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨:
keycloak.yml
keycloak:
# ĐĐŧŅ Đ°Đ´ĐŧиĐŊиŅŅŅĐ°ŅĐžŅĐ°
username: "test_admin"
# ĐĐ°ŅĐžĐģŅ Đ°Đ´ĐŧиĐŊиŅŅŅĐ°ŅĐžŅ
password: "admin"
# ĐŅи ŅĐģĐ°Đŗи ĐŊŅĐļĐŊŅ ŅŅĐž ĐąŅ ĐŋОСвОĐģиŅŅ СаĐŗŅŅĐļĐ°ŅŅ в Keycloak ŅĐēŅиĐŋŅŅ ĐŋŅŅĐŧĐž ŅĐĩŅĐĩС web ĐŧĐžŅĐ´Ņ. ĐŅĐž ĐŊĐ°Đŧ
ĐŋĐžĐŊадОйиŅŅŅŅ ŅŅĐž ĐąŅ ĐŋĐžŅиĐŊиŅŅ ОдиĐŊ йаĐŗ, Đž ĐēĐžŅĐžŅĐžĐŧ ĐŊиĐļĐĩ.
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# ĐĐēĐģŅŅĐ°ĐĩĐŧ ingress, ŅĐēаСŅваĐĩĐŧ иĐŧŅ Ņ
ĐžŅŅĐ° и ŅĐĩŅŅиŅиĐēĐ°Ņ ĐēĐžŅĐžŅŅĐš ĐŧŅ ĐŋŅĐĩдваŅиŅĐĩĐģŅĐŊĐž ŅĐžŅ
ŅĐ°ĐŊиĐģи в secrets
ingress:
enabled: true
path: /
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
hosts:
- keycloak.example.org
tls:
- hosts:
- keycloak.example.org
secretName: tls-keycloak
# Keycloak Đ´ĐģŅ ŅвОĐĩĐš ŅайОŅŅ ŅŅĐĩĐąŅĐĩŅ йаСŅ Đ´Đ°ĐŊĐŊŅŅ
, в ŅĐĩŅŅОвŅŅ
ŅĐĩĐģŅŅ
Ņ ŅаСвОŅĐ°ŅиваŅ Postgresql ĐŋŅŅĐŧĐž в Kuberntes, в ĐŋŅОдаĐēŅĐĩĐŊĐĩ ŅĐ°Đē ĐģŅŅŅĐĩ ĐŊĐĩ Đ´ĐĩĐģĐ°ŅŅ!
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: true
āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻāĻāĻĒ
āĻāĻ°āĻĒāĻ°ā§, āĻāĻ¯āĻŧā§āĻŦ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ¯āĻžāĻ¨
āĻŦāĻžāĻŽ āĻā§āĻŖāĻžāĻ¯āĻŧ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻ°āĻžāĻāĻ¤ā§āĻŦ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻžāĻŦāĻŋ
āĻŽā§āĻ˛ā§āĻ¯
āĻ¨āĻžāĻŽ
āĻā§āĻŦā§āĻ°āĻ¨ā§āĻāĻ¸
āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ¨āĻžāĻŽ
Kubernetes
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻŽā§āĻ˛ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤āĻāĻ°āĻŖ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ
āĻā§āĻˇāĻŽ āĻāĻ°ā§āĻ¨:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻāĻŽā§āĻ˛ -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ°āĻ¸ -> āĻāĻŽā§āĻ˛ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻž (āĻŽā§āĻā§āĻ¨)
āĻāĻŽāĻ°āĻž ActiveDirectory āĻĨā§āĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻāĻŋ, āĻāĻŽāĻŋ āĻ¨ā§āĻā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻ āĻ°ā§āĻā§ āĻĻā§āĻŦ, āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻāĻāĻŋ āĻāĻ°āĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻšāĻŦā§āĨ¤
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ â> āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨... â> ldap
āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻāĻāĻĒ
āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻŦā§āĻ¤āĻžāĻŽ āĻāĻŋāĻĒā§āĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻ āĻāĻ°ā§āĻ¨ āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻ¸āĻĢāĻ˛ āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨āĨ¤
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ°ā§āĻĒ āĻŽā§āĻ¯āĻžāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĢā§āĻĄāĻžāĻ°ā§āĻļāĻ¨ -> ldap_localhost -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° -> āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻāĻāĻĒ
āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻā§āĻā§āĻ˛ā§āĻā§āĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§āĻā§āĻˇāĻŋāĻ¤ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¯āĻž āĻāĻāĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻšāĻŦā§āĨ¤ āĻāĻŽāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻļāĻāĻāĻŋāĻ¤ā§ āĻ˛āĻžāĻ˛ āĻ°āĻā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻšāĻžāĻāĻ˛āĻžāĻāĻ āĻāĻ°āĻŦāĨ¤
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ -> āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻāĻāĻĒ
āĻā§āĻˇā§āĻ ā§āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻ:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻāĻāĻāĻŋ āĻ¸ā§āĻ¯ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž
āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻ¨:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻā§āĻ°ā§āĻĒ -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° -> āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ°ā§āĻĒā§āĻ° āĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ āĻ¯ā§āĻ āĻāĻ°āĻŋ:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ -> āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ -> āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻā§āĻ°ā§āĻĒ в āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ, āĻāĻŋāĻĒā§āĻ¨ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻŽāĻ°āĻž āĻā§āĻĒāĻ¨ (āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻĨāĻžāĻ āĻ˛āĻŋāĻā§) āĻĒāĻžāĻ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻā§āĻā§āĻ˛ā§āĻā§ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ -> kubernetes -> āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° -> āĻā§āĻĒāĻ¨
āĻāĻāĻŋ āĻ¸ā§āĻāĻāĻĒ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻžāĻ° āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻŋāĻ˛ āĻ¯āĻāĻ¨, āĻ¸āĻĢāĻ˛ āĻ
āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻāĻāĻāĻŋ 403 āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĒā§āĻ¯āĻŧā§āĻāĻŋā§ˇ
āĻ āĻŋāĻ āĻāĻ°ā§āĻ¨:
āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸ā§āĻā§āĻĒ -> āĻā§āĻŽāĻŋāĻāĻž -> āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ° -> āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
āĻŽā§āĻ¯āĻžāĻĒāĻžāĻ°
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻā§āĻĄ
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻ¸āĻžāĻāĻ āĻĨā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻŽā§āĻ˛ āĻļāĻāĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻā§āĻĨāĻžāĻ¯āĻŧ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŦāĻ OIDC āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻāĻžāĻ°ā§ āĻā§āĻĨāĻžāĻ¯āĻŧ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ¤āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻŋ āĻāĻ°āĻ¤ā§, āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻāĻ°ā§āĻ¨ /etc/kubernetes/manifests/kube-apiserver.yaml
kube-apiserver.yaml
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ kubeadm āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻ¨:
kubeadm āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
āĻĒā§āĻ°āĻŽāĻžāĻŖ-āĻĒā§āĻ°āĻā§āĻ¸āĻŋ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¯āĻŧā§āĻŦ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ°āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻā§āĻā§āĻ˛ā§āĻ āĻā§āĻāĻāĻŋāĻĒāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻĒā§āĻ°āĻā§āĻ¸āĻŋāĻāĻŋ āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋ āĻĻā§āĻāĻžāĻ¨ā§āĻ° āĻāĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ āĻāĻ°āĻŦā§ āĻ¤āĻž āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻāĻŋ āĻļāĻŋāĻ°ā§āĻ¨āĻžāĻŽā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻļā§āĻˇ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ āĻĒā§āĻ°ā§āĻ°āĻŖ āĻāĻ°āĻŦā§āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ OpenID āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°ā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻšāĻ¯āĻŧ. āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻĄā§āĻ¯āĻžāĻļāĻŦā§āĻ°ā§āĻĄā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻŋ
Kubernetes āĻĄā§āĻ¯āĻžāĻļāĻŦā§āĻ°ā§āĻĄ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
values_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻ āĻ§āĻŋāĻāĻžāĻ° āĻ¸ā§āĻ āĻāĻ°āĻž:
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ ClusterRoleBinding āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ āĻ¯āĻž DataOPS āĻā§āĻ°ā§āĻĒā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ āĻ āĻ§āĻŋāĻāĻžāĻ° (āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ ClusterRole āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°-āĻ ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨) āĻĻā§āĻŦā§āĨ¤
kubectl apply -f rbac.yaml
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dataops_group
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: DataOPS
āĻā§āĻā§āĻ˛ā§āĻ āĻā§āĻāĻāĻŋāĻĒāĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§:
helm repo add gabibbo97 https://gabibbo97.github.io/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml
values_proxy.yaml
# ĐĐēĐģŅŅĐ°ĐĩĐŧ ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
# ĐОвОŅиĐŧ ĐŗĐ´Đĩ ĐŧŅ ĐąŅĐ´ĐĩĐŧ авŅĐžŅиСОвŅваŅŅŅŅ Ņ OIDC ĐŋŅОваКдĐĩŅĐ°
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
# ĐĐŧŅ ĐēĐģиĐĩĐŊŅĐ° ĐēĐžŅĐžŅĐžĐŗĐž ĐŧŅ ŅОСдаĐģи в Keycloak
ClientID: "kubernetes"
# Secret ĐēĐžŅĐžŅŅĐš Ņ ĐŋŅĐžŅиĐģ СаĐŋиŅĐ°ŅŅ
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# ĐŅĐ´Đ° ĐŋĐĩŅĐĩĐŊĐ°ĐŋŅавиŅŅ в ŅĐģŅŅĐ°Đĩ ŅŅĐŋĐĩŅĐŊОК авŅĐžŅиСаŅии. ФОŅĐŧĐ°Ņ <SCHEMA>://<SERVICE_NAME>.><NAMESAPCE>.<CLUSTER_NAME>
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
# ĐŅĐžĐŋŅŅĐēĐ°ĐĩĐŧ ĐŋŅОвĐĩŅĐēŅ ŅĐĩŅŅиŅиĐēĐ°ŅĐ°, ĐĩŅĐģи Ņ ĐŊĐ°Ņ ŅĐ°ĐŧĐžĐŋОдĐŋиŅĐ°ĐŊĐŊŅĐš
skipOpenidProviderTlsVerify: true
# ĐĐ°ŅŅŅОКĐēĐ° ĐŋŅав Đ´ĐžŅŅŅĐŋĐ°, ĐŋŅŅĐēĐ°ĐĩĐŧ ĐŊĐ° вŅĐĩ path ĐĩŅĐģи ĐŧŅ в ĐŗŅŅĐŋĐŋĐĩ DataOPS
rules:
- "uri=/*|groups=DataOPS"
āĻāĻ° āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨ āĻ˛āĻ āĻāĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦā§āĻ¨
āĻā§āĻ¯āĻžāĻāĻāĻ¯āĻŧā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻāĻāĻ¯āĻŧā§ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž kubectl-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦā§, āĻ¯āĻžāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ āĻ§ā§āĻ¨ā§ Kubernetes-āĻ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°āĻŦāĨ¤
helm install --name gangway stable/gangway -f values_gangway.yaml
values_gangway.yaml
gangway:
# ĐŅОиСвОĐģŅĐŊĐžĐĩ иĐŧŅ ĐēĐģĐ°ŅŅĐĩŅĐ°
clusterName: "my-k8s"
# ĐĐ´Đĩ Ņ ĐŊĐ°Ņ OIDC ĐŋŅОваКдĐĩŅ
authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
# ĐĸĐĩĐžŅиŅиŅĐĩŅĐēи ŅŅĐ´Đ° ĐŧĐžĐļĐŊĐž дОйавиŅŅ groups ĐēĐžŅĐžŅŅĐĩ ĐŧŅ СаĐŧĐ°ĐŋиĐģи
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
# ĐĐŧŅ ĐēĐģиĐĩĐŊŅĐ°
clientID: "kubernetes"
# ĐĄĐĩĐēŅĐĩŅ
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# ĐŅĐģи ĐžŅŅавиŅŅ Đ´ĐĩŅĐžĐģŅĐŊĐžĐĩ СĐŊĐ°ŅĐŊиĐĩ, ŅĐž Са иĐŧŅ ĐŋĐžĐģŅСОваŅĐĩĐģŅ ĐąŅĐ´ĐĩŅ ĐąŅĐ°ŅŅŅ <b>Frist name</b> <b>Second name</b>, Đ° ĐŋŅи "sub" ĐĩĐŗĐž ĐģĐžĐŗиĐŊ
usernameClaim: "sub"
# ĐĐžĐŧĐĩĐŊĐŊĐžĐĩ иĐŧŅ иĐģи IP Đ°Đ´ŅĐĩŅŅ API ŅĐĩŅвĐĩŅĐ°
apiServerURL: "https://192.168.99.111:8443"
# ĐĐēĐģŅŅĐ°ĐĩĐŧ Ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
path: /
hosts:
- gangway.example.org
tls:
- secretName: tls-keycloak
hosts:
- gangway.example.org
# ĐŅĐģи иŅĐŋĐžĐģŅСŅĐĩĐŧ ŅĐ°ĐŧĐžĐŋОдĐŋиŅĐ°ĐŊĐŊŅĐš ŅĐĩŅŅиŅиĐēĐ°Ņ, ŅĐž ĐĩĐŗĐž(ĐžŅĐēŅŅŅŅĐš ĐēĐžŅĐŊĐĩвОК ŅĐĩŅŅиŅиĐēĐ°Ņ) ĐŊĐ°Đ´Đž ŅĐēаСаŅŅ.
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
āĻāĻāĻž āĻāĻ āĻŽāĻ¤ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāĻ¯āĻŧ. āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻĢāĻžāĻāĻ˛ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ:
āĻāĻ¤ā§āĻ¸: www.habr.com