故障注入¶
本任务使用 FaultInjectionPolicy 为 Kubernetes Service 注入可控延迟和中止故障,用于验证超时、重试、降级与告警行为。
前提¶
安装或升级 Dubbo CRD 后,确认集群已识别策略:
kubectl explain faultinjectionpolicy.spec
kubectl explain faultinjectionpolicy.spec.delay
kubectl explain faultinjectionpolicy.spec.abort
准备示例服务:
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-kubernetes/master/samples/httpbin/httpbin.yaml
配置¶
下面的策略附着到 httpbin Service。20% 的请求或连接会先延迟 250 毫秒,10% 会在到达应用前中止。延迟和中止独立抽样;同一次调用同时命中时,先延迟再中止。
apiVersion: networking.dubbo.apache.org/v1alpha3
kind: FaultInjectionPolicy
metadata:
name: httpbin-fault-injection
spec:
targetRefs:
- group: ""
kind: Service
name: httpbin
delay:
fixedDelay: 250ms
percentage: 20
abort:
httpStatus: 503
percentage: 10
应用策略:
kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-kubernetes/master/samples/httpbin/fault-injection.yaml
kubectl get faultinjectionpolicy httpbin-fault-injection -o yaml
targetRefs[].sectionName 可以指定 Service 端口名;省略时策略作用于该 Service 的全部端口。同一目标存在多个策略时,控制面采用创建时间最早的有效策略,端口级策略优先于 Service 级策略。
验证 Inherent 出站¶
把 dubbod 的测试入口转发到本地:
从另一个终端发送多次真实请求:
grpcurl -plaintext \
-d '{"url":"xds:///httpbin.default.svc.cluster.local:80","path":"/get","count":50}' \
:17171 proto.XDSTestService/ForwardHTTP
命中延迟时,调用至少增加 250 毫秒;命中中止时,客户端返回 fault injected HTTP status 503,且不会访问上游。故障在重试逻辑之前执行,因此本地注入的中止不会被自动重试。
入站 dxproxy 语义¶
控制面也会把同一策略写入目标工作负载的 dxproxy runtime 配置。dxproxy 在建立到本地应用的连接前执行故障:
- 延迟会暂停选中的入站连接,并增加
dxproxy_fault_delays_total。 - 中止会直接关闭选中的连接,并增加
dxproxy_fault_aborts_total。 - dxproxy 是 L4 数据面,不终止 HTTP/gRPC 协议,因此不能合成配置的 HTTP 状态码;
httpStatus只用于配置校验与 L7 Inherent 出站返回。
参数规则¶
delay与abort至少配置一个。fixedDelay必须至少为 1 毫秒。httpStatus必须在 400 到 599 之间。percentage范围为 0 到 100;省略表示 100%,显式设为 0 表示禁用该项。- 当前策略目标仅支持同命名空间的 Kubernetes
Service。