背景介绍
在 CCE 集群中,网络乱序会增加节点 CPU 开销,降低吞吐量并增加应用延迟。本演练模拟该场景,评估应用协议健壮性及系统性能。
基本原理
通过增加TC和Netem规则模拟Pod内网络包乱序。
注意
只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败。
故障注入
1、纳管实例资源
导航至 故障演练 > 目标应用 > 应用资源 页面。
在资源类型页签中选择云容器引擎,然后单击添加资源。
在弹出的对话框中,勾选目标云容器引擎实例,单击确定。
在应用资源页面的云容器引擎列表中,找到您的目标集群,单击其操作列的pod列表。
在弹出的对话框中,单击添加pod。
勾选您希望进行故障演练的一个或多个pod,然后单击确定。
注意
当您首次对 CCE 集群执行演练时,系统会自动在该集群中安装演练探针(以 Deployment 和 DaemonSet 形式部署)。
您也可以提前在 故障演练 > 目标应用 > 探针管理 > 云容器引擎 界面查看探针的基本信息,并手动执行安装或更新操作。
2、编排演练任务
导航至 故障演练 > 目标应用 > 演练管理页面,单击新建演练。
在基本信息页面,按提示填写演练名称和描述,然后单击下一步。
在演练对象配置页面:
配置动作组:为动作组命名,资源类型选择云容器引擎Pod。
添加实例:单击添加实例,勾选上一步中添加的云容器引擎Pod实例。
添加故障动作:单击立即添加,在列表中选择网络包乱序动作。
在弹出的参数配置框中,配置所需参数,然后单击确定。
持续时间:故障动作持续时间。
本地端口:仅对源端口为指定端口的流量生效。例如,可设置为您对外提供服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080。
远程端口:仅对目标端口为指定端口的流量生效。例如,可设置为您的应用访问数据库的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080。
排除端口:排除指定端口的流量。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与本地端口或者远程端口参数一起使用。
目标IP: 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,还可以通过逗号分隔多个参数,例如 192.168.1.1,192.168.2.1。
网卡设备:指定在哪个网络接口上实施故障,网卡可通过ifconfig命令查询,例如 eth0。
排除IP:排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,还可以通过逗号分隔多个参数,例如 192.168.1.1,192.168.2.1。
重排序概率:数据包被立即发送的百分比。
和上一包的相关性:控制数据包重排序的随机性和规律性之间的平衡,取值范围 0~100,例如,设置为 50 表示有 50% 的可能性下一个数据包的重排序决策会受到前一个数据包的影响。值越高,乱序模式越规律;值越低,越随机。
包序列大小:定义了重排序数据包之间的距离,即有多少个数据包会按照正常顺序发送后才会出现一个重排序的数据包,例如,当 gap 设置为 2 时,意味着每 2 个正常顺序的数据包之后会有一个数据包被重排序。
网络包延迟时间(毫秒):对被选中的乱序数据包施加的延迟时长。
容器选择模式:选择攻击pod中容器,可以“按资源定义的首个容器”,也可以“指定容器名称”,当选择指定容器名称时,需要输入容器的名称。
容器名称:填写攻击目标的容器名
3、配置全局策略
在全局配置页面,按需添加保护策略和监控指标。
配置完成后,单击完成按钮,创建演练任务。
4、发起故障注入
发起演练:在演练管理列表找到对应演练任务,单击操作列的执行演练,在新页面中点击发起新演练。
进入实验:系统将自动跳转到本次演练的运行详情页,或在演练执行记录列表点击对应执行实例的详情进入。
注入故障:在动作组中,找到网络包乱序动作卡片,单击执行。
查看日志:单击动作卡片本身,在右侧弹出的侧边栏中查看执行详情。
效果验证
在故障注入期间,您可以通过以下方式验证演练效果:
1、观测实例指标:
登录应用性能监控控制台,观测已接入应用的应用提供服务平均响应时间指标。
2、业务应用验证:
观察运行在目标节点上的业务 Pod 与其他 Pod 或外部服务通信时,是否出现性能下降、卡顿或功能异常。
某些对数据包顺序敏感的应用层协议可能会出现解析错误或连接中断。