Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
chaoskube — Termina periodicamente pods Kubernetes aleatórios para testar como os sistemas se comportam sob falhas arbitrárias de pods, com suporte a filtros de namespace, label, annotation e agendamento para experimentos de caos controlados. | Kitploit
Ferramentas/GitHubGitHub/linki/chaoskube
Engenharia do Caos
GitHublinki/chaoskube

chaoskube

Termina periodicamente pods Kubernetes aleatórios para testar como os sistemas se comportam sob falhas arbitrárias de pods, com suporte a filtros de namespace, label, annotation e agendamento para experimentos de caos controlados.

Ver Repositório
1.9k126há 22 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

chaoskube

GitHub release go-doc

O chaoskube elimina periodicamente pods aleatórios no seu cluster Kubernetes.

chaoskube

Porquê

Teste como o seu sistema se comporta sob falhas arbitrárias de pods.

Exemplo

Executá-lo eliminará um pod em qualquer namespace a cada 10 minutos por padrão.

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
...

O chaoskube permite filtrar os pods alvo por namespaces, labels, annotations e idade, bem como excluir certos dias da semana, horários do dia e dias do ano do caos.

Como

Helm

Você pode instalar o chaoskube com o Helm. Siga o Guia de Início Rápido do Helm e depois instale o chart chaoskube.

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

Consulte chaoskube no kubeapps.com para saber como configurá-lo e para encontrar outros charts Helm úteis.

Manifesto bruto

Consulte o manifesto de exemplo. Certifique-se de conceder ao chaoskube as permissões adequadas usando o ClusterRole fornecido.

Configuração

Por padrão, o chaoskube será amigável e não eliminará nada. Quando você tiver validado o seu cluster alvo, pode desativar o modo dry-run passando a flag --no-dry-run. Você também pode especificar um intervalo mais agressivo e outras flags suportadas para a sua implantação.

Se você estiver executando em um cluster Kubernetes e quiser atingir o mesmo cluster, isso é tudo o que precisa de fazer.

Se você quiser atingir um cluster diferente ou executá-lo localmente, especifique seu cluster por meio da flag --master ou forneça um kubeconfig válido por meio da flag --kubeconfig. Por padrão, ele usa o caminho padrão do kubeconfig no seu diretório pessoal. Isso significa que qualquer contexto atual nesse arquivo será o alvo.

Se você quiser aumentar ou diminuir a quantidade de caos, altere o intervalo entre as eliminações com a flag --interval. Alternativamente, você pode aumentar o número de réplicas do seu deployment chaoskube.

Lembre-se de que, por padrão, o chaoskube elimina qualquer pod em todos os seus namespaces, incluindo pods de sistema e a si mesmo.

O chaoskube fornece um endpoint HTTP simples que pode ser usado para verificar se está em execução. Isso pode ser usado para probes de liveness e readiness do Kubernetes. Por padrão, ele escuta na porta 8080. Para desativar, passe --metrics-address="" ao chaoskube.

Filtrando alvos

No entanto, você pode limitar o espaço de busca do chaoskube fornecendo seletores de label, annotation e namespace, padrões de inclusão/exclusão de nomes de pods, bem como uma configuração de idade mínima.

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

Isso seleciona todos os pods que têm o label app definido como mate, o label chaos definido como qualquer coisa e o label stage não definido como production ou não definido.

Você também pode filtrar os pods alvo pelo seletor de namespace.

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

Isso filtrará os pods nos três namespaces default, staging e testing.

Os namespaces também podem ser filtrados por um seletor de label de namespace.

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

Isso excluirá todos os pods de namespaces com o label integration.

Você pode filtrar os pods alvo pelo seletor de kind dos OwnerReferences.

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

Isso excluirá quaisquer pods de DaemonSet e StatefulSet.

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

Isso incluirá apenas quaisquer pods de DaemonSet.

Observe: qualquer filtro de include excluirá automaticamente todos os pods sem OwnerReference definido.

Você pode filtrar pods pelo nome:

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

Isso fará com que apenas pods cujo nome contenha 'foo' ou 'bar' e não contenha 'prod' sejam alvo.

Você também pode excluir namespaces e combinar com os seletores de label e annotation.

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"

Isso limita ainda mais o espaço de busca do seletor de label acima, excluindo também quaisquer pods nos namespaces kube-system e production, além de ignorar todos os pods marcados como críticos.

O seletor de annotation também pode ser usado para executar o chaoskube como um addon de cluster e permitir que os pods optem por ser terminados como você achar melhor. Por exemplo, você poderia executar o chaoskube assim:

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 menos que você já use essa annotation em algum lugar, isso inicialmente ignorará todos os seus pods (você pode ver o número de candidatos no modo debug). Você poderia então optar seletivamente por deployments individuais no modo caos, anotando seus pods com 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:
      ...

Você pode excluir pods que foram iniciados recentemente usando a flag --minimum-age.

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

Limite o Caos

Você pode limitar o momento em que o caos é introduzido por dias da semana, períodos do dia, dias do ano ou todos juntos.

Adicione uma lista separada por vírgulas de dias da semana abreviados por meio da opção --excluded-weekdays, uma lista separada por vírgulas de períodos do dia por meio da opção --excluded-times-of-day e/ou uma lista separada por vírgulas de dias do ano por meio da opção --excluded-days-of-year e especifique um --timezone para interpretá-los.

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

Use UTC, Local ou escolha um nome de fuso horário do banco de dados de fusos horários (IANA) tz. Se você estiver testando o chaoskube na sua máquina local, Local faz mais sentido. Quando você implantar o chaoskube no seu cluster, deve implantá-lo com um fuso horário específico, por exemplo, onde a maioria dos membros da sua equipe mora, para que tanto a sua equipe quanto o chaoskube tenham um entendimento comum sobre quando um determinado dia da semana começa e termina. Se a sua equipe está distribuída por vários fusos horários, provavelmente é melhor escolher UTC, que também é o padrão. Escolher o fuso horário errado desloca o significado de um determinado dia da semana por algumas horas entre você e o servidor.

Flags

Trabalhos relacionados

Existem vários outros projetos que permitem criar um pouco de caos no seu cluster Kubernetes.

  • kube-monkey é um macaco do caos sofisticado baseado em pods para Kubernetes. Todas as manhãs, ele compila uma programação de terminações de pods que devem ocorrer ao longo do dia. Ele permite especificar um tempo médio entre falhas por pod, um recurso que o chaoskube não possui. Ele também pode estar ciente de grupos de pods que formam uma aplicação, para que possa tratá-los de forma especial, ex.: eliminar todos os pods de uma aplicação de uma só vez. O kube-monkey permite filtrar alvos globalmente por meio de opções de configuração, bem como permitir que pods optem pelo caos por meio de annotations; ele permite que aplicativos individuais optem de sua própria maneira única. Como exemplo, o app-a pode solicitar que ele elimine um pod a cada dia da semana, enquanto o app-b, que é mais corajoso, pode solicitar que ele elimine 50% dos pods. Ele entende um arquivo de configuração semelhante ao usado pelo ChaosMonkey da Netflix.
  • PowerfulSeal é de fato uma ferramenta poderosa para perturbar sua configuração Kubernetes. Além de eliminar pods, ele também pode derrubar suas VMs na nuvem ou matar o seu daemon Docker. Ele tem um vasto número de opções de configuração para definir o que pode ser eliminado e quando. Ele também tem um modo interativo que permite eliminar pods facilmente.
  • macaco do caos do fabric8: Um macaco do caos que vem empacotado como um aplicativo com a plataforma Kubernetes do fabric8. Ele pode ser implantado por meio de uma UI e reporta quaisquer ações tomadas como uma mensagem de chat e/ou notificação de desktop. Ele pode ser configurado com um intervalo e um padrão de nome de pod que os possíveis alvos devem corresponder.
  • k8aos: Uma ferramenta interativa que pode emitir uma série de exclusões aleatórias de pods em todo um cluster Kubernetes ou com escopo em um namespace.

Agradecimentos

Este projeto não estaria onde está sem as ideias e a ajuda de vários colaboradores incríveis:

  • Obrigado a @twildeboer e @klautcomputing, que deram a ideia de limitar o caos durante determinados períodos, como horário comercial ou feriados, bem como as primeiras implementações desse recurso em #54 e #55.
  • Obrigado a @klautcomputing pela primeira tentativa de resolver o recurso de porcentagem que faltava, bem como por fornecer os arquivos de configuração RBAC.
  • Obrigado a @j0sh3rs por trazer o Helm chart para a versão mais recente.
  • Obrigado a @klautcomputing, @grosser, @twz123, @hchenxa e @bavarianbidi pelas melhorias no Dockerfile e na documentação em #31, #40 e #58.
  • Obrigado a @bakins por adicionar o filtro de idade mínima em #86.
  • Obrigado a @bakins por adicionar uma verificação de saúde e métricas do Prometheus em #94 e #97.

Contribuindo

Sinta-se à vontade para criar issues ou enviar pull requests.

Baixar ferramenta
OpçãoAmbienteDescriçãoPadrão
--intervalCHAOSKUBE_INTERVALintervalo entre terminações de pods10m
--labelsCHAOSKUBE_LABELSseletor de label para filtrar pods(corresponde a tudo)
--annotationsCHAOSKUBE_ANNOTATIONSseletor de annotation para filtrar pods(corresponde a tudo)
--kindsCHAOSKUBE_KINDSseletor de kind do owner para filtrar pods(todos os kinds)
--namespacesCHAOSKUBE_NAMESPACESseletor de namespace para filtrar pods(todos os namespaces)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELSseletor de label para filtrar namespaces e seus pods(todos os namespaces)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMESpadrão de expressão regular para nomes de pods a incluir(todos incluídos)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMESpadrão de expressão regular para nomes de pods a excluir(nenhum excluído)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSdias da semana em que o caos deve ser suspenso, ex.: "Sat,Sun"(nenhum dia da semana excluído)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYhorários do dia em que o caos deve ser suspenso, ex.: "22:00-08:00"(nenhum horário do dia excluído)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARdias do ano em que o caos deve ser suspenso, ex.: "Apr1,Dec24"(nenhum dia do ano excluído)
--timezoneCHAOSKUBE_TIMEZONEfuso horário do banco de dados tz, ex.: "America/New_York", "UTC" ou "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEtempo máximo de execução antes de o chaoskube sair-1s (tempo infinito)
--max-killCHAOSKUBE_MAX_KILLespecifica o número máximo de pods a serem terminados por intervalo1
--minimum-ageCHAOSKUBE_MINIMUM_AGEidade mínima para filtrar pods0s (corresponde a todos os pods)
--dry-runCHAOSKUBE_DRY_RUNnão elimine pods, apenas registre o que teria sido feitotrue
--log-formatCHAOSKUBE_LOG_FORMATespecifique o formato das mensagens de log. As opções são text e jsontext
--log-callerCHAOSKUBE_LOG_CALLERinclua o nome e a localização da função chamadora nas mensagens de logfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOKo endereço do webhook do Slack para notificaçõesdesativado
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPEescopo das chamadas à API Kubernetes para o namespace fornecido(todos os namespaces)
  • pod-reaper elimina pods com base em um intervalo e uma probabilidade de caos configurável. Ele permite especificar possíveis pods alvo por meio de um seletor de label e namespace. Ele tem a capacidade de se desligar com sucesso após um tempo e, portanto, pode ser adequado para funcionar bem com objetos Job do Kubernetes. Ele também pode ser configurado para eliminar todos os pods que estão em execução por mais tempo do que uma duração configurável.
  • kubernetes-pod-chaos-monkey: Um eliminador de pods aleatórios muito simples usando kubectl escrito em algumas linhas de bash. Dado um namespace e um intervalo, ele elimina um pod aleatório nesse namespace a cada intervalo. Muito parecido com o que o chaoskube fazia no início.
  • kubeinvaders ferramenta de engenharia do caos gamificada para Kubernetes. É como o Space Invaders, mas os alienígenas são pods ou nós workers.