Chaos Mesh网络延迟原理探索

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 在使用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

相关文章
|
3月前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
81 3
|
2天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
20 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
10天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
10天前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
10天前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
10天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
10天前
|
XML JSON 网络协议
【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况
拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)
|
13天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
62 1
|
18天前
|
域名解析 缓存 网络协议
优化Lua-cURL:减少网络请求延迟的实用方法
优化Lua-cURL:减少网络请求延迟的实用方法
|
10天前
|
网络协议 算法 Java
【JavaEE】——初始网络原理
局域网,广域网,局域网连接方式,交换机,集线器,路由器,网络通信,五元组(源IP,源端口,目的IP,目的端口,协议),协议分层,TCP/IP五层网络协议,封装和分用,交换机和路由器的封装和分用