Istio 不健康节点驱逐 —— 外部流量管理

Istio 不健康节点驱逐 —— 外部流量管理

简述

用到的是Istio DestinationRule
.spec.trafficPolicy.outlierDetection
管理的节点在 K8s集群外, Windows IIS节点

链路

Istio → 外部Windows(Gateway → VirtualService → ServiceEntry → WorkloadEntry)

需求

在管理的外部Windows 后端, 发生 节点503、502、500等5xx时进行后端流量摘除, 等待后端正常后 流量恢复

告警处理链路

在这里插入图片描述

效果

在集群外后端 Windows, 发生后端响应状态码为5xx时 对不健康节点流量摘除一段时间, 这段时间后自动恢复转发

DestinationRule

30s内, 网关收到 20次 5xx状态码返回, 则将对应HomeMWeb节点驱逐3分钟, 最多只驱逐50%节点(默认只驱逐10%), 保证多实例正常负载

# .spec.trafficPolicy.outlierDetection   ## 不健康节点驱逐

---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: homemweb-detection
  namespace: beta-winserver     # 需要指定命名空间
spec:
  host: HomeMWeb.Beta              # 与VirutualService、ServiceEntry匹配
  trafficPolicy:
    outlierDetection:
      baseEjectionTime: 3m         # 驱逐不健康节点时长, 注意 会按2倍基数的时间增加,如 首次3分钟, 下次则6分钟 再下次12分钟
      consecutive5xxErrors: 20     # 网关5xx错误次数
      interval: 30s                 # 间隔统计时间
      maxEjectionPercent: 50       # 最大驱逐百分比
      minHealthPercent: 50         # 最小健康节点比例,若低于这个值 则不做故障驱逐,转发至所有节点

实验

让GPT写了个测试脚本

准备http请求测试脚本

#!/bin/bash

# 定义目标 URL
URL="https://地址.com/Beta.abc/check.html"

# 定义颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # 没有颜色

# 进行 xx 次请求,每次间隔 xx 秒
for i in {1..300}; do
  # 发送请求并获取状态码和响应内容
  response=$(curl -s -w "%{http_code}" "$URL")
  
  # 分离状态码和响应内容
  status_code=${response: -3}
  content="${response:0:${#response}-3}"


  # 获取当前时间
  current_time=$(date "+%Y-%m-%d %H:%M:%S")

  # 根据状态码设置颜色
  if [ "$status_code" -eq 200 ]; then
    color=$GREEN
  elif [ "$status_code" -eq 500 ]; then
    color=$RED
  else
    color=$NC
  fi

  # 输出当前时间和状态码,并加上相应的颜色
  echo -e "[$current_time] Request $i: HTTP Status Code = ${color}$status_code${NC} $content"

  # 等待请求时间
  sleep 0.5
done

简单测试

2节点, 1个正常 1个不正常

1)增加策略前, 流量会均匀打在健康、不健康后端

在这里插入图片描述

2) 增加策略后, 触发设定阈值, 只会打到健康节点

在这里插入图片描述

复杂测试

情况说明:
4台机器测试, 其中某个接口频繁500, 主流程接口200

测试方式:

同时对2个接口进行批量调用, 左侧返回200并输出响应节点、右侧直接返回500状态码, 根据设置的规则测试驱逐效果


规则和效果
1、出现问题, 根据规则驱逐掉50% 流量

在这里插入图片描述

2、结束驱逐时间后, 被驱逐节点恢复正常转发

在这里插入图片描述

3、若再满足驱逐条件, 则继续触发驱逐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值