Chaos Mesh网络延迟原理探索

本文涉及的产品
云原生网关 MSE Higress,422元/月
函数计算FC,每月15万CU 3个月
可观测监控 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

相关文章
|
2月前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
76 3
|
3月前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
97 2
|
3月前
|
传感器 运维 物联网
蓝牙Mesh网络:连接未来的智能解决方案
蓝牙Mesh网络:连接未来的智能解决方案
380 12
|
2天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
17 1
|
7天前
|
域名解析 缓存 网络协议
优化Lua-cURL:减少网络请求延迟的实用方法
优化Lua-cURL:减少网络请求延迟的实用方法
|
1月前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
69 5
|
1月前
|
运维 物联网 网络虚拟化
网络功能虚拟化(NFV):定义、原理及应用前景
网络功能虚拟化(NFV):定义、原理及应用前景
84 3
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
2月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
251 1
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。