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

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

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

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

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

Категории

Все категории
Loading categories
chaostoolkit-kubernetes — Расширение драйвера Kubernetes для API проверок и действий Chaos Toolkit | Kitploit
Инструменты/GitHubGitHub/chaostoolkit/chaostoolkit-kubernetes
Безопасность облачной инфраструктурыБезопасность контейнеровСетевая безопасностьИнженерия Хаоса
GitHubchaostoolkit/chaostoolkit-kubernetes

chaostoolkit-kubernetes

Расширение драйвера Kubernetes для API проверок и действий Chaos Toolkit

Репозиторий

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Сайт
191752 лет назадПроверено Kitploit

Расширения Chaos Toolkit для Kubernetes

Build Python versions Downloads

Этот проект содержит активности, такие как пробы (probes) и действия (actions), которые вы можете вызывать из своего эксперимента через Chaos Toolkit для проведения Chaos Engineering против API Kubernetes: уничтожение пода, удаление statefulset или узла...

Установка

Чтобы использовать этот пакет в своих экспериментах, он должен быть установлен в Python-окружении, где уже находится chaostoolkit.

root@kitploit:~
$ pip install chaostoolkit-kubernetes

Использование

Чтобы использовать пробы и действия из этого пакета, добавьте следующее в файл вашего эксперимента:

root@kitploit:~
{
    "title": "Do we remain available in face of pod going down?",
    "description": "We expect Kubernetes to handle the situation gracefully when a pod goes down",
    "tags": ["kubernetes"],
    "steady-state-hypothesis": {
        "title": "Verifying service remains healthy",
        "probes": [
            {
                "name": "all-our-microservices-should-be-healthy",
                "type": "probe",
                "tolerance": true,
                "provider": {
                    "type": "python",
                    "module": "chaosk8s.probes",
                    "func": "microservice_available_and_healthy",
                    "arguments": {
                        "name": "myapp"
                    }
                }
            }
        ]
    },
    "method": [
        {
            "type": "action",
            "name": "terminate-db-pod",
            "provider": {
                "type": "python",
                "module": "chaosk8s.pod.actions",
                "func": "terminate_pods",
                "arguments": {
                    "label_selector": "app=my-app",
                    "name_pattern": "my-app-[0-9]$",
                    "rand": true
                }
            },
            "pauses": {
                "after": 5
            }
        }
    ]
}

Вот и всё! Обратите внимание, как действие даёт вам возможность случайным образом убить один под.

Пожалуйста, изучите документацию, чтобы узнать о существующих пробах и действиях.

Низкоуровневые инъекции отказов

Обратите внимание, что для стрессоров сети, CPU и памяти мы полагаемся на замечательный проект Chaos Mesh, который предоставляет отличный интерфейс для инъекции этих отказов.

Чтобы использовать их, вам сначала нужно установить Chaos Mesh в ваш кластер.

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

Использование ~/.kube/config

Если в вашем файле ~/.kube/config есть корректная запись для кластера, на который вы хотите воздействовать, то ничего делать не нужно.

Вы можете указать KUBECONFIG, чтобы задать другое местоположение.

root@kitploit:~
$ export KUBECONFIG=/tmp/my-config

Указание контекста Kubernetes

Довольно часто ваша конфигурация Kubernetes содержит несколько записей, и вам нужно определить ту, которая будет использоваться как контекст по умолчанию, когда он не указан явно.

Вы, конечно, можете изменить контекст по умолчанию с помощью kubectl config use-context KUBERNETES_CONTEXT, но также можете указать его явно в эксперименте следующим образом:

root@kitploit:~
{
    "title": "Do we remain available in face of pod going down?",
    "description": "We expect Kubernetes to handle the situation gracefully when a pod goes down",
    "tags": ["kubernetes"],
    "secrets": {
        "k8s": {
            "KUBERNETES_CONTEXT": "..."
        }
    },
    "steady-state-hypothesis": {
        "title": "Verifying service remains healthy",
        "probes": [
            {
                "name": "all-our-microservices-should-be-healthy",
                "type": "probe",
                "tolerance": true,
                "secrets": ["k8s"],
                "provider": {
                    "type": "python",
                    "module": "chaosk8s.probes",
                    "func": "microservice_available_and_healthy",
                    "arguments": {
                        "name": "myapp"
                    }
                }
            }
        ]
    },
    "method": [
        {
            "type": "action",
            "name": "terminate-db-pod",
            "secrets": ["k8s"],
            "provider": {
                "type": "python",
                "module": "chaosk8s.pod.actions",
                "func": "terminate_pods",
                "arguments": {
                    "label_selector": "app=my-app",
                    "name_pattern": "my-app-[0-9]$",
                    "rand": true
                }
            },
            "pauses": {
                "after": 5
            }
        }
    ]
}

Вам нужно указать секретный ключ KUBERNETES_CONTEXT с именем контекста, который вы хотите использовать в эксперименте. Убедитесь, что вы также передаёте действиям и пробам записи секретов, которые им нужны: "secrets": ["k8s"].

Использование сервисного аккаунта пода

При запуске из пода (а не с вашей локальной машины или, например, из CI) файл ./.kube/config не существует. Вместо этого учётные данные можно найти в /var/run/secrets/kubernetes.io/serviceaccount/token.

Чтобы расширение узнало об этом, просто установите CHAOSTOOLKIT_IN_POD через переменную окружения в спецификации пода:

root@kitploit:~
env:
- name: CHAOSTOOLKIT_IN_POD
  value: "true"

При использовании этой переменной окружения предполагается, что эксперимент воздействует на тот же кластер, из которого он запускается. Если ваш эксперимент воздействует на другой кластер, вам не следует устанавливать эту переменную. Вместо этого вы можете смонтировать том с конфигурацией Kubernetes для целевого кластера и указать KUBECONFIG, чтобы он указывал на неё.

Передача всех учётных данных в эксперименте

Наконец, вы можете явно передать всю необходимую информацию об учётных данных в эксперимент следующим образом:

Использование API-ключа

root@kitploit:~
{
    "secrets": {
        "kubernetes": {
            "KUBERNETES_HOST": "http://somehost",
            "KUBERNETES_API_KEY": {
                "type": "env",
                "key": "SOME_ENV_VAR"
            }
        }
    }
}

Использование имени пользователя и пароля

root@kitploit:~
{
    "secrets": {
        "kubernetes": {
            "KUBERNETES_HOST": "http://somehost",
            "KUBERNETES_USERNAME": {
                "type": "env",
                "key": "SOME_ENV_VAR"
            },
            "KUBERNETES_PASSWORD": {
                "type": "env",
                "key": "SOME_ENV_VAR"
            }
        }
    }
}

Использование TLS-ключа/сертификата

root@kitploit:~
{
    "secrets": {
        "kubernetes": {
            "KUBERNETES_HOST": "http://somehost",
            "KUBERNETES_CERT_FILE": {
                "type": "env",
                "key": "SOME_ENV_VAR"
            },
            "KUBERNETES_KEY_FILE": {
                "type": "env",
                "key": "SOME_ENV_VAR"
            }
        }
    }
}

Аутентификация в управляемых кластерах Kubernetes

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

Google Cloud Platform

В дополнение к вашим учётным данным Kubernetes (через файл ~/.kube/config) вам необходимо аутентифицироваться на самой платформе Google Cloud. Обычно это делается через:

root@kitploit:~
$ gcloud auth login

Но это также можно сделать, определив переменную окружения GOOGLE_APPLICATION_CREDENTIALS.

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

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

Пожалуйста, обратитесь к разделу форматирование для получения дополнительной информации о стандартах форматирования.

Проекты Chaos Toolkit требуют, чтобы все участники подписывали Developer Certificate of Origin для каждого коммита, который они хотели бы объединить в ветку master репозитория. Пожалуйста, убедитесь, что вы можете соблюдать правила DCO перед отправкой PR.

Разработка

Если вы хотите разрабатывать этот проект, убедитесь, что установили зависимости для разработки. Но сначала установите PDM, а затем установите зависимости.

root@kitploit:~
$ pdm install

Теперь вы можете редактировать файлы, и они будут автоматически подхватываться вашим окружением, даже при локальном запуске из команды chaos.

Тесты

Чтобы запустить тесты проекта, выполните следующее:

root@kitploit:~
$ pdm run tests

Форматирование и линтинг

Мы используем ruff как для линтинга, так и для форматирования кода этого репозитория.

Перед отправкой Pull Request мы рекомендуем выполнить форматирование вашего кода с помощью:

root@kitploit:~
$ pdm run format

Это автоматически отформатирует любой код, который не соответствует стандартам форматирования.

Поскольку некоторые вещи не обрабатываются форматированием, мы также рекомендуем выполнить:

root@kitploit:~
$ pdm run lint

Это позволит выявить неиспользуемые операторы импорта, слишком длинные строки и т.д.

Скачать инструмент