Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
chaoskube — Termine périodiquement des pods Kubernetes aléatoires pour tester le comportement des systèmes face à des pannes de pods arbitraires, avec prise en charge des filtres par namespace, label, annotation et planification pour des expériences de chaos contrôlées. | Kitploit
Outils/GitHubGitHub/linki/chaoskube
Ingénierie du ChaosTop en Ingénierie du Chaos n°9
GitHublinki/chaoskube

chaoskube

Termine périodiquement des pods Kubernetes aléatoires pour tester le comportement des systèmes face à des pannes de pods arbitraires, avec prise en charge des filtres par namespace, label, annotation et planification pour des expériences de chaos contrôlées.

Voir le dépôt
1.9k12634il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

chaoskube

GitHub release go-doc

chaoskube tue périodiquement des pods aléatoires dans votre cluster Kubernetes.

chaoskube

Pourquoi

Tester comment votre système se comporte lors de défaillances de pods arbitraires.

Exemple

Par défaut, son exécution tue un pod dans chaque namespace toutes les 10 minutes.

root@kitploit:~
$ chaoskube
INFO[0000] starting up              dryRun=true interval=10m0s version=v0.21.0
INFO[0000] connecting to cluster    master="https://kube.you.me" serverVersion=v1.10.5+coreos.0
INFO[0000] setting pod filter       annotations= labels= minimumAge=0s namespaces=
INFO[0000] setting quiet times      daysOfYear="[]" timesOfDay="[]" weekdays="[]"
INFO[0000] setting timezone         location=UTC name=UTC offset=0
INFO[0001] terminating pod          name=kube-dns-v20-6ikos namespace=kube-system
INFO[0601] terminating pod          name=nginx-701339712-u4fr3 namespace=chaoskube
INFO[1201] terminating pod          name=kube-proxy-gke-earthcoin-pool-3-5ee87f80-n72s namespace=kube-system
INFO[1802] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[2402] terminating pod          name=heapster-v1.2.0-1107848163-bhtcw namespace=kube-system
INFO[3003] terminating pod          name=l7-default-backend-v1.0-o2hc9 namespace=kube-system
INFO[3603] terminating pod          name=heapster-v1.2.0-1107848163-jlfcd namespace=kube-system
INFO[4203] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[4804] terminating pod          name=nginx-701339712-51nt8 namespace=chaoskube
...

chaoskube permet de filtrer les pods cibles par namespaces, labels, annotations et âge ainsi que d'exclure certains jours de la semaine, certaines heures de la journée et certains jours de l'année du chaos.

Comment

Helm

Vous pouvez installer chaoskube avec Helm. Suivez le Guide de démarrage rapide de Helm puis installez le chart chaoskube.

root@kitploit:~
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace

Référez-vous à chaoskube sur kubeapps.com pour apprendre comment le configurer et pour trouver d'autres charts Helm utiles.

Manifest brut

Référez-vous au manifest d'exemple. Assurez-vous de donner à chaoskube les permissions appropriées en utilisant le ClusterRole fourni.

Configuration

Par défaut, chaoskube est inoffensif et ne tue rien. Lorsque vous avez validé votre cluster cible, vous pouvez désactiver le mode dry-run en passant l'option --no-dry-run. Vous pouvez également spécifier un intervalle plus agressif et d'autres options prises en charge pour votre déploiement.

Si vous exécutez dans un cluster Kubernetes et que vous voulez cibler ce même cluster, c'est tout ce que vous avez à faire.

Si vous voulez cibler un autre cluster ou l'exécuter localement, spécifiez votre cluster via l'option --master ou fournissez un kubeconfig valide via l'option --kubeconfig. Par défaut, il utilise le chemin standard de votre kubeconfig dans votre répertoire personnel. Cela signifie que le contexte actuel qui s'y trouve sera ciblé.

Si vous voulez augmenter ou diminuer la quantité de chaos, modifiez l'intervalle entre les mises à mort avec l'option --interval. Vous pouvez également augmenter le nombre de réplicas de votre déploiement chaoskube.

Rappelez-vous que chaoskube, par défaut, tue tous les pods dans tous vos namespaces, y compris les pods système et lui-même.

chaoskube fournit un simple point de terminaison HTTP qui peut être utilisé pour vérifier qu'il est en cours d'exécution. Cela peut être utilisé pour les sondes de liveness et de readiness Kubernetes. Par défaut, il écoute sur le port 8080. Pour le désactiver, passez --metrics-address="" à chaoskube.

Filtrer les cibles

Cependant, vous pouvez limiter l'espace de recherche de chaoskube en fournissant des sélecteurs de labels, d'annotations et de namespaces, des motifs d'inclusion/exclusion de noms de pods, ainsi qu'un réglage d'âge minimum.

root@kitploit:~
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter       labels="app=mate,chaos,stage!=production"

Cela sélectionne tous les pods qui ont le label app défini sur mate, le label chaos défini sur n'importe quelle valeur et le label stage non défini sur production ou non défini.

Vous pouvez également filtrer les pods cibles par sélecteur de namespaces.

root@kitploit:~
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter       namespaces="default,staging,testing"

Cela filtrera les pods dans les trois namespaces default, staging et testing.

Les namespaces peuvent en outre être filtrés par un sélecteur de labels sur les namespaces.

root@kitploit:~
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter       namespaceLabels="!integration"

Cela exclura tous les pods des namespaces ayant le label integration.

Vous pouvez filtrer les pods cibles par un sélecteur de type d'OwnerReference.

root@kitploit:~
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

Cela exclura tous les pods de DaemonSet et StatefulSet.

root@kitploit:~
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter       kinds="DaemonSet"

Cela n'inclura que les pods de DaemonSet.

Veuillez noter : tout filtre include exclura automatiquement tous les pods sans OwnerReference défini.

Vous pouvez filtrer les pods par nom :

root@kitploit:~
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter       excludedPodNames=prod includedPodNames="foo|bar"

Cela fera en sorte que seuls les pods dont le nom contient 'foo' ou 'bar' et ne contient pas 'prod' soient ciblés.

Vous pouvez également exclure des namespaces et combiner cela avec les sélecteurs de labels et d'annotations.

root@kitploit:~
$ chaoskube \
    --labels 'app=mate,chaos,stage!=production' \
    --annotations '!scheduler.alpha.kubernetes.io/critical-pod' \
    --namespaces '!kube-system,!production'
...
INFO[0000] setting pod filter       annotations="!scheduler.alpha.kubernetes.io/critical-pod" labels="app=mate,chaos,stage!=production" namespaces="!kube-system,!production"

Cela limite davantage l'espace de recherche du sélecteur de labels ci-dessus en excluant également tous les pods des namespaces kube-system et production, ainsi qu'en ignorant tous les pods marqués comme critiques.

Le sélecteur d'annotations peut également être utilisé pour exécuter chaoskube en tant qu'addon de cluster et permettre aux pods de choisir d'être terminés comme bon vous semble. Par exemple, vous pourriez exécuter chaoskube comme ceci :

root@kitploit:~
$ chaoskube --annotations 'chaos.alpha.kubernetes.io/enabled=true' --debug
...
INFO[0000] setting pod filter       annotations="chaos.alpha.kubernetes.io/enabled=true"
DEBU[0000] found candidates         count=0
DEBU[0000] no victim found

Sauf si vous utilisez déjà cette annotation quelque part, cela ignorera initialement tous vos pods (vous pouvez voir le nombre de candidats en mode debug). Vous pourriez ensuite activer sélectivement certains déploiements en mode chaos en annotant leurs pods avec chaos.alpha.kubernetes.io/enabled=true.

root@kitploit:~
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    metadata:
      annotations:
        chaos.alpha.kubernetes.io/enabled: "true"
    spec:
      ...

Vous pouvez exclure les pods qui ont récemment démarré en utilisant l'option --minimum-age.

root@kitploit:~
$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

Limiter le chaos

Vous pouvez limiter le moment où le chaos est introduit par jours de la semaine, périodes de la journée, jours de l'année ou tous ensemble.

Ajoutez une liste séparée par des virgules de jours de la semaine abrégés via l'option --excluded-weekdays, une liste séparée par des virgules de périodes de la journée via l'option --excluded-times-of-day et/ou une liste séparée par des virgules de jours de l'année via l'option --excluded-days-of-year, et spécifiez un --timezone pour les interpréter.

root@kitploit:~
$ chaoskube \
    --excluded-weekdays=Sat,Sun \
    --excluded-times-of-day=22:00-08:00,11:00-13:00 \
    --excluded-days-of-year=Apr1,Dec24 \
    --timezone=Europe/Berlin
...
INFO[0000] setting quiet times      daysOfYear="[Apr 1 Dec24]" timesOfDay="[22:00-08:00 11:00-13:00]" weekdays="[Saturday Sunday]"
INFO[0000] setting timezone         location=Europe/Berlin name=CET offset=1

Utilisez UTC, Local ou choisissez un nom de fuseau horaire dans la base de données tz (IANA). Si vous testez chaoskube depuis votre machine locale, Local est le plus logique. Une fois que vous déployez chaoskube dans votre cluster, vous devriez le déployer avec un fuseau horaire spécifique, par exemple là où vit la plupart des membres de votre équipe, afin que votre équipe et chaoskube aient une compréhension commune du début et de la fin d'un jour de la semaine particulier, par exemple. Si votre équipe est répartie sur plusieurs fuseaux horaires, il est probablement préférable de choisir UTC, qui est également la valeur par défaut. Choisir le mauvais fuseau horaire décale la signification d'un jour de la semaine particulier de quelques heures entre vous et le serveur.

Options

Travaux connexes

Il existe plusieurs autres projets qui vous permettent de créer du chaos dans votre cluster Kubernetes.

  • kube-monkey est un chaos monkey sophistiqué basé sur les pods pour Kubernetes. Chaque matin, il compile un calendrier des terminaisons de pods qui devraient se produire tout au long de la journée. Il permet de spécifier un temps moyen entre défaillances par pod, une fonctionnalité qui manque à chaoskube. Il peut également être rendu conscient de groupes de pods formant une application afin de les traiter spécialement, par exemple tuer tous les pods d'une application en une seule fois. kube-mokey permet de filtrer les cibles globalement via des options de configuration et permet également aux pods de choisir le chaos via des annotations ; il permet à chaque application de choisir à sa manière unique, par exemple, l'application A peut demander de tuer un pod chaque jour de la semaine, tandis que l'application B, plus courageuse, peut demander de tuer 50 % des pods. Il comprend un fichier de configuration similaire à celui utilisé par ChaosMonkey de Netflix.
  • PowerfulSeal est en effet un outil puissant pour perturber votre environnement Kubernetes. En plus de tuer des pods, il peut également supprimer vos machines virtuelles cloud ou tuer votre démon Docker. Il dispose d'un vaste nombre d'options de configuration pour définir ce qui peut être tué et quand. Il dispose également d'un mode interactif qui vous permet de tuer facilement des pods.
  • Le chaos monkey de fabric8 : un chaos monkey fourni en tant qu'application avec la plateforme Kubernetes de fabric8. Il peut être déployé via une interface utilisateur et signale toutes les actions effectuées sous forme de message de chat et/ou de notification de bureau. Il peut être configuré avec un intervalle et un motif de nom de pod auquel les cibles possibles doivent correspondre.
  • k8aos : un outil interactif qui peut émettre une série de suppressions aléatoires de pods sur un cluster Kubernetes entier ou limité à un namespace.

Remerciements

Ce projet ne serait pas là où il est sans les idées et l'aide de plusieurs contributeurs formidables :

  • Merci à @twildeboer et @klautcomputing qui ont suscité l'idée de limiter le chaos à certaines périodes, comme les heures de bureau ou les jours fériés, ainsi que les premières implémentations de cette fonctionnalité dans #54 et #55.
  • Merci à @klautcomputing pour la première tentative de résolution de la fonctionnalité de pourcentage manquante, ainsi que pour avoir fourni les fichiers de configuration RBAC.
  • Merci à @j0sh3rs pour avoir mis à jour le chart Helm vers la dernière version.
  • Merci à @klautcomputing, @grosser, @twz123, @hchenxa et @bavarianbidi pour les améliorations du Dockerfile et de la documentation dans #31, #40 et #58.
  • Merci à @bakins pour l'ajout du filtre d'âge minimum dans #86.
  • Merci à @bakins pour l'ajout d'une sonde de santé et des métriques Prometheus dans #94 et #97.

Contribuer

N'hésitez pas à créer des issues ou à soumettre des pull requests.

Télécharger l’outil
OptionEnvironnementDescriptionDéfaut
--intervalCHAOSKUBE_INTERVALintervalle entre les terminaisons de pods10m
--labelsCHAOSKUBE_LABELSsélecteur de labels pour filtrer les pods(correspond à tout)
--annotationsCHAOSKUBE_ANNOTATIONSsélecteur d'annotations pour filtrer les pods(correspond à tout)
--kindsCHAOSKUBE_KINDSsélecteur de type de propriétaire pour filtrer les pods(tous les types)
--namespacesCHAOSKUBE_NAMESPACESsélecteur de namespaces pour filtrer les pods(tous les namespaces)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELSsélecteur de labels pour filtrer les namespaces et leurs pods(tous les namespaces)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMESexpression régulière pour les noms de pods à inclure(tous inclus)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMESexpression régulière pour les noms de pods à exclure(aucun exclu)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSjours de la semaine où le chaos est suspendu, p. ex. "Sat,Sun"(aucun jour exclu)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYheures de la journée où le chaos est suspendu, p. ex. "22:00-08:00"(aucune heure exclue)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARjours de l'année où le chaos est suspendu, p. ex. "Apr1,Dec24"(aucun jour exclu)
--timezoneCHAOSKUBE_TIMEZONEfuseau horaire de la base tz, p. ex. "America/New_York", "UTC" ou "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEdurée d'exécution maximale avant la sortie de chaoskube-1s (durée infinie)
--max-killCHAOSKUBE_MAX_KILLnombre maximum de pods à terminer par intervalle1
--minimum-ageCHAOSKUBE_MINIMUM_AGEâge minimum pour filtrer les pods0s (correspond à chaque pod)
--dry-runCHAOSKUBE_DRY_RUNne pas tuer les pods, seulement journaliser ce qui aurait été faittrue
--log-formatCHAOSKUBE_LOG_FORMATformat des messages de journal. Options : text et jsontext
--log-callerCHAOSKUBE_LOG_CALLERinclure le nom de la fonction appelante et son emplacement dans les journauxfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOKadresse du webhook Slack pour les notificationsdésactivé
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPElimite les appels API Kubernetes au namespace donné(tous les namespaces)
  • pod-reaper tue des pods en fonction d'un intervalle et d'une probabilité de chaos configurable. Il permet de spécifier les pods cibles possibles via un sélecteur de labels et un namespace. Il a la capacité de s'arrêter correctement après un certain temps et peut donc convenir aux objets Job Kubernetes. Il peut également être configuré pour tuer chaque pod qui s'exécute depuis plus d'une durée configurable.
  • kubernetes-pod-chaos-monkey : un tueur de pods aléatoires très simple utilisant kubectl écrit en quelques lignes de bash. Étant donné un namespace et un intervalle, il tue un pod aléatoire dans ce namespace à chaque intervalle. À peu près comme chaoskube au début.
  • kubeinvaders est un outil d'ingénierie du chaos gamifié pour Kubernetes. C'est comme Space Invaders, mais les aliens sont des pods ou des nœuds workers.