Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
chaoskube — 定期终止随机的 Kubernetes Pod,以测试系统在任意 Pod 故障下的表现,支持命名空间、标签、注解和调度过滤,用于受控的混沌实验。 | Kitploit
工具/GitHubGitHub/linki/chaoskube
混沌工程混沌工程 分类第 9 名
GitHublinki/chaoskube

chaoskube

定期终止随机的 Kubernetes Pod,以测试系统在任意 Pod 故障下的表现,支持命名空间、标签、注解和调度过滤,用于受控的混沌实验。

查看仓库
1.9k127682个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

chaoskube

GitHub release go-doc

chaoskube 会定期在您的 Kubernetes 集群中杀死随机 Pod。

chaoskube

为什么

测试您的系统在任意 Pod 故障下的表现。

示例

默认情况下,运行它每 10 分钟会在任何命名空间中杀死一个 Pod。

$ 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 允许按命名空间、标签、注解和年龄过滤目标 Pod,以及从混沌中排除特定的星期几、一天中的时间段和一年中的日期。

如何使用

Helm

您可以使用 Helm 安装 chaoskube。遵循 Helm 快速入门指南,然后安装 chaoskube chart。

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

请参阅 kubeapps.com 上的 chaoskube 了解如何配置它以及查找其他有用的 Helm charts。

原始 manifest

请参阅 示例 manifest。确保使用提供的 ClusterRole 为 chaoskube 授予适当的权限。

配置

默认情况下,chaoskube 会很友好,不会杀死任何东西。当您验证了目标集群后,可以通过传入 --no-dry-run 标志来禁用 dry-run 模式。您也可以为您的部署指定更激进的间隔和其他支持的标志。

如果您在 Kubernetes 集群中运行并希望以同一集群为目标,那么这就是您需要做的全部。

如果您想以不同的集群为目标或想在本地运行它,请通过 --master 标志指定您的集群,或通过 --kubeconfig 标志提供有效的 kubeconfig。默认情况下,它使用您主目录中的标准 kubeconfig 路径。这意味着,其中的任何当前上下文都将成为目标。

如果您想增加或减少混乱程度,可以使用 --interval 标志更改杀死间隔。或者,您可以增加 chaoskube 部署的副本数量。

请记住,默认情况下 chaoskube 会杀死您所有命名空间中的任何 Pod,包括系统 Pod 和它自身。

chaoskube 提供一个简单的 HTTP 端点,可用于检查它是否正在运行。这可用于 Kubernetes 存活和就绪探针。默认情况下,它监听 8080 端口。要禁用它,请将 --metrics-address="" 传给 chaoskube。

过滤目标

但是,您可以通过提供标签、注解和命名空间选择器、Pod 名称包含/排除模式以及最小年龄设置来限制 chaoskube 的搜索空间。

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

这会选择所有具有标签 app 为 mate、标签 chaos 为任意值,且标签 stage 未设置为 production 或未设置的 Pod。

您也可以按命名空间选择器过滤目标 Pod。

$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter       namespaces="default,staging,testing"

这将过滤 default、staging 和 testing 三个命名空间中的 Pod。

命名空间还可以通过命名空间标签选择器进行过滤。

$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter       namespaceLabels="!integration"

这将排除所有来自带有标签 integration 的命名空间的 Pod。

您可以通过 OwnerReference 的 kind 选择器过滤目标 Pod。

$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

这将排除任何 DaemonSet 和 StatefulSet Pod。

$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter       kinds="DaemonSet"

这将只包含任何 DaemonSet Pod。

请注意:任何 include 过滤器都会自动排除所有未定义 OwnerReference 的 Pod。

您可以通过名称过滤 Pod:

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

这将导致只有名称包含 'foo' 或 'bar' 且 不 包含 'prod' 的 Pod 成为目标。

您还可以排除命名空间,并与标签和注解选择器混合搭配。

$ 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"

这通过排除 kube-system 和 production 命名空间中的任何 Pod 以及忽略所有标记为关键的 Pod,进一步限制了上述标签选择器的搜索空间。

注解选择器也可用于将 chaoskube 作为集群插件运行,并允许 Pod 按照您的需要选择被终止。例如,您可以这样运行 chaoskube:

$ 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

除非您已经在某处使用该注解,否则这将最初忽略您的所有 Pod(您可以在调试模式下看到候选数量)。然后,您可以通过使用 chaos.alpha.kubernetes.io/enabled=true 注解其 Pod,有选择地让各个 Deployment 选择进入混乱模式。

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

您可以使用 --minimum-age 标志排除最近启动的 Pod。

$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

限制混沌

您可以通过星期几、一天中的时间段、一年中的日期或它们全部一起来限制引入混乱的时间。

通过 --excluded-weekdays 选项添加逗号分隔的星期几缩写列表,通过 --excluded-times-of-day 选项添加逗号分隔的时间段列表,和/或通过 --excluded-days-of-year 选项添加逗号分隔的一年中的日期列表,并指定解释它们的 --timezone。

$ 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 数据库 中选择一个时区名称。如果您在本地机器上测试 chaoskube,那么 Local 最有意义。一旦您将 chaoskube 部署到集群中,您应该使用特定的时区进行部署,例如,大多数团队成员所在的时区,这样您的团队和 chaoskube 就能对特定工作日的开始和结束时间有共同的理解。如果您的团队成员分布在多个时区,最好选择 UTC,这也是默认值。选择错误的时区会使特定工作日的意思在您和服务器之间偏移几个小时。

下载工具