Edge Chaos
项目描述
Edge Chaos
此项目旨在在边缘云计算环境中引起混乱。
用户可以启动和停止应干扰协同定位应用的程序。目前实现了以下功能
- CPU压力测试(使用
stress-ng) - 网络流量整形(使用
tc)
安装
执行以下步骤安装所有依赖项
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
构建
我们提供了脚本来为所有常见架构(即,amd64、arm32v7和arm64v8)容器化应用程序
./scripts/docker-build.sh $arch
发布
./scripts/docker-release.sh $repository $version
version参数是可选的,默认为$(git rev-parse --short HEAD)。
运行
尽管其主要用例是在容器中运行,但也可以原生启动它
python3 -u -m edgechaos.daemon.run
要作为容器运行
docker run --network=host edgerun/edge-chaos:latest
用法
EdgeChaos作为守护进程(原生、在容器中或在Kubernetes Pod中)运行,并等待接收命令。目前,命令预计将通过Redis Pub/Sub或通过AMQP(即,RabbitMQ)到达。
支持的交互方式
- Redis:守护进程等待通过
edgechaos/$edgechaos_host通道发布的消息。 - RabbitMq:守护进程等待在
edgechaos交换机上发布,路由键为$edgechaos_host的消息。
其中$edgechaos_host设置为环境变量,默认为HOSTNAME。
预期的正文在所有不同的交互方法中相同。守护进程期望消息是一个JSON对象,它具有name、parameters和kind键。其中name表示攻击类型(例如,cpu)和parameters指定攻击所需的进一步信息。其中kind指定是否是start或stop事件。您可以通过查看相应的dataclass ChaosCommand 获取更多详细信息的格式。
重要:正文必须始终相同。这意味着如果您想停止攻击,您必须发送与之前相同的正文,除了将kind设置为stop。
以下两个JSON对象示例展示了如何启动和停止CPU攻击(使用1个核心)。
启动攻击
{
"name": "stress-ng",
"parameters": {
"cpu": 1
},
"kind": "start"
}
停止攻击
{
"name": "stress-ng",
"parameters": {
"cpu": 1
},
"kind": "stop"
}
可用的混沌攻击
以下列出所有可用的攻击,并指定它们的JSON调用对象。
stress-ng
stress-ng 是一个功能强大的压力测试程序,具有280多种不同的攻击类型(压力源)。因此,用户可以指定任何任意组合的参数,这些参数将被传递给 stress-ng。这意味着 parameters 对象中的任何键值对都会被传递给 stress-ng。
stress-ng 攻击可以通过两种方式执行
- 发送一个
start和stop事件,在两种情况下,消息的其余内容必须相同。 - stress-ng 提供了参数,可以在执行一定数量的操作或一定时间后停止压力测试(即,
timeout)。在这种情况下不需要stop事件。
请求应如下所示。将 parameter 的内容传递给 stress-ng,尽管不需要在参数(即,JSON对象键)前加上 -- 前缀。
{
"name": "stress-ng",
"parameters": {
"cpu": 0
},
"kind": "start"
}
注意,在示例攻击中,0 表示 stress-ng 应该使用所有可用的核心。
tc
tc 是一个 Linux 流量整形工具,可以修改网络接口上的流量。此维基条目 提供了对 tc 功能的快速了解。与 stress-ng 一样,我们不希望限制用户在混沌攻击配置中,因此只需将任何参数传递给 tc。
与 stress-ng 攻击不同,每个攻击都需要手动停止。这意味着 edge-chaos 代理不会修改参数,只需传递参数。要停止修改,需要发送正确的 tc 命令(以下示例),并将 kind 键设置为 stop。
重要:手动停止 tc 命令意味着 edge-chaos 代理在关机时不会停止正在执行的命令。每个 tc 规则都必须手动删除。
此外,由于 tc 期望的是参数列表而不是标志,我们期望 parameters 对象只有一个键 (tc),其值是一个字符串列表,这些字符串将被无修改地传递给 tc 命令。
例如,要在 eth0 网络接口的出口添加 100ms 延迟,请发送
{
"name": "tc",
"parameters": {
"tc": [
"qdisc",
"add",
"dev",
"eth0",
"root",
"netem",
"delay",
"100ms"
]
},
"kind": "start"
}
要删除 tc 规则,请发送
{
"name": "tc",
"parameters": {
"tc": [
"qdisc",
"del",
"dev",
"eth0",
"root",
"netem",
"delay",
"100ms"
]
},
"kind": "stop"
}
注意,kind 的值对命令没有影响。但是,建议在攻击后分析时适当地设置它。
环境变量
| 名称 | 默认值 | 描述 |
|---|---|---|
| edgechaos_logging_level | INFO |
设置 日志记录器级别 |
| edgechaos_redis_host | localhost |
Redis 主机 |
| edgechaos_redis_port | 6379 |
Redis 端口 |
| edgechaos_redis_password | N/A | Redis 密码 |
| edgechaos_listener_type | redis |
监听器类型(目前支持:redis,rabbitmq) |
| edgechaos_client_type | redis |
客户端类型(目前支持:redis,rabbitmq) |
| edgechaos_host | $HOSTNAME | 主机名,确定守护进程监听的通道 |
| edgechaos_rabbitmq_url | N/A | RabbitMq 连接 URL |
| edgechaos_rabbitmq_exchange | edgechaos |
用作攻击所使用的交易所名称 |
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建发行版
edgerun-edge-chaos-0.0.4.tar.gz 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 1ea8db532b5e83983f2db77e4672a934aa05a891cea2ce6aa647168b16966615 |
|
| MD5 | c2d955d4604205517201d9ff5c8ecfd9 |
|
| BLAKE2b-256 | 823c7fcb8fe3bb3832db6001cf4bc70255f5f076d340672f07df86ef535b2647 |
edgerun_edge_chaos-0.0.4-py3-none-any.whl 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | bdadbd5de70b4f17a07440af1c49cd1a9204ef557c4d2243f0113446ab6644f5 |
|
| MD5 | 948115b07d889acfefc2991c19ed4466 |
|
| BLAKE2b-256 | 0491bc21b691d788690faa1f72cacecc69d0a096cc648425373b7c5f7cab0cc7 |