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 |