We have this VS for test on bookinfo sample:
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- fault:
abort:
percent: 50
httpStatus: 503
retries:
attempts: 10
perTryTimeout: 0.1s
route:
- destination:
host: ratings
subset: v1
EOF
Expected result was that 50% of request would fail and then get retried, which should result in success. However, we are getting 50%, 503 and another 50% is working fine.
Looking around, we found this https://github.com/istio/istio/issues/7231, which mentions
“The fault-injection filters are included before any others, including the router filter. The router filter is what controls retries.”
Is it that in case of fault type “abort” envoy/istio-proxy would return 503 without routing to underlying service/container; but for fault type delay, it would wait and then do routing to underlying service/container?