10/05/2021
Cette suite d'articles a pour but de guider d'éventuels développeurs qui aimeraient se lancer dans l'IAM et découvrir l'univers ForgeRock. En suivant la documentation de ForgeRock, il sera question de déployer la plateforme dans un environnement DevOps et d'en comprendre ces principes de base.
Partie 1: configuration de l'environnement (c'est ici!)
Partie 2: déploiement du CDK forgeops en local
Partie 3: personnalisation de la plateforme
Cet article a pour vocation de présenter une première approche sur la façon de configurer l'environnement nécessaire au déploiement de la plateforme ForgeRock sur Kubernetes. La plateforme ForgeRock Identity Platform TM peut être déployée de deux façons différentes, soit sur une machine en local (mais avec des possibilités moindres) soit dans le Cloud.
Dans notre cas, nous présenterons les étapes nécessaires pour configurer l'environnement nécessaire au déploiement de la plateforme en local grâce à l'utilisation de Minikube qui permet de mettre en place et de gérer le cluster Kubernetes. Cet environnement convient uniquement au développement et non à la mise en production.
Cet article puise ces sources de la documentation ForgeRock, pour plus de détails visiter le lien suivant : https://backstage.forgerock.com/docs/forgeops/7/start-here.html
La documentation ForgeRock préconise de maitriser un grand nombre de technologies avant de se lancer dans la mise en place de la plateforme ForgeRock Identity Platform TM. Dans notre cas de figure, il ne sera pas nécessaire de toutes les maitriser (cf. https://backstage.forgerock.com/docs/ forgeops/7/start-here-skills.html) mais certaines sont essentielles pour la bonne compréhension des concepts de base de la culture DevOps.
Il faut donc être familier avec les prérequis techniques suivants:
Docker:
Ecrire des Dockerfiles.
Créer des images Docker, les pousser (push) dans un registre Docker privée.
Tirer (pull) et lancer (run) des images Docker d’un registre Docker privée.
Kubernetes:
Mettre en place un cluster Kubernetes en utilisant Minikube.
Utiliser la commande kubectl pour déterminer le statut des pods dans un espace de noms, et pour déterminer quels pods sont opérationnels.
Git:
Etre capable de cloner un répertoire GitHub.
Etre capable de créer une nouvelle branche de travail.
Dans cet article, il sera aussi nécessaire de définir un espace de noms Kubernetes et un FQDN pour accéder à la plateforme. Telles seront les valeurs utilisées dans cet article:
Espace de noms actif Kubernetes:
Choix utilisateur: my-namespace
FQDN, le nom du réseau Minikube:
Choix utilisateur: forgeops.iam.leviam.fr
Les variables d'environnement suivantes seront également nécessaires, il est nécessaire de les modifier afin de les adapter à l'environnement de travail :
$ PATH_TO_FORGEOPS="/home/a3/forgeops"
$ BRANCH="my-branch"
$ RAM=10240
$ CORE=3
$ SIZE_DISK="40g"
$ VM_DRIVER="docker"
$ TAG="2020.08.07-ZucchiniRicotta.1"
$ NAME_SPACE="my-namespace"
Il est possible de mettre en place deux types de structures:
un CDK (Cloud Developer's Kit)
ou un CDM (Cloud Deployment Model).
Le CDM se déploie exclusivement dans un environnement Cloud à l’inverse du CDK qui peut être déployé sur MiniKube mais aussi dans un cluster partagé sur le Cloud.
Le CDK a pour vocation uniquement le développement comme son nom l’indique(Cloud Developer's Kit) contrairement au CDM, qui procure une implémentation de référence et par-dessus tout robuste de la plateforme ForgeRock.
Il est important de préciser qu'il ne sera pas possible d’utiliser le CDM tel quel pour un déploiement en production. Il sera nécessaire d'utiliser des images Docker personnalisées.
Ici, nous montrerons comment mettre en place un environnement afin de déployer un CDK en utilisant Minikube sous Linux.
Étapes à suivre:
Cloner le dépôt GitHub forgeops.
$ git clone https://github.com/ForgeRock/forgeops.git
Aller dans le répertoire forgeops puis créer une nouvelle branche de travail sur laquelle effectuer les prochaines étapes :
$ cd forgeops
$ git checkout tags/${TAG} -b my-branch
Le tag 2020.08.07-ZucchiniRicotta.1 est la version courante de ForgeRock. C'est la raison pour laquelle il est préférable de créer une branche de travail à partir de ce tag là ou de manière plus générale à partir de la version courante.
Vérifier la branche de travail courante :
$ git branch
master
* my-branch
NB: sur Mac et Linux il est conseillé d’utiliser le gestionnaire de packages Homebrew(source: ForgeRock).
Les versions répertoriées dans le tableau suivant ont été validées pour la création d'images Docker personnalisées pour la ForgeRock Identity Platform. Les versions antérieures et ultérieures fonctionneront probablement. Il est possible d'essayer d'utiliser des versions qui ne figurent pas dans le tableau, il sera néanmoins primordial de les valider. Tous les logiciels tiers suivants sont à installer :
La configuration suivante a été validée pour la création d'images Docker personnalisées pour la ForgeRock Identity Platform :
Version Kubernetes : 1.17.4
Mémoire : 12 Go ou plus
Espace disque : 40 Go ou plus
NB: la RAM de la machine virtuelle utilisée ici est de 12 Go mais uniquement 10 Go ont été alloués par la suite et cela fonctionne correctement.
Étapes à suivre:
Utiliser la commande minikube start pour créer une machine virtuelle minikube. La commande ci-après montre la création d’une machine virtuelle MiniKube avec un cluster Kubernetes capable de construire des images Docker personnalisées pour la ForgeRock Identity Platform.
NB: la documentation forgeops préconise d’utiliser VirtualBox mais dans le cadre de cet article l’utilisation de docker fonctionne très bien. En effet, la virtualisation imbriquée sur des machines virtuelles n’est pas évidente à mettre en place. Par conséquent, utiliser docker permet de pallier le problème.
$ minikube start --memory=${RAM} --cpus=${CORE} --disk-size=${SIZE_DISK} --vm-driver=${VM_DRIVER} \
--bootstrapper kubeadm --kubernetes-version=1.17.4
😄 MINIKUBE V1.18.1 SUR UBUNTU 20.04
✨ UTILISATION DU PILOTE DOCKER BASE SUR LA CONFIGURATION DE L’UTILISATEUR
👍 DÉMARRAGE DU NOEUD DE PLAN DE CONTRÔLE MINIKUBE DANS LE CLUSTER MINIKUBE
🚜 PULLING BASE IMAGE ...
🔥 CREATING DOCKER CONTAINER (CPUS=3, MEMORY=10240MB) ...
> KUBELET.SHA256: 65 B / 65 B [--------------------------] 100.00% ? P/S 0S
> KUBEADM.SHA256: 65 B / 65 B [--------------------------] 100.00% ? P/S 0S
> KUBECTL.SHA256: 65 B / 65 B [--------------------------] 100.00% ? P/S 0S
> KUBEADM: 37.52 MIB / 37.52 MIB [---------------] 100.00% 15.32 MIB P/S 3S
> KUBECTL: 41.48 MIB / 41.48 MIB [---------------] 100.00% 11.62 MIB P/S 4S
> KUBELET: 106.46 MIB / 106.46 MIB [-------------] 100.00% 20.39 MIB P/S 6S
▪ GENERATING CERTIFICATES AND KEYS …
▪ BOOTING UP CONTROL PLANE ...
▪ CONFIGURING RBAC RULES ...
🔎 VERIFYING KUBERNETES COMPONENTS...
▪ USING IMAGE GCR.IO/K8S-MINIKUBE/STORAGE-PROVISIONER:V4
🌟 ENABLED ADDONS: STORAGE-PROVISIONER, DEFAULT-STORAGECLASS
❗ /HOME/LINUXBREW/.LINUXBREW/BIN/KUBECTL EST LA VERSION 1.20.4-DIRTY, QUI PEUT
COMPORTER DES INCOMPATIBILITÉS AVEC KUBERNETES 1.17.4.
▪ WANT KUBECTL V1.17.4? TRY 'MINIKUBE KUBECTL -- GET PODS -A'
🏄 DONE! KUBECTL IS NOW CONFIGURED TO USE "MINIKUBE" CLUSTER AND "DEFAULT"
NAMESPACE BY DEFAULT
A présent, en tapant la commande suivante il est possible d’accéder au tableau de bord Kubernetes exécuté dans le cluster de minikube. Cela permettra de constater que le cluster est activé et opérationnel.
$ minikube dashboard
Kubernetes Dashboard accessible en local
3. Exécuter la commande suivante pour activer le contrôleur d’entrée/sortie qui n’est pas activé par défaut lors de la création de la VM Minikube. Pour schématiser, c’est ce qui permet à minikube de communiquer avec le « reste du monde ». Il est donc impératif d’activer le contrôleur d’entrée/sortie.
$ minikube addons enable ingress
THE 'INGRESS' ADDON IS ENABLED
4. Avant d'essayer de travailler avec la ForgeRock Identity Platform sur Minikube, vous devez implémenter la solution de contournement pour le problème 1568 de Minikube. La solution de contournement permet aux pods déployés sur Minikube de s'atteindre sur le réseau. Exécutez la commande suivante pour contourner le problème ( source: documentation ForgeRock ; pour plus de détails voir ce lien https://github.com/kubernetes/minikube/issues/1568) :
$ minikube ssh sudo ip link set docker0 promisc on
NB: cette commande doit être exécutée à chaque redémarrage de la machine virtuelle minikube sinon les pods déployés ne pourront pas communiquer entre eux.
ForgeRock recommande de déployer la ForgeRock Identity Platform dans un espace de noms autre que l'espace de noms par défaut. Le déploiement sur un espace de noms non par défaut vous permet de séparer les charges de travail dans un cluster. La séparation d'une charge de travail en un espace de noms vous permet de supprimer facilement la charge de travail ; il suffit de supprimer l'espace de noms.
Étapes à suivre:
Créer un espace de noms dans le cluster Kubernetes:
$ kubectl create namespace ${NAME_SPACE}
NAMESPACE/MY-NAMESPACE CREATED
Faire du nouvel espace de noms l’espace de noms actifs:
$ kubens ${NAME_SPACE}
CONTEXT "MINIKUBE" MODIFIED.
ACTIVE NAMESPACE IS "MY-NAMESPACE".
Afin de vérifier que votre espace de nom est bien actif, la commande suivante liste les espaces de noms existants et affiche en couleur celui qui est actif.
$ kubens
default
kube-node-lease
kube-public
kube-system
kubernetes-dashboard
my-namespace
Schéma d'adressage IP
Configuration de la résolution du nom d'hôte pour les serveurs ForgeRock Identity Platform déployés dans l’espace de noms.
Étapes à suivre:
Exécuter la commande minikube ip pour obtenir l’adresse ip du contrôleur d’entrée Minikube :
$ minikube ip
192.168.42.9
Dans le fichier /etc/hosts de la machine locale (dans notre cas la machine virtuelle linux), il faut ajouter le texte suivant:
192.168.42.9 my-namespace.iam.example.com
ForgeRock recommande d'utiliser le moteur Docker intégré lors du développement d'images Docker personnalisées à l'aide de Minikube. Lorsque le moteur de Minikube est utilisé, il n’est pas nécessaire de créer des images Docker sur un moteur local, puis de les pousser vers un registre Docker local ou basé sur le cloud. Au lieu de cela, les images sont créées en utilisant le même moteur Docker que Minikube utilise. Cela rationalise le développement.
Il faut configurer la machine locale comme suit pour utiliser le moteur Docker de Minikube :
Exécuter la commande docker-env dans un terminal:
$ eval $(minikube docker-env)
Empêcher Skaffold de pousser les images Docker vers un répertoire Docker distant:
$ skaffold config set --kube-context minikube local-cluster true
SET VALUE LOCAL-CLUSTER TO TRUE FOR CONTEXT MINIKUBE
NB: skaffold est l’outil qui permet de lancer le cluster Kubernetes.
$ git clone https://github.com/ForgeRock/forgeops.git
$ cd forgeops
$ git checkout tags/${TAG} -b ${BRANCH}
$ git branch
$ minikube start –memory=${RAM} --cpus=${CORE} --disk-size=${SIZE_DISK} \
--vm-driver=${VM_DRIVER} --bootstrapper kubeadm --kubernetes-version=1.17.4
$ minikube addons enable ingress
$ minikube ssh sudo ip link set docker0 promisc on
$ kubectl create namespace ${NAME_SPACE}
$ kubens ${NAME_SPACE}
$ minikube ip
$ eval $(minikube docker-env)
$ skaffold config set --kube-context minikube local-cluster true
L'environnement est maintenant configuré et prêt pour un déploiement.
Une prochaine fois, nous expliquerons comment déployer la plateforme ForgeRock (c'est ici).
Joie et bonheur.
Vos commentaires sont les bienvenus ici!
Avner-Acher Altit