Mon setup
Prérequis du hardware par Redhat
- 4 virtual CPUs (vCPUs)
- 8 GB de mémoire
- 35 GB d’espace de stockage
Config de mon Serveur Bare-metal
- Debian 12/bookworm
- 16 GB de RAM
- 8 CPUs
Version CRC
- CRC version: 2.12.0+74565a6
- OpenShift version: 4.11.18
- Podman version: 4.2.0
Un peu de Blabla
CRC
Red Hat CodeReady Containers apporte un cluster Openshift (en version 4.1 ou plus) minimal préconfiguré sur votre serveur ou ordinateur de bureau, tant que ce dernier a les capacités nécessaires pour accueillir ce cluster. Pour ma part, les prérequis matériels qu’a annoncé RedHat a suffit pour l’installation de CRC seulement, par contre ca a commencé à être gourmand lorsque j’ai voulu installé d’autres outils derrière. Pour ce REX, je vais utiliser une application légère.
Le but de ce REX
- Déployer un cluster Openshift ou OKD afin de pour pouvoir tester les conteneurs qu’on déploierait dessus, là en l’occurence ca sera un opérateur Trivy + un POD Nginx.
- D’avoir déployé sur un Debian pourrait permettre à ceux qui voudraient se lancer, d’éviter d’éventuels problématiques que j’ai pu rencontrer.
Liens utiles
- Voici le github de CRC: https://github.com/crc-org/crc
- La documentation: https://crc.dev/crc/#introducing_gsg
Déploiement
Prérequis
- Vérifier que sur le serveur sur lequel vous déployer, le port 80 et 443 ne sont pas déjà écoutés par une autre application style Nginx, Apache2, HAProxy etc..
- J’ai commencé à installer les paquets nécessaires au déploiement de CRC
|
|
On utilise donc l’hyperviseur qemu-kvm qui nous permet de déployer des VMs
- Avoir un compte RedHat et se connecter dessus.
- Téléchargement du binaire CRC depuis le site redhat.com https://developers.redhat.com/products/openshift-local/overview. Il faut cliquer sur “Install Openshift on your laptop” et ensuite choisir l’OS Linux, puis cliquer sur Download Openshift Local. Extraire l’archive puis copier le binaire crc dans votre /usr/local/bin (vérifier que ce chemin est présent dans votre $PATH)
- Téléchargement du pull secret
Config, démarrage et debug de CRC, 2 façons:
- Config et démarrage classique:
|
|
- Config, démarrage et Debug depuis la VM déployée:
Normalement, il n’est pas nécessaire de se connecter sur notre VM mais si besoin, nous pouvons le faire pour diagnostiquer et debugguer plus en détail.
|
|
Explication des commandes:
-
crc config set network-mode user: j’utilise le mode user comme mode de réseau CRC, ce qui me permet d’utiliser l’ip 127.0.0.1 au lieu d’avoir l’ip fixée par défaut par CRC (qui est 192.168.130.11). Autrement ça ne fonctionnait pas de mon côté, je n’ai pas pu creuser le pourquoi du comment, ça jouait peut-être avec mes règles iptables, mais pas sûr…
-
crc setup: j’initialise mon cluster
-
crc start -c 8 -m 12000 -p pull-secret –log-level debug: je démarre ma machine virtuelle
- -c 8 -m 12000: je demande 8 vCPUs et 12 GB de RAM à attribuer sur la machine virtuelle qui va être lancée
- -p pull-secret: Je lui précise le fichier pull-secret à prendre en compte car pour pouvoir lancer CRC, il avoir un user Openshift valide et le renseigner
- –log-level debug: je demande un niveau de log de sortie en mode debug. Attention, c’est très verbeux, et il ne faut pas prendre en compte toutes les “erreurs” qu’on aperçoit, car souvent ça concerne le temps d’attendre (timeout) que l’étape en question se finisse. Si notre commande crc start se termine avec succès, nous pouvons voir le lien de notre interface Openshift. Nous voyons également les identifiants pour se connecter à notre API Openshift via la commande oc ou kubectl.
-
crc status: On vérifie le statut de notre cluster
|
|
- crc console –credentials: cette commande nous indique comment se connecter à notre cluster via la command-line OC avec deux types d’utilisateur (kubeadmin ou developer)
|
|
- oc login -u kubeadmin -p
https://api.crc.testing:6443 : on se connecte à notre cluster via l’utilisateur kubeadmin
|
|
- oc projects: on liste les projets créés par défaut
|
|
- debug dans la VM:
Utiliser la console Openshift en GUI
Redirection
Lorsqu’on déploie CRC, nous pouvons remarquer que notre machine écoute désormais sur les ports 80, 443 et 6443. Vu que le DNS préconfiguré de notre cluster Openshift n’est pas déclaré publiquement, pour accéder à la console en mode GUI je dois modifier le fichier /etc/hosts de mon PC local pour rediriger notre demande de requête DNS vers ma machine distante, je renseigne donc l’IP publique de cette dernière.
|
|
Accès et déploiement d’un opérateur
-
J’accède à ma console via mon navigateur en utilisant cet URL https://console-openshift-console.apps-crc.testing, ce qui me redirigera vers la deuxième URL d’authentification que j’ai renseigné dans mon /etc/hosts, et j’utilise mes identifiants d’admin:
-
Voici la page d’accueil lorsqu’on vient de se connecter:
-
Je clique sur OperatorHub dans le menu à gauche, je cherche Trivy comme opérateur à installer et je l’installe:
-
Une fois installé, je peux vérifier dans Installed Operators et je clique sur mon composant pour avoir plus de détails:
Utilisation de Trivy
Trivy est un logiciel OpenSource qui scanne des OS ou des configurations IaC (Infrastructure-as-Code) et détecte leurs potentiels vulnérabilités. Le fonctionnement est relativement simple, il suffit d’indiquer à Trivy le type d’éléments à scanner, dans mon cas ce sera une image Docker que je vais déployer via une définition yaml.
-
Je me suis basé sur ce tutoriel: https://www.programmersought.com/article/429010837103/
-
Vu que mon Trivy est installé via la GUI, je passe direct à l’exposition de mon service Trivy:
|
|
- Je stocke ensuite ma route dans une variable TRIVY_ADDR:
|
|
- Je déploie le yaml proposé:
|
|
|
|
-
ce qui se passe:
- Je crée un Namespace nommé trivytest
- Je crée un Pod avec une image nginx en version 1.18 (qui est donc une ancienne version et du coup idéal pour faire apparaître des vulnérabilités sur mon rapport de scan Trivy)
-
Vérification:
|
|
Mon namespace et mon POD sont bien créés
- Je peux maintenant atteindre ma route et compter le nombre de vulnérabilités total ou par catégorie: LOW, HIGH, CRITICAL
|
|
Fin
Pour finir, si on en revient à notre cluster CRC, en refaisant un crc status je peux apercevoir la RAM et l’espace disque qui ont augmenté du à notre déploiement:
|
|