דער אַרטיקל איז געווען געשריבן צו יקספּאַנד אויף די שוין
אין דעם אַרטיקל איך וועט זאָגן איר ווי צו ינסטאַלירן און קאַנפיגיער:
- שליסלקלאָק איז אַן אָפֿן מקור פּרויעקט. וואָס גיט אַ איין פונט פון פּאָזיציע פֿאַר אַפּלאַקיישאַנז. אַרבעט מיט פילע פּראָטאָקאָלס, אַרייַנגערעכנט LDAP און OpenID וואָס מיר זענען אינטערעסירט אין.
- שליסלקלאָקק טויער היטער - פאַרקערט פּראַקסי אַפּלאַקיישאַן אַז אַלאַוז איר צו ויסשטימען דערלויבעניש דורך Keycloak.
- גאַנגווייַ - אַ אַפּלאַקיישאַן וואָס דזשענערייץ אַ קאַנפיגיעריישאַן פֿאַר kubectl מיט וואָס איר קענען קלאָץ אין און פאַרבינדן צו די Kubernetes API דורך OpenID.
ווי פּערמישאַנז אַרבעט אין Kubernetes.
מיר קענען פירן באַניצער / גרופּע רעכט ניצן RBAC, אַ בינטל פון אַרטיקלען האָבן שוין באשאפן וועגן דעם, איך וועל נישט וווינען אויף דעם אין דעטאַל. דער פּראָבלעם איז אַז איר קענען נוצן RBAC צו באַגרענעצן באַניצער רעכט, אָבער Kubernetes ווייסט גאָרנישט וועגן ניצערס. עס טורנס אויס אַז מיר דאַרפֿן אַ באַניצער עקספּרעס מעקאַניזאַם אין Kubernetes. צו טאָן דאָס, מיר וועלן לייגן אַ שפּייַזער צו Kuberntes OpenID, וואָס וועט זאָגן אַז אַזאַ אַ באַניצער טאַקע יגזיסץ, און Kubernetes זיך וועט געבן אים די רעכט.
טראַינינג
- איר וועט דאַרפֿן אַ קובערנעטעס קנויל אָדער מיניקובע
- אַקטיוו Directory
- דאָומיינז:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - סערטיפיקאַט פֿאַר דאָומיינז אָדער זיך-געחתמעט באַווייַזן
איך וועל נישט וווינען אויף ווי צו שאַפֿן אַ זיך-געחתמעט באַווייַזן, איר דאַרפֿן צו שאַפֿן 2 סערטיפיקאַץ, דאָס איז דער וואָרצל (סערטיפיקאַט אויטאָריטעט) און ווילדקאַרד קליענט פֿאַר די *.example.org פעלד
נאָך איר באַקומען / אַרויסגעבן סערטיפיקאַץ, דער קליענט מוזן זיין מוסיף צו Kubernetes, פֿאַר דעם מיר מאַכן אַ סוד פֿאַר אים:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
דערנאָך, מיר וועלן נוצן עס פֿאַר אונדזער ינגרעסס קאָנטראָללער.
Keycloak ינסטאַלירונג
איך באַשלאָסן אַז די יזיאַסט וועג איז צו נוצן פאַרטיק סאַלושאַנז פֿאַר דעם, ניימלי העלם טשאַרץ.
ינסטאַלירן די ריפּאַזאַטאָרי און דערהייַנטיקן עס:
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
אַרויסווייַזן נאָמען
Kubernetes
דיסייבאַל באַניצער E- בריוו וועראַפאַקיישאַן:
קליענט סקאָפּעס -> E- בריוו -> מאַפּפּערס -> Email וועריפיעד (ויסמעקן)
מיר שטעלן זיך פעדעריישאַן צו אַרייַנפיר יוזערז פֿון ActiveDirectory, איך וועל לאָזן סקרעענשאָץ אונטן, איך טראַכטן עס וועט זיין קלירער.
באַניצער פעדעריישאַן —> צוגעבן שפּייַזער... —> ldap
סעטאַפּ פון פעדעריישאַן
אויב אַלץ איז גוט, נאָך דרינגלעך די קנעפּל סינגקראַנייז אַלע ניצערס איר וועט זען אַ אָנזאָג וועגן די מצליח אַרייַנפיר פון יוזערז.
ווייַטער מיר דאַרפֿן צו מאַפּע אונדזער גרופּעס
באַניצער פעדעריישאַן --> ldap_localhost --> מאַפּפּערס --> שאַפֿן
שאַפֿן אַ מאַפּפּער
קליענט סעטאַפּ
עס איז נייטיק צו שאַפֿן אַ קליענט, אין טערמינען פון Keycloak, דאָס איז אַ אַפּלאַקיישאַן וואָס וועט זיין אָטערייזד פון אים. איך וועל הויכפּונקט די וויכטיק פונקטן אין די סקרעענשאָט אין רויט.
קלייאַנץ -> שאַפֿן
קליענט סעטאַפּ
לאָמיר מאַכן אַ סקופּ פֿאַר גרופּעס:
קליענט סקאָפּעס -> שאַפֿן
שאַפֿן פאַרנעם
און שטעלן אַ מאַפּפּער פֿאַר זיי:
קליענט סקאָפּעס -> גרופּעס -> מאַפּפּערס -> שאַפֿן
מאַפּפּער
לייג די מאַפּינג פון אונדזער גרופּעס צו די דיפאָלט קליענט סקאָפּעס:
קלייאַנץ -> kubernetes -> קליענט סקאָפּעס -> דיפאָלט קליענט סקאָפּעס
קלייַבן גרופּעס в בנימצא קליענט סקאָפּעס, דריקן לייג אויסגעקליבן
מיר באַקומען דעם סוד (און שרייַבן עס צו די פאָדעם) וואָס מיר וועלן נוצן פֿאַר דערלויבעניש אין Keycloak:
קלייאַנץ -> קובערנעטעס -> קראַדענטשאַלז -> סוד
דאָס קאַמפּליץ די סעטאַפּ, אָבער איך געהאט אַ טעות ווען, נאָך געראָטן דערלויבעניש, איך באקומען אַ טעות 403.
פאַרריכטן:
קליענט סקאָפּעס -> ראָלעס -> מאַפּפּערס -> שאַפֿן
מאַפּע
שריפט קאָד
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
קאַנפיגיערינג Kubernetes
מיר דאַרפֿן צו ספּעציפיצירן ווו אונדזער וואָרצל באַווייַזן פון דעם פּלאַץ ליגט, און ווו די 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 config אין דעם קנויל:
kubeadmconfig
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 דאַשבאָרד
ינסטאָלינג 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 וואָס וועט געבן קנויל אַדמין רעכט (נאָרמאַל ClusterRole cluster-admin) פֿאַר יוזערז אין די DataOPS גרופּע.
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
וואַלועס_פּראָקסי.יאַמל
# Включаем 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