Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
chaoskube — Периодически завершает случайные поды Kubernetes, чтобы проверить, как системы ведут себя при произвольных сбоях подов; поддерживает фильтры по namespace, label, annotation и расписанию для контролируемых хаос-экспериментов. | Kitploit
Инструменты/GitHubGitHub/linki/chaoskube
Инженерия ХаосаТоп в Инженерия Хаоса №9
GitHublinki/chaoskube

chaoskube

Периодически завершает случайные поды Kubernetes, чтобы проверить, как системы ведут себя при произвольных сбоях подов; поддерживает фильтры по namespace, label, annotation и расписанию для контролируемых хаос-экспериментов.

Репозиторий
1.9k126342 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

chaoskube

GitHub release go-doc

chaoskube периодически убивает случайные поды в вашем кластере Kubernetes.

chaoskube

Зачем

Проверьте, как ваша система ведёт себя при произвольных сбоях подов.

Пример

При запуске он по умолчанию убивает под в любом namespace каждые 10 минут.

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 позволяет фильтровать целевые поды по namespaces, меткам, аннотациям и возрасту, а также исключать определённые дни недели, время суток и дни года из хаоса.

Как

Helm

Вы можете установить chaoskube с помощью Helm. Следуйте краткому руководству Helm и затем установите чарт chaoskube.

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

Обратитесь к chaoskube на kubeapps.com, чтобы узнать, как его настроить, и найти другие полезные Helm-чарты.

Обычный манифест

Обратитесь к примеру манифеста. Убедитесь, что вы предоставили chaoskube соответствующие разрешения с помощью предоставленного ClusterRole.

Конфигурация

По умолчанию chaoskube ведёт себя дружелюбно и ничего не убивает. Когда вы проверите целевой кластер, вы можете отключить режим dry-run, передав флаг --no-dry-run. Вы также можете указать более агрессивный интервал и другие поддерживаемые флаги для вашего развёртывания.

Если вы работаете в кластере Kubernetes и хотите воздействовать на тот же кластер, то этого достаточно.

Если вы хотите воздействовать на другой кластер или запустить его локально, укажите ваш кластер через флаг --master или предоставьте действующий kubeconfig через флаг --kubeconfig. По умолчанию используется стандартный путь kubeconfig в вашем домашнем каталоге. Это означает, что будет выбран текущий контекст.

Если вы хотите увеличить или уменьшить количество хаоса, измените интервал между убийствами с помощью флага --interval. Кроме того, вы можете увеличить количество реплик вашего развёртывания chaoskube.

Помните, что chaoskube по умолчанию убивает любой под во всех ваших namespaces, включая системные поды и сам себя.

chaoskube предоставляет простой HTTP-эндпоинт, который можно использовать для проверки его работы. Его можно использовать для проверок liveness и readiness в Kubernetes. По умолчанию он слушает порт 8080. Чтобы отключить, передайте --metrics-address="" в chaoskube.

Фильтрация целей

Однако вы можете ограничить пространство поиска chaoskube, указав селекторы меток, аннотаций и namespaces, шаблоны включения/исключения имён подов, а также настройку минимального возраста.

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

Это выбирает все поды, у которых метка app установлена в mate, метка chaos установлена в любое значение, а метка stage не установлена в production или не задана.

Вы также можете фильтровать целевые поды по селектору namespace.

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

Это отфильтрует поды в трёх namespaces: default, staging и testing.

Namespaces также можно фильтровать с помощью селектора меток namespace.

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

Это исключит все поды из namespaces с меткой integration.

Вы можете фильтровать целевые поды по селектору kind OwnerReference.

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

Это исключит любые поды DaemonSet и StatefulSet.

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

Это включит только поды DaemonSet.

Обратите внимание: любой фильтр include автоматически исключит все поды, у которых не определён OwnerReference.

Вы можете фильтровать поды по имени:

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

Это приведёт к тому, что целями станут только поды, чьё имя содержит 'foo' или 'bar' и не содержит 'prod'.

Вы также можете исключать namespaces и комбинировать их с селекторами меток и аннотаций.

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"

Это дополнительно ограничивает пространство поиска вышеуказанного селектора меток, исключая также любые поды в namespaces kube-system и production, а также игнорируя все поды, помеченные как критичные.

Селектор аннотаций также можно использовать для запуска chaoskube как аддона кластера и разрешать подам выбирать участие в завершении так, как вы считаете нужным. Например, вы можете запустить chaoskube так:

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

Если вы ещё нигде не используете эту аннотацию, сначала будут игнорироваться все ваши поды (вы можете увидеть количество кандидатов в режиме debug). Затем вы можете выборочно включать отдельные Deployment в режим хаоса, аннотируя их поды значением 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:
      ...

Вы можете исключить недавно запущенные поды с помощью флага --minimum-age.

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

Ограничение хаоса

Вы можете ограничить время, когда вносится хаос, по дням недели, периодам времени в течение суток, дням года или всем им вместе.

Укажите список сокращённых дней недели через запятую с помощью опции --excluded-weekdays, список периодов времени через запятую с помощью опции --excluded-times-of-day и/или список дней года через запятую с помощью опции --excluded-days-of-year, а также укажите --timezone, в котором их интерпретировать.

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

Используйте UTC, Local или выберите название часового пояса из (IANA) tz database. Если вы тестируете chaoskube с локальной машины, то Local имеет наибольший смысл. После развёртывания chaoskube в кластере следует развернуть его с конкретным часовым поясом, например, там, где живёт большинство членов вашей команды, чтобы и ваша команда, и chaoskube одинаково понимали, когда начинается и заканчивается конкретный день недели. Если ваша команда распределена по нескольким часовым поясам, вероятно, лучше выбрать UTC, который также используется по умолчанию. Неправильный выбор часового пояса сдвигает значение конкретного дня недели на несколько часов между вами и сервером.

Флаги

Связанные проекты

Существует несколько других проектов, которые позволяют создавать хаос в вашем кластере Kubernetes.

  • kube-monkey — это сложная обезьяна хаоса на основе подов для Kubernetes. Каждое утро она составляет расписание завершений подов, которые должны произойти в течение дня. Она позволяет задавать среднее время между сбоями для каждого пода — функция, которой chaoskube не хватает. Она также может учитывать группы подов, образующих приложение, чтобы обрабатывать их особым образом, например, убивать все поды приложения сразу. kube-mokey позволяет фильтровать цели глобально через параметры конфигурации, а также позволяет подам opt-in к хаосу через аннотации. Он позволяет отдельным приложениям opt-in своим уникальным способом: например, приложение A может запросить убийство одного пода каждый будний день, тогда как более смелое приложение B может запросить убийство 50% подов. Он понимает конфигурационный файл, аналогичный используемому Netflix ChaosMonkey.
  • PowerfulSeal — это действительно мощный инструмент для создания неполадок в вашем Kubernetes-окружении. Помимо убийства подов, он может выводить из строя ваши облачные виртуальные машины или убивать ваш Docker-демон. У него огромное количество вариантов конфигурации, определяющих, что и когда может быть убито. Также у него есть интерактивный режим, который позволяет легко убивать поды.
  • fabric8's chaos monkey: обезьяна хаоса, которая поставляется в качестве приложения вместе с Kubernetes-платформой fabric8. Её можно развернуть через UI, и она сообщает о всех выполненных действиях в виде сообщения в чат и/или уведомления на рабочем столе. Её можно настроить с указанием интервала и шаблона имени пода, которому должны соответствовать возможные цели.
  • k8aos: интерактивный инструмент, который может выполнять серию случайных удалений подов во всём кластере Kubernetes или в пределах одного namespace.

Благодарности

Этот проект не был бы таким, каким он является, без идей и помощи нескольких замечательных участников:

  • Спасибо @twildeboer и @klautcomputing, которые подали идею ограничивать хаос в определённые периоды, такие как рабочее время или праздники, а также за первые реализации этой функции в #54 и #55.
  • Спасибо @klautcomputing за первую попытку реализовать недостающую функцию процентов, а также за предоставление конфигурационных файлов RBAC.
  • Спасибо @j0sh3rs за обновление Helm-чарта до последней версии.
  • Спасибо @klautcomputing, @grosser, @twz123, @hchenxa и @bavarianbidi за улучшения Dockerfile и документации в #31, #40 и #58.
  • Спасибо @bakins за добавление фильтра минимального возраста в #86.
  • Спасибо @bakins за добавление проверки работоспособности и метрик Prometheus в #94 и #97.

Участие в разработке

Не стесняйтесь создавать issues или отправлять pull requests.

Скачать инструмент
OptionEnvironmentDescriptionDefault
--intervalCHAOSKUBE_INTERVALинтервал между завершением подов10m
--labelsCHAOSKUBE_LABELSселектор меток для фильтрации подов(соответствует всему)
--annotationsCHAOSKUBE_ANNOTATIONSселектор аннотаций для фильтрации подов(соответствует всему)
--kindsCHAOSKUBE_KINDSселектор kind владельца для фильтрации подов(все kinds)
--namespacesCHAOSKUBE_NAMESPACESселектор namespace для фильтрации подов(все namespaces)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELSселектор меток для фильтрации namespaces и их подов(все namespaces)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMESшаблон регулярного выражения для имён подов, которые следует включить(все включены)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMESшаблон регулярного выражения для имён подов, которые следует исключить(ничего не исключено)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSдни недели, когда хаос должен быть приостановлен, например "Sat,Sun"(ни один день недели не исключён)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYвремя суток, когда хаос должен быть приостановлен, например "22:00-08:00"(ни один период времени не исключён)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARдни года, когда хаос должен быть приостановлен, например "Apr1,Dec24"(ни один день года не исключён)
--timezoneCHAOSKUBE_TIMEZONEчасовой пояс из tz database, например "America/New_York", "UTC" или "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEмаксимальное время работы до выхода chaoskube-1s (бесконечное время)
--max-killCHAOSKUBE_MAX_KILLуказывает максимальное количество подов, завершаемых за интервал1
--minimum-ageCHAOSKUBE_MINIMUM_AGEминимальный возраст для фильтрации подов0s (соответствует каждому поду)
--dry-runCHAOSKUBE_DRY_RUNне убивать поды, только логировать то, что было бы сделаноtrue
--log-formatCHAOSKUBE_LOG_FORMATзадаёт формат сообщений лога. Варианты: text и jsontext
--log-callerCHAOSKUBE_LOG_CALLERвключать имя и расположение вызывающей функции в сообщения логаfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOKадрес slack webhook для уведомленийотключено
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPEограничить вызовы Kubernetes API указанным namespace(все namespaces)
  • pod-reaper убивает поды на основе интервала и настраиваемой вероятности хаоса. Он позволяет указать возможные целевые поды с помощью селектора меток и namespace. Он умеет корректно завершать себя через некоторое время и поэтому может хорошо подходить для работы с объектами Kubernetes Job. Его также можно настроить на убийство каждого пода, работающего дольше настраиваемого времени.
  • kubernetes-pod-chaos-monkey: очень простой убийца случайных подов с использованием kubectl, написанный на паре строк bash. При заданных namespace и интервале он убивает случайный под в этом namespace через каждый интервал. Примерно так chaoskube работал в начале.
  • kubeinvaders — геймифицированный инструмент chaos engineering для Kubernetes. Он похож на Space Invaders, но в роли пришельцев — поды или рабочие узлы.