Installer Keycloak, un fournisseur OIDC, sur OVHcloud Managed Kubernetes
Sécurisez votre cluster OVHcloud Managed Kubernetes avec Keycloak, un fournisseur OpenID Connect (OIDC) et le RBAC.
Objectif
L'objectif principal de ce tutoriel est de sécuriser votre cluster OVHcloud Managed Kubernetes avec OpenID Connect (OIDC) et le RBAC.
Tout d'abord, qu'est-ce que l'OIDC ?

OIDC signifie OpenID Connect. Il s'agit d'un standard ouvert et d'un protocole d'authentification décentralisé.
Ce protocole permet de vérifier l'identité d'un utilisateur lorsque celui-ci tente d'accéder à un endpoint HTTPS protégé.
Plusieurs fournisseurs OpenID Connect existent, comme Dex, Keycloak ou un fournisseur SaaS, et nous utiliserons Keycloak pour notre cas d'usage.
Qu'est-ce que Keycloak ?

Keycloak est une solution open source de gestion des identités et des accès destinée aux applications et services modernes.
Elle permet de sécuriser facilement des applications et des services avec peu ou pas de code.
Vous trouverez plus d'informations ici : documentation officielle de Keycloak
Pourquoi parler d'OIDC et de Keycloak ?
Ce tutoriel a pour objectif de :
- sécuriser facilement des applications et des services déployés dans un cluster Kubernetes
- configurer un déploiement Keycloak fonctionnel au-dessus d'un Managed Kubernetes Service fourni par OVHcloud
- configurer les indicateurs
OpenIdConnectdisponibles pour le composantkube-apiserverd'un Managed Kubernetes Service via l'espace client OVHcloud - utiliser la ligne de commande
kubectlavec le fournisseur OpenIdConnect Keycloak configuré
Dans ce tutoriel, vous allez :
- installer Keycloak sur un cluster OVHcloud Managed Kubernetes Service nouvellement créé
- configurer une instance Keycloak dans votre cluster Kubernetes en tant que fournisseur OIDC
Vous pouvez utiliser la fonction Réinitialiser le cluster dans la section Public Cloud de l' pour réinitialiser votre cluster avant de suivre ce tutoriel.
Prérequis
Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.
Ce tutoriel a été rédigé pour être entièrement compatible avec la version v1.22 de Kubernetes.
Vous devrez peut-être l'adapter pour déployer une instance Keycloak fonctionnelle sur une version de Kubernetes antérieure à la v1.22.
Dépendances
Un cert-manager pour activer la connexion HTTPS via Keycloak
- Vous trouverez plus d'informations ici : documentation officielle de cert-manager
- Description du chart Helm : chart Helm cert-manager
- Chart Helm utilisé pour le déploiement :
jetstack/cert-manager
Pour ajouter le dépôt Helm cert-manager :
Installez ensuite l'opérateur cert-manager à partir de son chart Helm :
Cette commande installe cert-manager avec les valeurs définies, crée un nouveau namespace cert-manager et installe les nouvelles CRD (CustomResourceDefinitions) :
Vérifiez que cert-manager a été correctement déployé avec la commande kubectl get all -n cert-manager :
Vous devriez voir de nouveaux Deployments, Services, ReplicaSets et Pods s'exécuter dans votre cluster.
Créez ensuite un ACME ClusterIssuer utilisé par l'opérateur cert-manager pour demander des certificats aux serveurs ACME, y compris à Let's Encrypt.
Pour ce lab, nous utiliserons l'environnement production de Let's Encrypt afin de générer tous nos certificats de test.
Attention ! L'utilisation de l'environnement de Staging de Let's Encrypt n'est pas recommandée et n'est pas conforme à ce tutoriel.
Créez un ClusterIssuer dans un fichier nommé issuer.yaml avec le contenu suivant :
N'oubliez pas de remplacer [YOUR_EMAIL] par une valeur réelle, elle sera utilisée pour les challenges ACME.
Appliquez le manifeste YAML :
Vous devriez voir un nouveau ClusterIssuer déployé dans votre cluster :
Attention ! Vous pouvez utiliser le plugin kubectl neat afin de supprimer les informations inutiles des fichiers manifestes Kubernetes.
Un Ingress Nginx pour exposer Keycloak publiquement
- Vous trouverez plus d'informations ici : documentation officielle d'ingress-nginx
- Description du chart Helm : chart Helm ingress-nginx
- Chart Helm utilisé pour le déploiement :
ingress-nginx/ingress-nginx
Pour ajouter le dépôt Helm ingress-nginx :
Installez ensuite le contrôleur ingress-nginx :
Cette commande installe ingress-nginx et crée un nouveau namespace ingress-nginx :
Vous devriez voir de nouvelles ressources dans le namespace ingress-nginx :
Si vous devez personnaliser votre configuration ingress-nginx, reportez-vous à la documentation suivante : valeurs d'ingress-nginx
L'installation de ce contrôleur ingress-nginx commande un LoadBalancer fourni par OVHcloud (ce load balancer sera facturé mensuellement).
Pour plus d'informations, reportez-vous à la documentation suivante : Utiliser le LoadBalancer OVHcloud Managed Kubernetes
Pour vérifier que le LoadBalancer est actif, exécutez la commande suivante dans une console :
Vous devriez obtenir un résultat similaire à celui-ci :
Une fois votre LoadBalancer actif, récupérez son adresse IP pour configurer votre zone de nom de domaine :
Vous devriez obtenir un résultat similaire à celui-ci :
Si vous utilisez le produit OVHcloud Nom de domaine, vous pouvez suivre cette documentation pour configurer votre enregistrement DNS afin de le relier à l'adresse IPv4 publique associée à votre LoadBalancer : Modifier une zone DNS OVHcloud.
Si vous utilisez un fournisseur DNS externe, configurez votre domaine avant de poursuivre la lecture de ce tutoriel.
Dans notre cas, nous avons un nom de domaine example.com.
La sortie de la commande nslookup sur notre entrée de domaine affiche les informations suivantes :
En pratique
Comment configurer et déployer le fournisseur Keycloak Codecentric ?
- Vous trouverez plus d'informations ici : documentation officielle de Keycloak
- Description du chart Helm : chart Helm Keycloak codecentric
- Chart Helm utilisé pour le déploiement :
codecentric/keycloak
Un PersistentVolume sera créé pour héberger toutes les données PostgreSQL.
Ce PersistentVolume sera fourni via la classe de stockage Cinder, qui est la classe de stockage par défaut utilisée par Managed Kubernetes Service chez OVHcloud (ce volume sera facturé).
Pour plus d'informations, reportez-vous à la documentation suivante : Configurer un Persistent Volume sur OVHcloud Managed Kubernetes
Installation de Keycloak
Pour ajouter le dépôt codeCentric :
Créez un fichier nommé keycloack-values.yaml avec le contenu suivant :
Remplacez toutes les valeurs portant le commentaire CHANGEME par des noms d'utilisateur et des mots de passe robustes.
Installez ensuite le chart Helm codecentric/keycloak :
Vous devriez obtenir le résultat suivant :
Vérifiez que le StatefulSet Keycloak est à l'état Ready :
Dans notre exemple, après avoir attendu quelques minutes, nos StatefulSets sont à l'état Ready :
Lorsqu'ils sont prêts, créez un fichier nginx-ingress-definition.yaml avec le contenu suivant :
Remplacez example.com par votre nom de domaine
Appliquez ensuite le fichier YAML pour configurer la route Ingress nécessaire à l'exposition de Keycloak sur Internet :
Configuration de Keycloak
Si vous lisez ce chapitre, cela signifie que votre instance Keycloak est désormais opérationnelle.
Ouvrez la console web Keycloak : https://keycloak.your-domain-name.tld/.
Dans notre exemple, l'URL de notre instance Keycloak installée est https://keycloak.example.com/.
Si vous la remplacez par votre URL personnalisée, vous devriez voir l'interface Keycloak suivante :

Cliquez ensuite sur Administration Console et connectez-vous avec le username et le password configurés dans le fichier keycloack-values.yaml que vous avez rempli et modifié à la section Installation de Keycloak de ce guide.

Créer un REALM
Un realm dans Keycloak est l'équivalent d'un tenant ou d'un namespace. Il permet de créer des groupes isolés d'applications et d'utilisateurs.
Par défaut, il n'existe qu'un seul realm dans Keycloak, appelé Master. Il est dédié à l'administration de Keycloak et ne doit pas être utilisé pour vos propres applications.
Créez un realm dédié à ce tutoriel :
- Affichez le menu déroulant dans le coin supérieur gauche où figure
Master, puis cliquez sur le bouton bleuAdd realm. - Remplissez le formulaire avec ce nom :
ovh-lab-k8s-oidc-authentication, puis cliquez sur le bouton bleuCreate.

Créer un CLIENT
Un client dans Keycloak est une entité qui peut demander à un serveur Keycloak d'authentifier un utilisateur.
- Depuis le realm précédemment créé, cliquez sur
Clientsdans le menu de gauche, sous la catégorieConfigure:

- Cliquez sur
Createdans le coin supérieur droit du tableau. - Remplissez le formulaire avec les paramètres suivants :
Dans notre exemple, les informations du nouveau client sont :

- Cliquez ensuite sur le bouton
Save. - Dans le client nouvellement créé, trouvez le champ
Access Typeet définissez sa valeur surconfidentialpour exiger un secret afin d'initier le protocole de connexion. Cliquez ensuite sur le bouton bleuSavepour enregistrer la modification.

6. Cliquez ensuite sur l'onglet Credentials. Trouvez le champ Valid Redirect URIs et définissez la valeur suivante : *
7. Trouvez les champs Admin URL et Web Origins et définissez leurs valeurs sur votre nom de domaine défini, si cela n'est pas déjà fait. Dans notre exemple : https://keycloak.example.com/. Veillez à n'utiliser que le schéma HTTPS.
8. Enregistrez vos modifications.
Créer un USER
- Depuis le realm précédemment créé, cliquez sur
Usersdans le menu de gauche, sous la catégorieManage. - Cliquez sur
Add userdans le coin supérieur droit du tableau. - Remplissez le formulaire. Seul le champ
Usernameest requis, cela suffit pour ce tutoriel.
Dans notre exemple, nous avons créé l'utilisateur suivant :
- Cliquez ensuite sur le bouton
Save.
La première connexion de l'utilisateur nécessite un mot de passe initial ; créez-le :
- Cliquez sur l'onglet
Credentials - Remplissez le formulaire
Set Password - Désactivez l'indicateur
Temporarypour éviter d'avoir à mettre à jour le mot de passe à la première connexion - Cliquez ensuite sur le bouton
Set Passwordet confirmez votre choix
Configurer l'instance Keycloak dans votre cluster Kubernetes en tant que fournisseur OIDC
Maintenant que vous disposez d'une instance Keycloak fonctionnelle, votre URL de fournisseur est https://keycloak.example.com/auth/realms/ovh-lab-k8s-oidc-authentication, et puisque vous avez créé un utilisateur, vous pouvez consulter le guide Configurer le fournisseur OIDC sur un cluster OVHcloud Managed Kubernetes pour configurer le fournisseur OIDC sur votre cluster Kubernetes via l'espace client OVHcloud, l'API OVHcloud ou via Terraform.
Explications :
- Dans le champ
Provider URL, vous devez copier/coller l'URL d'accès au realm précédemment défini : https://${your-configured-root-url}/auth/realms/${your-configured-realm-name}
Dans notre exemple, nous avons utilisé le realm ovh-lab-k8s-oidc-authentication
issuerUrl : https://keycloak.example.com/auth/realms/ovh-lab-k8s-oidc-authentication.
- Dans
Client ID, vous devez copier/coller le nom du client Keycloak précédemment défini.
Dans notre exemple, nous avons défini le client nommé : k8s-oidc-auth.
Notre cluster Kubernetes est désormais configuré avec notre instance Keycloak, les deux sont liés.
Intégration et configuration OIDC
Si cela n'est pas déjà fait, vous devez installer le gestionnaire de plugins kubectl nommé Krew.
Installez ensuite le plugin oidc-login pour étendre les capacités de la ligne de commande kubectl et configurer facilement votre environnement afin de pouvoir utiliser votre serveur Keycloak.
Une fois oidc-login installé, retournez à l'interface web Keycloak pour récupérer le secret de votre client.
Vous trouverez cette information ici :
- Cliquez sur le menu
Clientsdans la colonne de gauche - Cliquez sur le client précédemment créé (
k8s-oidc-authdans notre exemple) - Accédez à l'onglet
Credentialset récupérez la valeursecret


Personnalisez ensuite la ligne de commande suivante avec vos informations et exécutez-la pour pouvoir :
- vous connecter à votre fournisseur Keycloak via votre navigateur
- générer un token à partir de celui-ci
- configurer votre contexte Kubectl pour accéder aux API Kubernetes avec le token nouvellement généré
Voici la commande avec les informations relatives à notre exemple :
Votre navigateur préféré affichera une page d'authentification vers votre serveur Keycloak.
Connectez-vous avec les identifiants définis lors de l'étape de création de l'utilisateur de ce tutoriel.
Une fois l'authentification réussie, vous pouvez fermer l'onglet de votre navigateur et retourner à votre console, où un message s'affiche.
Le plugin oidc-login vous a fourni des instructions à suivre pour finaliser la configuration de votre environnement Kubectl.
À l'étape 3 de la sortie oidc-login, vous devez créer un ClusterRoleBinding :
Vous pouvez ignorer l'étape 4, car nous avons déjà configuré le kube-apiserver via l'espace client OVHcloud.
Pour l'étape 5, configurez ensuite votre kubeconfig :
Et vérifiez l'accès à votre cluster (étape 6 de la sortie oidc-login) avec la commande suivante :
Par exemple :
Si vous voyez les nœuds de votre Managed Kubernetes Service, félicitations, votre instance Keycloak est opérationnelle !
Mettre à jour le déploiement Keycloak si nécessaire
Saisissez la commande suivante :
Redémarrer les StatefulSets Keycloak si nécessaire
Dépannage divers
Si le namespace cert-manager reste bloqué en état de suppression, consultez la documentation suivante : namespace-stuck-in-terminating-state
Suppression (nettoyage)
Pour supprimer toutes les ressources existantes liées au chart Helm Keycloak, exécutez les lignes de commande suivantes :
Pour supprimer toutes les ressources existantes liées au chart Helm ingress-nginx, exécutez les lignes de commande suivantes :
Pour supprimer toutes les ressources existantes liées au chart Helm cert-manager, exécutez les lignes de commande suivantes :
Ressources utiles
- Documentation Keycloack
- ArtifactHUB keycloack
- Sécurisation des ressources Ingress avec cert-manager
- Keycloak sur Kubernetes
- Documentation sur le contrôle d'accès à l'API Kubernetes
Aller plus loin
-
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
-
Échangez avec notre communauté d'utilisateurs.