Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
chaoskube — Termina periodicamente pod Kubernetes casuali per testare come i sistemi si comportano in caso di failure arbitrarie dei pod, supportando filtri per namespace, label, annotazioni e pianificazione per esperimenti di chaos controllati. | Kitploit
Strumenti/GitHubGitHub/linki/chaoskube
Ingegneria del Caos
GitHublinki/chaoskube

chaoskube

Termina periodicamente pod Kubernetes casuali per testare come i sistemi si comportano in caso di failure arbitrarie dei pod, supportando filtri per namespace, label, annotazioni e pianificazione per esperimenti di chaos controllati.

Vedi Repository
1.9k12622 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

chaoskube

GitHub release go-doc

chaoskube termina periodicamente pod casuali nel tuo cluster Kubernetes.

chaoskube

Perché

Verifica come il tuo sistema si comporta in caso di guasti arbitrari dei pod.

Esempio

Eseguendolo, per impostazione predefinita terminerà un pod in qualsiasi namespace ogni 10 minuti.

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 consente di filtrare i pod target per namespace, label, annotazioni ed età e di escludere determinati giorni della settimana, fasce orarie e giorni dell'anno dal caos.

Come

Helm

Puoi installare chaoskube con Helm. Segui la Guida rapida di Helm e poi installa la chart chaoskube.

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

Fai riferimento a chaoskube su kubeapps.com per sapere come configurarlo e trovare altre utili chart Helm.

Manifesto grezzo

Fai riferimento al manifesto di esempio. Assicurati di concedere a chaoskube le autorizzazioni appropriate utilizzando il ClusterRole fornito.

Configurazione

Per impostazione predefinita, chaoskube è innocuo e non termina nulla. Una volta convalidato il cluster target, puoi disattivare la modalità dry-run passando il flag --no-dry-run. Puoi anche specificare un intervallo più aggressivo e altri flag supportati per il tuo deployment.

Se stai eseguendo in un cluster Kubernetes e vuoi avere come target lo stesso cluster, tutto ciò che devi fare è questo.

Se vuoi avere come target un cluster diverso o eseguirlo in locale, specifica il cluster tramite il flag --master o fornisci un kubeconfig valido tramite il flag --kubeconfig. Per impostazione predefinita, utilizza il percorso kubeconfig standard nella tua home. Ciò significa che verrà preso di mira qualunque contesto sia attualmente presente lì.

Se vuoi aumentare o diminuire la quantità di caos, modifica l'intervallo tra le terminazioni con il flag --interval. In alternativa, puoi aumentare il numero di repliche del tuo deployment chaoskube.

Ricorda che chaoskube, per impostazione predefinita, termina qualsiasi pod in tutti i tuoi namespace, inclusi i pod di sistema e sé stesso.

chaoskube fornisce un semplice endpoint HTTP che può essere utilizzato per verificare che sia in esecuzione. Può essere usato per i probe di liveness e readiness di Kubernetes. Per impostazione predefinita, ascolta sulla porta 8080. Per disattivarlo, passa --metrics-address="" a chaoskube.

Filtrare i target

Tuttavia, puoi limitare lo spazio di ricerca di chaoskube fornendo selettori di label, annotazioni e namespace, pattern di inclusione/esclusione per i nomi dei pod, oltre a un'impostazione di età minima.

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

Questo seleziona tutti i pod che hanno la label app impostata su mate, la label chaos impostata su qualsiasi valore e la label stage non impostata su production o non impostata.

Puoi filtrare i pod target anche tramite un selettore di namespace.

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

Questo filtrerà i pod nei tre namespace default, staging e testing.

I namespace possono inoltre essere filtrati tramite un selettore di label dei namespace.

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

Questo escluderà tutti i pod dai namespace con la label integration.

Puoi filtrare i pod target tramite il selettore di kind degli OwnerReference.

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

Questo escluderà qualsiasi pod DaemonSet e StatefulSet.

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

Questo includerà solo i pod DaemonSet.

Nota: qualsiasi filtro di inclusione escluderà automaticamente tutti i pod senza un OwnerReference definito.

Puoi filtrare i pod per nome:

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

Ciò farà sì che vengano presi di mira solo i pod il cui nome contiene 'foo' o 'bar' e non contiene 'prod'.

Puoi anche escludere namespace e combinarli con i selettori di label e annotazioni.

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"

Questo limita ulteriormente lo spazio di ricerca del selettore di label precedente, escludendo anche i pod nei namespace kube-system e production e ignorando tutti i pod contrassegnati come critici.

Il selettore di annotazioni può essere utilizzato anche per eseguire chaoskube come componente aggiuntivo del cluster e consentire ai pod di aderire volontariamente alla terminazione come meglio credi. Ad esempio, potresti eseguire chaoskube in questo modo:

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

A meno che tu non utilizzi già quell'annotazione da qualche parte, inizialmente ignorerà tutti i tuoi pod (puoi vedere il numero di candidati in modalità debug). Potresti quindi far aderire selettivamente singoli deployment alla modalità caos annotando i loro pod con 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:
      ...

Puoi escludere i pod avviati di recente utilizzando il flag --minimum-age.

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

Limita il caos

Puoi limitare il momento in cui viene introdotto il caos in base ai giorni della settimana, alle fasce orarie del giorno, ai giorni dell'anno o a tutti questi insieme.

Aggiungi un elenco separato da virgole di giorni della settimana abbreviati tramite l'opzione --excluded-weekdays, un elenco separato da virgole di fasce orarie tramite l'opzione --excluded-times-of-day e/o un elenco separato da virgole di giorni dell'anno tramite l'opzione --excluded-days-of-year e specifica un --timezone in base al quale interpretarli.

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

Usa UTC, Local o scegli un nome di fuso orario dal (database tz (IANA). Se stai testando chaoskube dalla tua macchina locale, Local è la scelta più sensata. Una volta distribuito chaoskube nel tuo cluster, dovresti eseguirlo con un fuso orario specifico, ad esempio quello in cui vive la maggior parte dei membri del tuo team, così che il team e chaoskube abbiano una comprensione comune di quando un determinato giorno della settimana inizia e finisce, per esempio. Se il tuo team è distribuito su più fusi orari, probabilmente è meglio scegliere UTC, che è anche il valore predefinito. Scegliere il fuso orario sbagliato sposta il significato di un determinato giorno della settimana di un paio d'ore tra te e il server.

Flag

Lavori correlati

Esistono diversi altri progetti che ti consentono di creare un po' di caos nel tuo cluster Kubernetes.

  • kube-monkey è una sofisticata chaos monkey basata su pod per Kubernetes. Ogni mattina compila un programma di terminazioni di pod che dovrebbero verificarsi durante il giorno. Consente di specificare un tempo medio tra i guasti su base per-pod, una funzionalità che chaoskube non ha. Può inoltre essere reso consapevole di gruppi di pod che formano un'applicazione, così da poterli trattare in modo speciale, ad esempio terminare tutti i pod di un'applicazione contemporaneamente. kube-mokey consente di filtrare i target a livello globale tramite opzioni di configurazione e di consentire ai pod di aderire al caos tramite annotazioni; permette alle singole app di aderire in modo unico, ad esempio l'app-a può richiedere di terminare un pod ogni giorno della settimana, mentre l'app-b, più coraggiosa, può richiedere di terminare il 50% dei pod. Comprende un file di configurazione simile a quello usato dalla ChaosMonkey di Netflix.
  • PowerfulSeal è davvero un potente strumento per mettere in difficoltà il tuo ambiente Kubernetes. Oltre a terminare i pod, può anche abbattere le tue VM cloud o terminare il tuo daemon Docker. Dispone di un gran numero di opzioni di configurazione per definire cosa può essere terminato e quando. Ha anche una modalità interattiva che ti permette di terminare i pod facilmente.
  • chaos monkey di fabric8: una chaos monkey inclusa come app nella piattaforma Kubernetes di fabric8. Può essere distribuita tramite un'interfaccia UI e segnala le azioni intraprese come messaggio chat e/o notifica desktop. Può essere configurata con un intervallo e un pattern per il nome dei pod a cui i possibili target devono corrispondere.
  • k8aos: uno strumento interattivo che può eseguire una serie di eliminazioni casuali di pod su un intero cluster Kubernetes o limitato a un namespace.

Riconoscimenti

Questo progetto non sarebbe dove è senza le idee e l'aiuto di diversi fantastici collaboratori:

  • Grazie a @twildeboer e @klautcomputing che hanno dato origine all'idea di limitare il caos in determinati periodi, come orari di lavoro o festività, così come alle prime implementazioni di questa funzionalità in #54 e #55.
  • Grazie a @klautcomputing per il primo tentativo di risolvere la mancante funzionalità percentuale e per aver fornito i file di configurazione RBAC.
  • Grazie a @j0sh3rs per aver aggiornato la chart Helm all'ultima versione.
  • Grazie a @klautcomputing, @grosser, @twz123, @hchenxa e @bavarianbidi per i miglioramenti al Dockerfile e alla documentazione in #31, #40 e #58.
  • Grazie a @bakins per aver aggiunto il filtro dell'età minima in #86.
  • Grazie a @bakins per aver aggiunto un health check e le metriche Prometheus in #94 e #97.

Contribuire

Sentiti libero di aprire issue o inviare pull request.

Scarica lo strumento
OpzioneVariabile d'ambienteDescrizionePredefinito
--intervalCHAOSKUBE_INTERVALintervallo tra le terminazioni dei pod10m
--labelsCHAOSKUBE_LABELSselettore di label per filtrare i pod(corrisponde a tutto)
--annotationsCHAOSKUBE_ANNOTATIONSselettore di annotazioni per filtrare i pod(corrisponde a tutto)
--kindsCHAOSKUBE_KINDSselettore di kind del proprietario per filtrare i pod(tutti i kind)
--namespacesCHAOSKUBE_NAMESPACESselettore di namespace per filtrare i pod(tutti i namespace)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELSselettore di label per filtrare i namespace e i relativi pod(tutti i namespace)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMESpattern di espressione regolare per i nomi dei pod da includere(tutti inclusi)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMESpattern di espressione regolare per i nomi dei pod da escludere(nessuno escluso)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSgiorni della settimana in cui il caos deve essere sospeso, es. "Sat,Sun"(nessun giorno della settimana escluso)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYfasce orarie in cui il caos deve essere sospeso, es. "22:00-08:00"(nessuna fascia oraria esclusa)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARgiorni dell'anno in cui il caos deve essere sospeso, es. "Apr1,Dec24"(nessun giorno dell'anno escluso)
--timezoneCHAOSKUBE_TIMEZONEfuso orario dal database tz, es. "America/New_York", "UTC" o "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEDurata massima di esecuzione prima che chaoskube termini-1s (tempo infinito)
--max-killCHAOSKUBE_MAX_KILLSpecifica il numero massimo di pod da terminare per intervallo1
--minimum-ageCHAOSKUBE_MINIMUM_AGEEtà minima per filtrare i pod0s (corrisponde a ogni pod)
--dry-runCHAOSKUBE_DRY_RUNnon terminare i pod, registra solo cosa sarebbe stato fattotrue
--log-formatCHAOSKUBE_LOG_FORMATspecifica il formato dei messaggi di log. Le opzioni sono text e jsontext
--log-callerCHAOSKUBE_LOG_CALLERinclude il nome della funzione chiamante e la posizione nei messaggi di logfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOKL'indirizzo del webhook di Slack per le notifichedisabilitato
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPELimita le chiamate API di Kubernetes al namespace specificato(tutti i namespace)
  • pod-reaper termina i pod in base a un intervallo e a una probabilità di caos configurabile. Consente di specificare i possibili pod target tramite un selettore di label e un namespace. Ha la capacità di arrestarsi correttamente dopo un po' di tempo e quindi potrebbe essere adatto a funzionare bene con gli oggetti Job di Kubernetes. Può anche essere configurato per terminare ogni pod in esecuzione da più tempo di una durata configurabile.
  • kubernetes-pod-chaos-monkey: un killer di pod casuali molto semplice che usa kubectl, scritto in un paio di righe di bash. Dato un namespace e un intervallo, termina un pod casuale in quel namespace a ogni intervallo. Più o meno come funzionava chaoskube all'inizio.
  • kubeinvaders è uno strumento di chaos engineering gamificato per Kubernetes. È come Space Invaders ma gli alieni sono pod o nodi worker.