可以使Istio Virtual Service仅匹配幂等方法,例如
kind: VirtualService
metadata:
name: "httpbin-virtual-service"
spec:
hosts:
- "*"
gateways:
- my-istio-gateway
http:
- match:
- method:
exact: GET
uri:
prefix: /status
uri:
prefix: /delay
route:
- destination:
host: "httpbin"
port:
number: 80 # application port
但是
有没有办法使VirtualService中配置的Istio重试仅适用于幂等请求(例如GETS),而绕过重试非幂等请求(例如POST)(请参见下文)。在需求方面,我只想重试那些多次调用不太可能改变系统状态的方法? retryOn
是实现此功能的理想之地,但我不知道如何以当前形式使用它(除非使用connect-failure / refused流,除非我们假设这些错误表明执行从未在目标服务上执行)
谢谢
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: "httpbin-virtual-service"
spec:
hosts:
- "*"
gateways:
- my-istio-gateway
http:
- match:
- uri:
prefix: /status
- uri:
prefix: /delay
timeout: 15s
retries: ============================> Is there a way to make the retries apply only for idempotent requests eg GETS
attempts: 5
perTryTimeout: 1s
retryOn: 5xx,gateway-error,connect-failure,refused-stream
route:
- destination:
host: "httpbin"
port:
number: 80
我尝试了此配置,但是调用了POST(例如)。仍然似乎触发了重试
例如
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: "httpbin-virtual-service"
spec:
hosts:
- "*"
gateways:
- my-istio-gateway
http:
- match:
- uri:
prefix: /status
method:
exact: GET
- uri:
prefix: /delay
timeout: 15s
retries:
attempts: 5
perTryTimeout: 1s
retryOn: 5xx,gateway-error,connect-failure,refused-stream
route:
- destination:
host: "httpbin"
port:
number: 80
- match:
- uri:
prefix: /status
method:
exact: POST
- uri:
prefix: /delay
route:
- destination:
host: "httpbin"
port:
number: 80
答案 0 :(得分:0)
不久前我也和你处于同一位置。
最后,我知道默认行为是1次重试。
如果我不想重试,则必须通过设置0来覆盖,例如:
retries:
attempts: 0
请注意,似乎仅从1.2.1开始支持此功能:Issue 14900
值得关注的是这个开放的Issue 13851(至少在撰写本文时)。似乎POST正在重试,即使在第一次尝试中请求没问题时也是如此。
请检查这些内容是否对您有帮助。
答案 1 :(得分:0)
找到一个有效的配置。参见https://github.com/istio/istio/issues/17145