Remarque perev. : Poursuivant le sujet récemment soulevé de la sécurité de Kubernetes en général et de RBAC en particulier, nous publions une traduction de ce matériel par un consultant français de la société internationale Adaltas Big Data. L'auteur montre en détail comment créer des utilisateurs, leur donner des droits et continuer à servir.La configuration et le démarrage d'un cluster Kubernetes n'est qu'un début: il doit également être exploité. Pour sécuriser l'accès au cluster, vous devez définir les informations d'identification de l'utilisateur et gérer correctement les paramètres d'authentification et d'autorisation.
(Illustration tirée du blog de la CNCF - Trad . Env.)Cet article explique comment créer des utilisateurs à l'aide de
certificats clients
X.509 et comment gérer l'autorisation à l'aide des API
RBAC de base dans Kubernetes. Nous parlerons également de quelques projets open source qui simplifient l'administration des clusters: rakkess, kubectl-who-can, rbac-lookup et RBAC Manager.
Conditions préalables et hypothèses
Tout d'abord, il faut faire plusieurs hypothèses:
Si vous n'avez pas de cluster Kubernetes prêt à l'emploi, je vous recommande de vous référer à l'article d'un collègue (Arthur BUSSER) dans lequel il parle de l'
installation de Kubernetes sur CentOS 7 à l' aide de Vagrant.
Notre cluster comprend 4 nœuds: un maître et 3 travailleurs. L'assistant sera également utilisé comme nœud périphérique pour interagir avec le cluster.
API RBAC
Le contrôle d'accès basé sur les rôles (RBAC) est une méthode de contrôle de l'accès aux ordinateurs et aux ressources réseau, basée sur les rôles des utilisateurs individuels dans une entreprise. RBAC peut être utilisé avec toutes les ressources Kubernetes qui prennent en charge CRUD (créer, lire, mettre à jour, supprimer). Exemples de telles ressources:
- espaces de noms
- Pods
- Déploiements
- volumes persistants (PersistentVolumes);
- ConfigMaps
Et voici des exemples d'opérations possibles avec eux:
create
;get
delete
(supprimer) ;list
(vue list
) ;update
.
Pour gérer RBAC dans Kubernetes, nous devons déclarer:
Role
et ClusterRole
. Ce sont simplement des ensembles de règles représentant un ensemble d'autorisations. Role
ne peut être utilisé que pour fournir un accès aux ressources dans les espaces de noms. ClusterRole
peut fournir les mêmes autorisations que Role
, et également donner accès aux ressources disponibles dans l'ensemble du cluster, et aux points de terminaison non-ressources (comme /healthz
- environ Transl.) .Subjects
Le sujet est une entité qui effectuera des opérations dans un cluster. Il peut s'agir d'utilisateurs, de services ou même de groupes.RoleBinding
et ClusterRoleBinding
. Comme son nom l'indique, il s'agit simplement d'une liaison du sujet à un rôle ou à un ClusterRole.
Kubernetes a les rôles par défaut suivants:
view
: accès en lecture seule, exclut les secrets;edit
: ce qui précède + la possibilité de modifier la plupart des ressources, exclut les rôles et les liaisons de rôles;admin
: ce qui précède + la possibilité de gérer les rôles et les mappages de rôles au niveau de l'espace de noms;cluster-admin
: tous les privilèges possibles.
Bien sûr, vous pouvez créer vos propres
Roles
et
Roles
ClusterRoles
, mais nous vous recommandons d'utiliser autant que possible les rôles par défaut, dans la mesure où la situation le permet. Sinon, vous pouvez rapidement vous perdre dans tout cela.
Exemple d'utilisation
Nous allons créer deux espaces de noms:
my-project-dev
et
my-project-prod
, - ainsi que deux utilisateurs:
jean
et
sarah
- avec des rôles différents dans ces espaces de noms:
- mon-projet-dev:
- my-project-prod:
- jean: voir
- sarah: modifier
Créer et authentifier des utilisateurs à l'aide de certificats clients X.509
En règle générale, il existe deux types d'utilisateurs:
les comptes de service gérés par Kubernetes et les utilisateurs réguliers. Nous nous concentrerons sur ce dernier. Voici comment ils sont décrits dans la documentation officielle:
On suppose que les utilisateurs réguliers sont gérés par un service externe indépendant. Le rôle peut être joué par un administrateur distribuant des clés privées, un référentiel d'utilisateurs comme Keystone ou des comptes Google, ou même un fichier avec une liste de noms d'utilisateurs et de mots de passe. À cet égard, Kubernetes n'a aucun objet représentant des utilisateurs ordinaires. Les utilisateurs ordinaires ne peuvent pas être ajoutés au cluster via un appel d'API.
Il existe plusieurs façons de gérer les utilisateurs réguliers:
- Authentification de base:
- transfert de la configuration au serveur API avec le contenu suivant (ou similaire): mot de passe, nom d'utilisateur, uid, groupe;
- Certificat client X.509:
- création d'une clé secrète d'utilisateur et d'une demande de signature de certificat;
- certification dans une autorité de certification (Kubernetes CA) pour obtenir un certificat d'utilisateur;
- Jetons au porteur (jetons Web JSON, JWT):
- OpenID Connect
- couche d'authentification au-dessus d'OAuth 2.0;
- webhooks
Dans cet article, nous utiliserons les certificats X.509 et OpenSSL en raison de leur simplicité. La création d'utilisateurs se déroule en plusieurs étapes - nous allons les parcourir toutes. Les opérations doivent être effectuées sous le compte d'utilisateur avec les privilèges d'administrateur du cluster (cluster-admin). Voici toutes les étapes pour créer un utilisateur (en utilisant
jean
comme exemple):
- Créez un utilisateur dans l'assistant, puis accédez à son répertoire personnel pour effectuer les étapes restantes:
useradd jean && cd /home/jean
- Créez une clé privée:
openssl genrsa -out jean.key 2048
- Créez une demande de signature de certificat (CSR).
CN
est le nom d'utilisateur, O
est le groupe. Vous pouvez définir des autorisations par groupe. Cela simplifiera le travail si, par exemple, vous avez de nombreux utilisateurs avec les mêmes autorisations:
- Signez la RSE dans Kubernetes CA. Nous devons utiliser le certificat et la clé CA, qui se trouvent généralement dans
/etc/kubernetes/pki
. Le certificat sera valable 500 jours:
openssl x509 -req -in jean.csr \ -CA /etc/kubernetes/pki/ca.crt \ -CAkey /etc/kubernetes/pki/ca.key \ -CAcreateserial \ -out jean.crt -days 500
- Créez le répertoire
.certs
. Nous y stockons les clés publiques et privées de l'utilisateur:
mkdir .certs && mv jean.crt jean.key .certs
- Créez un utilisateur dans Kubernetes:
kubectl config set-credentials jean \ --client-certificate=/home/jean/.certs/jean.crt \ --client-key=/home/jean/.certs/jean.key
- Définissez le contexte pour l'utilisateur:
kubectl config set-context jean-context \ --cluster=kubernetes --user=jean
- Modifiez le fichier de configuration utilisateur. Il contient les informations nécessaires à l'authentification dans un cluster. Vous pouvez utiliser le fichier de configuration du cluster, qui se trouve généralement dans
/etc/kubernetes
: les certificate-authority-data
et server
variables du server
doivent être les mêmes que dans le fichier mentionné:
apiVersion: v1 clusters: - cluster: certificate-authority-data: { } server: { } name: kubernetes contexts: - context: cluster: kubernetes user: jean name: jean-context current-context: jean-context kind: Config preferences: {} users: - name: jean user: client-certificate: /home/jean/.certs/jean.cert client-key: /home/jean/.certs/jean.key
Vous devez maintenant copier la configuration ci-dessus dans le répertoire .kube
:
mkdir .kube && vi .kube/config
- Il reste à faire de l'utilisateur le propriétaire de tous les fichiers et répertoires créés:
chown -R jean: /home/jean/
L'utilisateur
jean
créé avec succès. Nous ferons de même pour
sarah
. Il y a pas mal d'étapes et la création d'un grand nombre d'utilisateurs peut prendre beaucoup de temps. Par conséquent, j'ai écrit des scripts Bash qui automatisent le processus: ils peuvent être trouvés dans le
référentiel sur GitHub .
Remarque perev. : Comme nous l'avons écrit dans notre récent article , cette procédure peut être simplifiée de manière plus «native» pour Kubernetes - grâce à de nouvelles fonctionnalités de l'utilitaire de console kubeadm . Cependant, n'oubliez pas qu'au moment de la publication de cette traduction, ils sont disponibles sous forme alpha. Un exemple de commande pour créer un utilisateur est kubeadm alpha kubeconfig user
.Nous avons maintenant des utilisateurs et nous pouvons passer à la création de deux espaces de noms:
kubectl create namespace my-project-dev kubectl create namespace my-project-prod
Comme nous n'avons pas encore déterminé l'autorisation des utilisateurs, ils ne devraient pas avoir accès aux ressources du cluster:
User: Jean kubectl get nodes Error from server (Forbidden): nodes is forbidden: User "jean" cannot list resource "nodes" in API group "" at the cluster scope kubectl get pods -n default Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "default" kubectl get pods -n my-project-prod Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "my-project-prod" kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "jean" cannot list resource "pods" in API group "" in the namespace "my-project-dev"
User: Sarah kubectl get nodes Error from server (Forbidden): nodes is forbidden: User "sarah" cannot list resource "nodes" in API group "" at the cluster scope kubectl get pods -n default Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "default" kubectl get pods -n my-project-prod Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-prod" kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-dev"
Création de rôles et de clusters
Nous utiliserons
ClusterRole
, disponible par défaut. Cependant, nous montrons également comment créer votre propre
Role
et
ClusterRole
. En substance,
Role
et
ClusterRole
sont qu'un ensemble d'actions
(appelées verbs
, c'est-à-dire verbatim - verbes) autorisées pour certaines ressources et certains espaces de noms. Voici un exemple de fichier YAML:
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: Role metadata: name: list-deployments namespace: my-project-dev rules: - apiGroups: [ apps ] resources: [ deployments ] verbs: [ get, list ] --------------------------------- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: list-deployments rules: - apiGroups: [ apps ] resources: [ deployments ] verbs: [ get, list ]
Pour les créer, exécutez la commande:
kubectl create -f /path/to/your/yaml/file
Rôle de rôle ou rôle de cluster aux utilisateurs
Maintenant, liez le
ClusterRole
par défaut (
edit
et
view
) à nos utilisateurs comme suit:
jean
:edit
- dans l'espace de noms my-project-dev
;view
- dans l'espace de noms my-project-prod
;
sarah
:edit
- dans l'espace de noms my-project-prod
.
Les liaisons de rôles doivent être spécifiées par des espaces de noms et non par des utilisateurs. En d'autres termes, pour autoriser
jean
nous allons créer deux RoleBindings. Un exemple de fichier YAML qui définit les RoleBindings pour
jean
:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jean namespace: my-project-dev subjects: - kind: User name: jean apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: edit apiGroup: rbac.authorization.k8s.io --------------------------------- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jean namespace: my-project-prod subjects: - kind: User name: jean apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io
Nous permettons à
jean
de
view
my-project-prod
et de modifier
my-project-dev
. La même chose doit être faite avec les autorisations pour
sarah
. Pour les activer, exécutez la commande:
kubectl apply -f /path/to/your/yaml/file
Dans ce cas,
kubectl apply
été utilisé à la place de
kubectl create
. La différence entre les deux est que
create
crée l'objet et ne fait rien d'autre, et
apply
- non seulement crée l'objet (s'il n'existe pas), mais met également à jour si nécessaire.
Vérifions si nos utilisateurs ont reçu les autorisations nécessaires.
- Utilisateur:
sarah
( edit
dans my-project-prod
)my-project-prod
- peut lister les pods (1);
- peut créer des déploiements (2).
my-project-dev
- impossible de répertorier les pods (4);
- impossible de créer des déploiements (5).
(1) kubectl get pods -n my-project-prod No resources found. (2) kubectl run nginx --image=nginx --replicas=1 -n my-project-prod deployment.apps/nginx created (3) kubectl get pods -n my-project-prod NAME READY STATUS RESTARTS AGE nginx-7db9fccd9b-t14qw 1/1 Running 0 4s (4) kubectl get pods -n my-project-dev Error from server (Forbidden): pods is forbidden: User "sarah" cannot list resource "pods" in API group "" in the namespace "my-project-dev" (5) kubectl run nginx --image=nginx --replicas=1 -n my-project-dev Error from server (Forbidden): deployments.apps is forbidden: User "sarah" cannot create resource "deployments" in API group "apps" in the namespace "my-project-dev"
- Utilisateur:
jean
( view
dans my-project-prod
et edit
dans my-project-dev
)my-project-prod
- peut lister les pods (1);
- peut lister deployment'ov (2);
- ne peut pas supprimer les déploiements (3).
- mon-projet-dev:
- peut lister les dosettes (4);
- peut créer des déploiements (5);
- peut lister deployment'ov (6);
- peut supprimer des déploiements (7).
(1) kubectl get pods -n my-project-prod NAME READY STATUS RESTARTS AGE nginx-7db9fccd9b-t14qw 1/1 Running 0 101s (2) kubectl get deploy -n my-project-prod NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 110s (3) kubectl delete deploy/nginx -n my-project-prod Error from server (Forbidden): deployments.extensions "nginx" is forbidden: User "jean" cannot delete resource "deployments" in API group "extensions" in the namespace "my-project-prod" (4) kubectl get pods -n my-project-dev No resources found. (5) kubectl run nginx --image=nginx --replicas=1 -n my-project-dev deployment.apps/nginx created (6) kubectl get deploy -n my-project-dev NAME READY UP-TO-DATE AVAILABLE AGE nginx 0/1 1 0 13s (7) kubectl delete deploy/nginx -n my-project-dev deployment.extensions "nginx" deleted (8) kubectl get deploy -n my-project-dev No resources found.
Gestion et autorisation des utilisateurs
Nous avons donc défini avec succès divers rôles et autorisations utilisateur. La question se pose: comment gérer maintenant tout cela? Comment savoir si les autorisations pour un utilisateur spécifique sont définies correctement? Comment savoir qui a le pouvoir d'effectuer une action spécifique? Comment obtenir une image générale des autorisations utilisateur?
Nous avons besoin de réponses à toutes ces questions pour garantir la sécurité du cluster. La commande
kubectl auth can-i
vous permet de savoir si un utilisateur peut effectuer une action spécifique:
La première commande (1) permet à l'utilisateur de savoir s'il peut effectuer une action. Le second (2) - permet à l'administrateur d'usurper l'identité de l'utilisateur pour savoir s'il peut effectuer une certaine action. Cette "réincarnation" n'est autorisée que pour les utilisateurs disposant de privilèges d'administrateur de cluster.
C'est pratiquement tout ce qui peut être fait avec la boîte à outils intégrée. C'est pourquoi je présenterai quelques projets Open Source qui étendent les capacités offertes par l'équipe kubectl auth can-i. Avant de les introduire, établissons les dépendances:
Go and
Krew .
Aller à l'installation
Go est un langage de programmation open source qui vous permet de créer des logiciels simples, fiables et efficaces. Il a été développé par Google sous l'inspiration de C et Pascal, basé sur les concepts originaux de
Robert Griesemer ,
Rob Pike et
Ken Thompson .
wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin
Installation de Krew
Krew est un outil qui simplifie l'utilisation des
plugins kubectl . Krew vous aide à trouver, installer et gérer des plugins. En termes de fonctions, il ressemble à des outils tels que apt, dnf ou brew. Krew est uniquement compatible avec kubectl version 1.12 et supérieure.
set -x; cd "$(mktemp -d)" && curl -fsSLO "https://storage.googleapis.com/krew/v0.2.1/krew.{tar.gz,yaml}" && tar zxvf krew.tar.gz && ./krew-"$(uname | tr '[:upper:]' '[:lower:]')_amd64" install \ --manifest=krew.yaml --archive=krew.tar.gz export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
rakkess
Ce projet vous permet de visualiser toutes les autorisations accordées à l'utilisateur. Par exemple, cela aide à répondre à la question de savoir ce que
jean
peut faire. Tout d'abord, installons-le:
kubectl krew install access-matrix
La documentation du projet peut être trouvée dans le
référentiel sur GitHub . Voici un exemple de son travail:
kubectl access-matrix -n my-project-dev --as jean

kubect-who-can
Ce projet nous permet de savoir quels utilisateurs peuvent effectuer une action spécifique. Cela aide à répondre à la question: "Qui peut faire ça?" Installation:
go get -v github.com/aquasecurity/kubectl-who-can
La documentation se trouve dans le
référentiel GitHub . Exemple de travail:
kubectl-who-can list pods -n default No subjects found with permissions to list pods assigned through RoleBindings CLUSTERROLEBINDING SUBJECT TYPE SA-NAMESPACE cluster-admin system:masters Group rbac-manager rbac-manager ServiceAccount rbac-manager system:controller:attachdetach-controller attachdetach-controller ServiceAccount kube-system system:controller:clusterrole-aggregation-controller clusterrole-aggregation-controller ServiceAccount kube-system system:controller:cronjob-controller cronjob-controller ServiceAccount kube-system system:controller:daemon-set-controller daemon-set-controller ServiceAccount kube-system system:controller:deployment-controller deployment-controller ServiceAccount kube-system system:controller:endpoint-controller endpoint-controller ServiceAccount kube-system system:controller:generic-garbage-collector generic-garbage-collector ServiceAccount kube-system system:controller:horizontal-pod-autoscaler horizontal-pod-autoscaler ServiceAccount kube-system system:controller:job-controller job-controller ServiceAccount kube-system system:controller:namespace-controller namespace-controller ServiceAccount kube-system system:controller:node-controller node-controller ServiceAccount kube-system system:controller:persistent-volume-binder persistent-volume-binder ServiceAccount kube-system system:controller:pod-garbage-collector pod-garbage-collector ServiceAccount kube-system system:controller:pvc-protection-controller pvc-protection-controller ServiceAccount kube-system system:controller:replicaset-controller replicaset-controller ServiceAccount kube-system system:controller:replication-controller replication-controller ServiceAccount kube-system system:controller:resourcequota-controller resourcequota-controller ServiceAccount kube-system system:controller:statefulset-controller statefulset-controller ServiceAccount kube-system system:coredns coredns ServiceAccount kube-system system:kube-controller-manager system:kube-controller-manager User system:kube-scheduler system:kube-scheduler User
rbac-lookup
Ce projet donne un aperçu des règles RBAC. Il aide à répondre aux questions: «À quel rôle appartiennent
jean
et
sarah
?», «À quel rôle appartiennent tous les utilisateurs?», «À quel rôle appartient tout le groupe?». Pour installer, exécutez la commande:
kubectl krew install rbac-lookup
La documentation se trouve dans le
référentiel GitHub . Voici un exemple de travail:
kubectl-rbac_lookup jean SUBJECT SCOPE ROLE jean my-project-dev ClusterRole/edit jean my-project-prod ClusterRole/view kubectl-rbac_lookup sarah SUBJECT SCOPE ROLE sarah my-project-prod ClusterRole/edit kubectl-rbac_lookup --kind user SUBJECT SCOPE ROLE jean my-project-dev ClusterRole/edit jean my-project-prod ClusterRole/view sarah my-project-prod ClusterRole/edit system:anonymous kube-public Role/kubeadm:bootstrap-signer-clusterinfo system:kube-controller-manager kube-system Role/extension-apiserver-authentication-reader system:kube-controller-manager kube-system Role/system::leader-locking-kube-controller-manager system:kube-controller-manager cluster-wide ClusterRole/system:kube-controller-manager system:kube-proxy cluster-wide ClusterRole/system:node-proxier system:kube-scheduler kube-system Role/extension-apiserver-authentication-reader system:kube-scheduler kube-system Role/system::leader-locking-kube-scheduler system:kube-scheduler cluster-wide ClusterRole/system:kube-scheduler system:kube-scheduler cluster-wide ClusterRole/system:volume-scheduler kubectl-rbac_lookup --kind group SUBJECT SCOPE ROLE system:authenticated cluster-wide ClusterRole/system:basic-user system:authenticated cluster-wide ClusterRole/system:discovery system:authenticated cluster-wide ClusterRole/system:public-info-viewer system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:node-bootstrapper system:bootstrappers:kubeadm:default-node-token cluster-wide ClusterRole/system:certificates.k8s.io:certificatesigningrequests:nodeclient system:bootstrappers:kubeadm:default-node-token kube-system Role/kube-proxy system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:kubelet-config-1.14 system:bootstrappers:kubeadm:default-node-token kube-system Role/kubeadm:nodes-kubeadm-config system:masters cluster-wide ClusterRole/cluster-admin system:nodes kube-system Role/kubeadm:kubelet-config-1.14 system:nodes kube-system Role/kubeadm:nodes-kubeadm-config system:nodes cluster-wide ClusterRole/system:certificates.k8s.io:certificatesigningrequests:selfnodeclient system:unauthenticated cluster-wide ClusterRole/system:public-info-viewer
RBAC Manager
Comme le nom de
ce projet suit évidemment, il est le directeur de RBAC. Il simplifie les nombreuses manipulations nécessaires. Le plus important est peut-être la création de RoleBindings. Nous avons vu plus tôt que lors de la création de rôles différents pour un utilisateur, il est nécessaire de créer différents rôles RoleBindings. RBAC Manager vous aide en vous permettant de créer un seul RoleBinding avec toutes les autorisations à la fois. Pour l'installer, vous devez télécharger le fichier YAML depuis le référentiel sur GitHub:
kubectl apply -f /path/to/rbac/manager/yaml/file
La documentation officielle se trouve dans le
référentiel GitHub . Exemple de travail:
apiVersion: rbacmanager.reactiveops.io/v1beta1 kind: RBACDefinition metadata: name: jose rbacBindings: - name: jose subjects: - kind: User name: jose roleBindings: - namespace: my-project-prod clusterRole: edit - namespace: my-project-dev clusterRole: edit
Conclusion
Nous avons créé des utilisateurs dans le cluster Kubernetes à l'aide du certificat client X.509 avec OpenSSL et les avons autorisés. Pour une création d'utilisateur plus facile, vous pouvez utiliser le script disponible dans
mon référentiel sur GitHub (ou les commandes expérimentales kubeadm - environ Transl.) . Quant à l'administration du cluster, vous pouvez utiliser les projets Open Source présentés dans l'article:
- kubectl auth can-i : savoir si l'utilisateur peut effectuer une action;
- rakkess : découvrez toutes les actions que l'utilisateur peut effectuer;
- kubectl-who-can : détermine quels utilisateurs peuvent effectuer une action;
- rbac-lookup : obtenir un aperçu général de RBAC;
- Gestionnaire RBAC : simplifiez la configuration en combinant les liaisons de droits, en automatisant les modifications apportées à RBAC, en utilisant des étiquettes comme sélecteurs pour attribuer les droits.
La création d'utilisateurs peut devenir une tâche très chronophage, surtout si vous devez définir un grand nombre d'utilisateurs à la fois (ou les créer souvent). Pour atténuer la situation, vous pouvez connecter LDAP d'entreprise au cluster Kubernetes. Certains projets Open Source (
Kismatic [ Object ressemble à abandonné - environ Transl.] Et
ObjectifLibre ) offrent des webhooks Kubernetes qui permettent une authentification directe via LDAP. Une autre solution possible consiste à configurer un serveur OpenID avec LDAP d'entreprise comme backend.
PS du traducteur
Lisez aussi dans notre blog: