Vue normale

Reçu avant avant-hier

Votre pipeline CI/CD GitLab a-t-il des fuites

Par :Korben
9 avril 2026 à 09:30

Si vous bossez avec le CI/CD de GitLab, y'a un angle mort que vous n'avez probablement jamais vérifié : La config de votre pipeline elle-même. Celle qui décide quelles images faire tourner et quels secrets exposer sans oublier les jobs à lancer. Et ça personne ne la scanne !

C'est d'ailleurs exactement cet angle d'attaque qu'ont choisi les pirates derrière l'attaque tj-actions en mars 2025, qui a touché plus de 23 000 organisations en modifiant simplement des tags de version. Ou encore l'attaque sur Trivy , où un scanner de sécurité s'est retrouvé lui-même vérolé. Le schéma est toujours le même : on s'infiltre comme Mario, par la tuyauterie et pas par la porte d'entrée.

Plumber que je vous présente aujourd'hui, est un outil open source en Go qui scanne votre .gitlab-ci.yml et les réglages de votre repo pour détecter les failles de configuration. Vous l'installez via Homebrew (brew tap getplumber/plumber && brew install plumber), vous lancez plumber analyze à la racine de votre projet, et il vous sort un rapport de conformité. 2 minutes chrono, même pas besoin de toucher à votre CI.

Plumber embarque 14 contrôles de sécurité qui couvrent les erreurs de configuration les plus courantes. Ça détecte les images Docker taguées latest (le classique qui traîne dans 80% des projets), les branches pas protégées, les curl | bash sans vérification, et même les jobs de sécurité qu'on a désactivés en douce avec un petit allow_failure: true. Vous savez, le réglage foireux qui fait que votre pipeline affiche tout vert... alors qu'il ne scanne plus rien du tout !

Côté output, Plumber génère une sorte de liste d'ingrédients de votre pipeline, un peu comme l'étiquette sur un paquet de bouffe mais pour votre chaîne de déploiement. Ça vous dit exactement quelles images, quels scripts et quelles dépendances tournent dans vos jobs. Le tout dans un format standard que d'autres outils de sécu peuvent digérer.

Pour l'intégrer directement dans votre pipeline GitLab, c'est 2 lignes :

include:
 - component: gitlab.com/getplumber/plumber/plumber@v0.1.30

Ça tourne à chaque push et chaque merge request. Y'a même un mode qui poste un commentaire de conformité directement dans la MR. Seul piège : il faut un token GitLab avec des droits Maintainer, sinon certains checks tournent dans le vide sans rien remonter. Une fois le token bien configuré, ça roule.

Après c'est GitLab only pour l'instant donc si vous êtes full GitHub, c'est pas pour vous (pour le moment). Et le projet est encore jeune donc faut pas s'attendre à une couverture totale non plus. Quoi qu'il en soit, ça va bien plus loin que Checkov sur la partie pipeline. Les 2 sont assez complémentaires d'ailleurs.

Pour en savoir plus c'est par ici : Plumber

Maintenant : monitorer toute sa stack Docker depuis un seul conteneur

Maintenant est un logiciel libre de monitoring d'infrastructure, conçu pour les administrateurs et développeurs qui font tourner des conteneurs Docker ou Kubernetes. Il se déploie sous la forme d'un unique conteneur qui auto-découvre et surveille l'ensemble d'une stack sans configuration préalable.

Le projet est publié sous licence AGPL-3.0. Le code source complet est disponible sur GitHub, y compris les fonctionnalités de l'édition Pro.

Le problème

Quand on auto-héberge une vingtaine (ou une quarantaine) de conteneurs sur un VPS, le monitoring finit souvent en une collection d'outils déconnectés : Uptime Kuma pour les checks HTTP, Healthchecks.io pour les tâches cron, un script bash pour les certificats SSL, Portainer ouvert dans un onglet pour voir si les conteneurs tournent, et un docker pull manuel de temps en temps pour vérifier les mises à jour. Cinq outils, zéro communication entre eux, aucune vue d'ensemble.

Maintenant regroupe tout ça dans un seul processus.

Sommaire

Ce que ça fait

Le conteneur se branche sur le socket Docker en lecture seule (il ne crée, ne démarre et n'arrête jamais de conteneurs) et découvre automatiquement tout ce qui tourne. À partir de là :

  • Suivi des conteneurs : états (running, stopped, restarting), health checks Docker natifs, détection de boucles de redémarrage, groupement automatique par projet Compose
  • Métriques de ressources : CPU, mémoire, réseau et I/O disque par conteneur, avec une vue "top consumers" pour identifier rapidement les gourmands
  • Monitoring d'endpoints : sondage actif HTTP/TCP avec suivi des temps de réponse, codes de statut, correspondance de mots-clés, seuils configurables
  • Monitoring de cron jobs : URLs de heartbeat uniques — votre tâche planifiée envoie un ping, Maintenant vous alerte si le ping n'arrive pas
  • Certificats SSL/TLS : détection automatique depuis les endpoints HTTPS, vérification de chaîne complète, alertes avant expiration (30j, 14j, 7j, 3j, 1j)
  • Détection des mises à jour : scan des registres OCI (Docker Hub, GHCR, etc.), comparaison de digests et de tags semver, signalement des sauts de version critiques, commandes de mise à jour et rollback intégrées (Compose-aware)
  • Analyse de sécurité réseau : détection automatique des configurations dangereuses — ports de bases de données exposés sur 0.0.0.0, conteneurs en mode privileged ou host-network, et pour Kubernetes, NodePort/LoadBalancer sans NetworkPolicy
  • Page de statut publique : intégrée, personnalisable, reflète automatiquement l'état des monitors
  • Serveur MCP : serveur Model Context Protocol intégré avec authentification OAuth2, pour requêter l'état de l'infrastructure depuis un assistant IA compatible

Stack technique

Le choix technique central est la simplicité de déploiement :

  • Binaire unique Go compilé statiquement, avec le frontend Vue 3 + TypeScript + Tailwind embarqué via embed.FS
  • SQLite en mode WAL pour le stockage — pas de base de données externe, pas de Redis, pas de file de messages
  • SSE (Server-Sent Events) pour les mises à jour temps réel dans le navigateur — plus simple que les WebSockets, fonctionne à travers n'importe quel reverse proxy sans configuration particulière
  • Moins de 20 Mo de RAM au repos
  • Image multi-architecture : amd64 et arm64
  • PWA : installable sur mobile

L'authentification n'est volontairement pas intégrée — Maintenant est conçu pour fonctionner derrière un reverse proxy avec middleware d'authentification (Authelia, Authentik, OAuth2 Proxy…), exactement comme Dozzle ou Prometheus. Les endpoints de heartbeat (/ping/{uuid}) et la page de statut publique sont prévus pour être accessibles sans authentification.

La configuration est possible soit par labels Docker sur les conteneurs, soit par l'interface web :

labels:
  maintenant.endpoint.http: "https://api:3000/health"
  maintenant.endpoint.interval: "15s"
  maintenant.alert.severity: "critical"
  maintenant.group: "production"

Support Kubernetes

Maintenant détecte automatiquement s'il tourne dans un cluster Kubernetes (via le compte de service) ou sur Docker (via le socket). Un ClusterRole read-only (maintenant-reader) suffit. Le monitoring se fait au niveau des workloads (Deployments, DaemonSets, StatefulSets) avec filtrage par namespace.

Modèle économique

Le projet suit un modèle open-core :

L'édition Community est complète et utilisable sans restriction pour un usage solo : monitoring conteneurs, endpoints, heartbeats, certificats, mises à jour, sécurité réseau, page de statut, support Kubernetes, alertes par webhooks et Discord, API REST + SSE.

L'édition Pro (9 €/mois ou 90 €/an) ajoute des canaux d'alerte supplémentaires (Slack, Microsoft Teams, Email/SMTP), la détection de CVE via OSV.dev, un tableau de bord de posture sécurité, la gestion d'incidents, les fenêtres de maintenance et les notifications aux abonnés de la page de statut.

L'intégralité du code source, y compris les fonctionnalités Pro, est visible sur GitHub sous AGPL-3.0. Le tier Pro est déverrouillé au runtime par une clé de licence — même binaire, même image Docker.

Déploiement rapide

services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"
    restart: unless-stopped

volumes:
  maintenant-data:

Trente secondes plus tard, l'interface affiche tous vos conteneurs. Aucune configuration nécessaire.

Comparaison avec les outils existants

Maintenant Uptime Kuma Portainer Dozzle Prometheus+Grafana
Auto-découverte conteneurs Oui Non Oui Oui Via cAdvisor
Monitoring endpoints HTTP/TCP Oui Oui Non Non Via Blackbox
Monitoring cron/heartbeat Oui Oui Non Non Non
Certificats SSL Oui Oui Non Non Via exporter
Métriques CPU/RAM/réseau Oui Non Limité Non Oui
Détection mises à jour images Oui Non Oui Non Non
Sécurité réseau Oui Non Non Non Non
Page de statut Oui Oui Non Non Non
Dépendances externes Aucune Node.js Docker API Docker API 3+ conteneurs

Commentaires : voir le flux Atom ouvrir dans le navigateur

Jurassic Park dans votre cluster k8s

Par :Korben
13 mars 2026 à 08:04

Le navigateur 3D de Jurassic Park, vous savez, celui avec lequel Lex hackait le parc en 1993 pendant que les vélociraptors grattaient à la porte... bah quelqu'un vient de le recréer, mais pour Kubernetes.

Le projet s'appelle k8s-unix-system et c'est exactement ce que vous imaginez. Vos namespaces deviennent des îles flottantes roses, vos pods des blocs 3D colorés et vous naviguez dans le tout en vue FPS avec WASD + souris. Genre comme Quake, mais pour surveiller vos pods.

Les pods Kubernetes version Jurassic Park ( Source )

Un pod vert c'est un pod qui tourne, jaune c'est en attente, et rouge c'est erreur ou CrashLoopBackOff, bref le truc que personne n'aime voir. Le truc sympa, c'est que la hauteur des blocs augmente avec le nombre de restarts. Du coup, le pod qui galère depuis ce matin, c'est celui qui ressemble à une tour bien haute. Par contre, attention, les pods en erreur tremblent carrément (pas nerveux hein, c'est voulu) et les pods running bougent doucement... c'est plutôt zen je trouve.

Les nodes, eux, ne sont pas mélangés avec les namespaces. Ils ont leur propre île bleu foncé à part, avec des cubes cyan pour ceux qui sont Ready et rouge pour les NotReady. Survolez un node et hop, vous avez son nom, son statut, sa capacité CPU et sa RAM affichées dans un tooltip. Les services, eux, sont visualisés sous forme d'arcs cyan semi-transparents qui connectent les pods entre eux en topologie étoile. Tout fonctionne, suffit de demander, on l'a ! (reeeef ^^)

Les namespaces et nodes, chacun sur leur île ( Source )

Pour lancer le truc, un Docker one-liner suffit (attention quand même, ça monte votre kubeconfig en lecture seule dans le conteneur, donc à réserver au cluster de dev) :

docker run --rm -it -v ~/.kube/config:/root/.kube/config:ro -p 8080:8080 ghcr.io/jlandersen/k8s-unix-system:main

Vous ouvrez localhost:8080 dans Chrome et vous volez à travers votre cluster avec la barre espace pour monter, Ctrl pour descendre, Shift pour accélérer. Tout est en temps réel grâce à la Watch API K8s, du coup si un pod tombe pendant que vous survolez son île, vous le voyez passer au rouge direct. Finalement, c'est kubectl get pods mais en 100 fois plus fun.

C'est codé en Go côté serveur et Three.js pour la 3D dans le navigateur. Le dev derrière bosse chez LEGO (ça ne s'invente pas). Et d'ailleurs si vous êtes du genre à recycler vos smartphones en cluster , ça ferait un combo d'enfer pour frimer devant les collègues.

Bref, vous allez pouvoir enfin lâcher un « Je connais ce système... il fonctionne sous Unix ! » sans mentir.

Solved "colima start showing FATA[0004] error starting vm: error at starting: exit status 1"

1 janvier 2026 à 12:29

In this article, we will see how to fix colima error  " FATA[0004] error starting vm: error at starting: exit status 1"  which you may encounter during starting colima instance. It is a free and lightweight command line tool for MacOS and Linux based systems that provides docker container runtimes to locally run the workload with minimal setup required. Colima has been popularly used by many developers and programmers as an alternative to Docker desktop. Although it is very easy to use as compared to other docker runtimes available out there but occasionally we may get hit by error sometimes.

One of such error you can see is "FATA[0004] error starting vm: error at starting: exit status 1"  during startup of the instance if it did not stopped or deleted properly before due to whatever reasons. In my case, after installing colima through homebrew, I started VM instance and then using it to run my workload locally but after completion of my work I forgot to shutdown or delete properly and ended up terminating it.

 

Solved "colima start showing FATA[0004] error starting vm: error at starting: exit status 1"

Solved "colima start showing FATA[0004] error starting vm: error at starting: exit status 1"

Also Read: Solved "HPA and KEDA(ScaledObject) terminating manually scaled up pods in Kubernetes"

After termination of instance, when I tried to start it again using same colima start command, it was throwing below error on output and failed to start.

cyberithub@macos1066 % /opt/homebrew/opt/colima/bin/colima start -f
INFO[0000] starting colima
INFO[0000] runtime docker
INFO[0000] starting ...
> Using the existing instance "colima"
> Starting the instance "colima" with internal VM driver "vz"
> [hostagent] hostagent socket created at /Users/cyberithub/.colima/_lima/colima/ha.sock
> [hostagent] Starting VZ (hint: to watch the boot progress, see "/Users/cyberithub/.colima/_lima/colima/serial*.log")
> exiting, status={Running:false Degraded:false Exiting:true Errors:[] SSHLocalPort:0 CloudInitProgress:<nil>} (hint: see "/Users/cyberithub/.colima/_lima/colima/ha.stderr.log")
FATA[0004] error starting vm: error at 'starting': exit status 1

Above error usually occurs when the existing instance did not deleted or shutdown properly. In case you also face this kind of situation then to fix above error and to start instance, you have to first delete the instance and all its settings using colima delete command as shown below.

cyberithub@macos1066 % colima delete
are you sure you want to delete colima and all settings? [y/N] y
INFO[0003] deleting colima
INFO[0004] done

And then only you can again try to start vm instance by using colima start command.  You may notice that this time it will start without any error as shown below.

cyberithub@macos1066 % /opt/homebrew/opt/colima/bin/colima start -f
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0002] creating and starting ...          context=vm
INFO[0021] provisioning ...                   context=docker
INFO[0023] starting ...                       context=docker
INFO[0025] done 
INFO[0025] keeping Colima in the foreground, press ctrl+c to exit...

And that's it. You can now continue with your work. You can also explore other colima commands such as colima stop to stop any running vm.

cyberithub@macos1066 % colima stop

To check current running status of colima, run colima status command as shown below.

cyberithub@macos1066 % colima status

Hope it helps !! Please let me know your feedback in comment box !!

❌