Chaos Mesh网络延迟原理探索

本文涉及的产品
性能测试 PTS,5000VUM额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 在使用Chaos Mesh的过程中发现, 注入网络类故障可以做到对pod的无感知注入,好奇是如何实现的。 所以这里对网络故障注入进行简单的探索,以便更深层的了解故障注入。

背景

在使用Chaos Mesh的过程中发现, 注入网络类故障可以做到对pod的无感知注入,好奇是如何实现的。 所以这里对网络故障注入进行简单的探索,以便更深层的了解故障注入。

分析步骤

故障注入

首先需要准备好Chaos MeshKubernetes环境,使用平台或yaml的方式来注入一个网络延迟的故障。故障注入配置如下:

kind: NetworkChaos
apiVersion: chaos-mesh.org/v1alpha1
metadata:
  namespace: default
  name: ceshi-delay-3
  annotations:
    experiment.chaos-mesh.org/pause: 'false'
spec:
  selector:
    namespaces:
      - default
    labelSelectors:
      app: ceshi # 通过label匹配需要注入的pod
  mode: all
  action: delay # 网络故障类型,延迟
  duration: 120m # 持续时间, 这个为了持续观察,所以配置的时间较长
  delay:
    latency: 50ms # 延迟时间
    correlation: '0.5' # 表示延迟时间的时间长度与前一次延迟时长的相关性    
    jitter: 1ms # 表示延迟时间的变化范围    
  direction: to
  externalTargets:
    - baidu.com # 应用的目标

首先获取节点以及pod的相关信息。

# 获取容器ID 
export DOCKER_NAME=ceshi
export DOCKER_ID=`docker ps | grep $DOCKER_NAME| grep -v pause | awk '{print $1}'`
# 获取容器的进程ID
export DOCKER_PID=`docker inspect $DOCKER_ID -f {
    {
    .State.Pid}}`
# 进入容器的网络命名空间
nsenter -n -t $DOCKER_PID

# 查看容器的网络相关的配置
iptables-save -c
ipset save
tc qdisc

输出内容如下:

[root@iZbp1elafds24y0y49tf03Z ~]# iptables-save -c
# Generated by iptables-save v1.4.21 on Thu Jul 27 16:56:15 2023
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Thu Jul 27 16:56:15 2023
# Generated by iptables-save v1.4.21 on Thu Jul 27 16:56:15 2023
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Jul 27 16:56:15 2023
# Generated by iptables-save v1.4.21 on Thu Jul 27 16:56:15 2023
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Thu Jul 27 16:56:15 2023
# Generated by iptables-save v1.4.21 on Thu Jul 27 16:56:15 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:CHAOS-INPUT - [0:0]
:CHAOS-OUTPUT - [0:0]
:TC-TABLES-0 - [0:0]
[0:0] -A INPUT -j CHAOS-INPUT
[0:0] -A OUTPUT -j CHAOS-OUTPUT
[0:0] -A CHAOS-OUTPUT -j TC-TABLES-0
[0:0] -A TC-TABLES-0 -o eth0 -m set --match-set ceshi_84ad17d35da_set_netgt dst,dst -j CLASSIFY --set-class 0001:0004
COMMIT
# Completed on Thu Jul 27 16:56:15 2023
[root@iZbp1elafds24y0y49tf03Z ~]# ipset save
create ceshi_84ad17d35da_net_netgt hash:net family inet hashsize 1024 maxelem 65536
add ceshi_84ad17d35da_net_netgt 110.242.68.66
add ceshi_84ad17d35da_net_netgt 39.156.66.10
create ceshi_84ad17d_netport_netgt hash:net,port family inet hashsize 1024 maxelem 65536
create ceshi_84ad17d35da_set_netgt list:set size 8
add ceshi_84ad17d35da_set_netgt ceshi_84ad17d35da_net_netgt
add ceshi_84ad17d35da_set_netgt ceshi_84ad17d_netport_netgt
[root@iZbp1elafds24y0y49tf03Z ~]# tc qdisc
qdisc noqueue 0: dev lo root refcnt 2
qdisc prio 1: dev eth0 root refcnt 2 bands 4 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc netem 5: dev eth0 parent 1:4 limit 1000 delay 50.0ms  1.0ms 0.5%
qdisc sfq 4: dev eth0 parent 1:3 limit 127p quantum 1514b depth 127 divisor 1024
qdisc sfq 3: dev eth0 parent 1:2 limit 127p quantum 1514b depth 127 divisor 1024
qdisc sfq 2: dev eth0 parent 1:1 limit 127p quantum 1514b depth 127 divisor 1024

总结

到这里可以发现Chaos Mesh通过 iptables + tc的方式, 对流量进行拦截后处理。 实现网络故障的目录, 其他网络类型故障也是基于该原理实现。


tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: netem delay 50000
tc qdisc add dev eth0 parent 1: handle 2: netem delay 100000
tc qdisc add dev eth0 parent 2: handle 3: prio bands 5 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
tc qdisc add dev eth0 parent 3:1 handle 4: sfq
tc qdisc add dev eth0 parent 3:2 handle 5: sfq
tc qdisc add dev eth0 parent 3:3 handle 6: sfq
tc qdisc add dev eth0 parent 3:4 handle 7: netem delay 50000
iptables -A TC-TABLES-0 -o eth0 -m set --match-set A dst -j CLASSIFY --set-class 3:4 -w 5
tc qdisc add dev eth0 parent 3:5 handle 8: netem delay 100000
iptables -A TC-TABLES-1 -o eth0 -m set --match-set B dst -j CLASSIFY --set-class 3:5 -w 5

参考文档:

故障注入源码:https://github.com/chaos-mesh/chaos-mesh/blob/master/pkg/chaosdaemon/tc_server.go#L112

相关文章
|
27天前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
64 3
|
2月前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
72 2
|
2月前
|
传感器 运维 物联网
蓝牙Mesh网络:连接未来的智能解决方案
蓝牙Mesh网络:连接未来的智能解决方案
269 12
|
9天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
36 5
|
9天前
|
运维 物联网 网络虚拟化
网络功能虚拟化(NFV):定义、原理及应用前景
网络功能虚拟化(NFV):定义、原理及应用前景
24 3
|
20天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
1月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
84 1
|
1月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
1月前
|
存储 安全 算法
网络安全与信息安全:构建数字世界的防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系现代社会正常运转的关键支柱。本文旨在深入探讨网络安全漏洞的成因与影响,剖析加密技术的原理与应用,并强调提升公众安全意识的重要性。通过这些综合性的知识分享,我们期望为读者提供一个全面而深刻的网络安全视角,助力个人与企业在数字时代中稳健前行。
本文聚焦网络安全与信息安全领域,详细阐述了网络安全漏洞的潜在威胁、加密技术的强大防护作用以及安全意识培养的紧迫性。通过对真实案例的分析,文章揭示了网络攻击的多样性和复杂性,强调了构建全方位、多层次防御体系的必要性。同时,结合当前技术发展趋势,展望了未来网络安全领域的新挑战与新机遇,呼吁社会各界共同努力,共筑数字世界的安全防线。
|
1月前
|
存储 安全 自动驾驶
探索未来网络:量子互联网的原理与应用
【10月更文挑战第2天】 本文旨在探讨量子互联网的基本原理、技术实现及其在通讯领域的革命性应用前景。量子互联网利用量子力学原理,如量子叠加和量子纠缠,来传输信息,有望大幅提升通信的安全性和速度。通过详细阐述量子密钥分发(QKD)、量子纠缠交换和量子中继等关键技术,本文揭示了量子互联网对未来信息社会的潜在影响。