C’est un fait les conteneurs sont de plus en plus utilisés, car ils facilitent la création et déploiements des applications. Mais attention, la sécurité des conteneurs est très importante, parce que vous pouvez rapidement créer de graves failles dans votre SI. En effet, par exemple récemment il a été détecté des conteneurs de la registry docker intégrant un ver de cryptojacking. Même si ces conteneurs ont été retirés, il est plus sage de soit construire ces images, soit de les scanner pour en connaître les vulnérabilités.
Dans la série monitoring, je vous propose de mettre en place le monitoring de
l’ingress controller traefik préinstallé dans k3s. En fait sur k3s il est déjà
actif et il ne reste plus qu’à installer le dashboard et à ajouter un job de
scraping dans prometheus.
Activation du monitoring de traefik
Il suffit d’ajouter ces lignes au fichier de conf de Traefik.
On peut vérifier que c’est le cas dans l’occurrence présente dans notre cluster
k3s.
Vous devriez obtenir les lignes suivantes :
Ajout d’un scraper dans prometheus
Je vous renvoie à l’installation de
prometheus si ce n’est pas
encore fait. D’ailleurs nous allons simplement modifier le fichier my-values et
régénérer les manifests.
Éditer le fichier my-values.yaml et à la ligne 1046 ajouter les lignes suivantes
comme ci-dessous :
Maintenant, il faut regénérer les manifests, faire un apply et de relancer
prometheus :
Il faudra certainement également installer le plugin pie chart de grafana avant.
On doit se connecter au pod et lancer la commande suivante (remplacer le nom du
pod):
Quitter le pod et relancer le déploiement :
Au bout de quelques minutes retournez dans grafana et vous devriez avoir votre
dashboard complet !
A l’image de multitail qui permet d’afficher un ou plusieurs fichiers, stern va
vous permettre de concaténer les logs de plusieurs containers en un seul flux.
Découverte de Stern
Pour permettre de déboguer rapidement stern va afficher les logs dans un code
couleur.
Stern va prendre en argument un simple paramètre qui peut-être un mot-clé
commun de vos pods. Par exemple si vous avez les pods suivants :
Et bien en tapant la commande suivante :
Vous obtiendrez les logs de tous les pods contenant le mot blog. De même si un
pod vient à mourir et à être remplacé par un nouveau, stern ajoute
automatiquement ce nouveau flux de logs.
Options importantes
Option
Description
—exclude-container <nom>
Permet d’exclude des containers d’un pod contenant des sidecars
—container-state <status>
Permet de filter en fonction de l’état du pod : running, waiting or terminated. Par défaut running.
—since <temps>
N’affiche que les dernières logs depuis le temps indiqué : 52, 2m, or 3h.
—exclude <chaine>
Permet d’excludre certaines lignes. Vous pouvez en ajouter plusieurs.
—namespace <nom>
Change de namespace
—kubeconfig <fichier-config>
Le fichier de config à prendre en compte
—all-namespaces
Affiche les logs de tous les namespaces
—tail n
N’affiche que les n lignes
—color <status>
Force le jeu de couleur ou pas. auto, always, never
Après vous avoir présenté une méthode utilisant postman/newman je suis parti d’une autre solution et je suis tombé sur dredd qui est nettement plus simple à mettre en oeuvre. En effet il fonctionne sans aucune création de fichier puisqu’il se base sur le fichier de déclaration de l’API.
Installation de Dredd
Dredd est basé sur Node.js et donc avant de l’installer il faut installer nodejs. Je vais vous montrer au passage une méthode d’installation des packages nodejs sans avoir besoin de recourir à sudo.
Ajouter les lignes suivantes à votre fichier .bahsrc
Recharger votre environnement et lancer les commandes suivantes :
Lancer ses premiers tests avec Dredd
Dredd possède une série d’option mais personnellement je préfère utiliser le fichier de configuration. Pour créer ce fichier de configuration il suffit de lancer la commande dredd init et de répondre aux questions. Mais avant on va récupérer le créer le fichier swagger permettant de tester le petstore.
Collez ceci dedans :
Maintenant générons le fichier de configuration de Dredd.
Le fichier de config est crée et se nomme dredd.yml vous pouvez modifier le contenu comme ceci :
Maintenant on peut lancer le test de l’API :
Et voila notre test est terminé. Vous pouvez aller plus loin en lisant la documentation du site
En bon devops, on cherche tous à optimiser les temps de déploiement de nos applications et bien voici une nouveauté du CI de Gitlab qui va permettre d’y parvenir : les DAG pour Directed Acyclic Graphs.
Pouvoir tester ces endpoint d’API fait parti des impératifs avant tout déploiement d’une nouvelle version pour voir si une régression entre autre n’est pas survenue avec cette mise jour.
A ce jour il existe peu d’outils permettant de le faire assez rapidement. L’idée est de pouvoir à partir du fichier de description de votre API générer en quelques clics voir automatiquement les tests. Ce traitement pourra bien sur être intégré dans votre CI via une image docker.
Nous verrons aujourd’hui la solution Postman et de son compagnon Newman.
Installation de Postman sur Ubuntu
Installation via snap
Comme souvent, Postman est disponible en package snap.
Installation depuis le site
Si vous souhaitez installer une version plus récente :
Création d’un lanceur (optionnel)
Prise en main
Faisons un rapide tour du propriétaire :
L’écran de Postman se décompose en plusieurs parties dont voici les plus importantes :
Ici on retrouve les collections qui permet de classer vos requêtes de manière fonctionnelle.
Ici on a sous forme d’onglets les différentes requêtes ouvertes.
Une liste déroulante permettant de choisir le type de requête à envoyer : GET, POST, PUT et à coté l’URL de l’API
Les paramètres à passer à l’URL.
La réponse à la requête
Ici vous trouverez les paramètres de l’environnement.
Importation d’un fichier de définition d’une API
En cliquant sur le menu [import] il est possible de convertir un fichier de définition d’API (swagger, openAPI) en une collection postman
Prenons comme exemple le petstore au format OpenAPI 2. Il est possible de charger des fichiers au format v3
Création d’un environnement
En cliquant sur la roue dentelé dans la zone 6 il est possible de créer des variables d’environnement, ici baseUrl.
Cliquer sur Add et donner un nom à votre environnement
Cliquer dans la première case de la première ligne et taper baseUrl
Dans la case suivante entrer ceci : https://petstore.swagger.io/v2
Cliquer sur Add et fermer cette fenêtre
Dans la liste déroulante environnement choisir prod.
Envoi de notre première requête
Cliquer dans la collection petstore petid POST Find pet by ID
Dans la partie params / Path variable entrer 112273
Cliquer sur send et vous devriez recevoir cette réponse :
Écriture du premier test
Il suffit de cliquer sur la partie Test au bout de la ligne des params :
A coté de l’éditeur se trouve une zone de raccourci (snippets) permettant de créer rapidement des tests
Cliquer sur status Code Code is 200
Vous devriez voir apparaître ces lignes :
Ensuite cliquer sur Response headers Content-Type header check
Vous pouvez tester à tout moment tester en cliquant sur send. Vous devriez obtenir cet affichage :
Automatisation des tests avec Newman
Il est possible d’automatiser les tests avec un outil fourni par postman. Dans un premier temps il faut exporter sa collection sous forme de fichier json. Il faut cliquer sur les … de votre collection et choisir Export. Garder le format proposé et appelez le petstore-collection.json. Avant n’oubliez pas de sauvegarder les modifications de la requête en cliquant sur Save en haut à droite de l’écran.
Plutôt que d’installer Newman en local nous allons l’utiliser sous forme d’image docker:
Vous devriez obtenir ceci :
Dans mon cas le résultat de mon test a partiellement fonctionné avec une assertion négative !!!
Il ne reste plus qu’a écrire vos tests et à intégrer cette étape dan votre CI avant déploiement en prod. De même New peut parfaitement servir à tester votre API avant de le pousser dans votre repo de code.
Le protocole HTTP, simple et efficace, a cependant un énorme défaut : toutes les informations envoyées sont “en clair”. Donc cela signifie qu’elles peuvent être interceptées et modifiées par des personnes plus ou moins bien intentionnées (pirates, gouvernements, fournisseurs d’accès…)
Au départ, je me suis dit d’installer Virtualbox et de monter une VM minimale mais sur mon poste du boulot ça le fait pas. Il me fallait une
solution donc minimaliste. Par défaut au boulot Cywgin est installé et après
lecture de ce
billet je me
suis lancé et à vrai dire tout fonctionne correctement en ajoutant quelques
paramètres dans la config d’Ansible.
Installation d’Ansible cygwin
Télécharger et installer CygWin en
utilisant la commande ci-dessous (changer le nom du setup s’il faut) :
Ouvrez une fenêtre Cygwin en mode administrateur et tapez les commandes
suivantes pour installer Ansible (ça va être long) :
Premiers tests d’ansible Cywin
Dans un autre terminal cygwin (lancement normal)
qui devrait vous retourner :
Vérifions avec un simple appel au module setup d’Ansible.
qui devrait vous retourner :
Si vous avez d’autres produits à installer ne pas oublier de le faire dans un
terminal démarrer en mode admin.
Pour la suite sur Ansible, je vous renvoie sur la lecture de mes autres billets
:
Si vous en avez assez de devoir saisir votre compte et votre mot de passe à chaque fois que vous poussez vos données, alors il est temps d’utiliser le protocole SSH.