RouteRule
我有两个Istio httpDelay
:
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: foo-delay
spec:
destination:
name: foo-server
precedence: 5
route:
- labels:
serving: "true"
httpFault:
delay:
fixedDelay: 7.000s
percent: 100
对于httpReqTimeout
:
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: foo-timeout-default
spec:
destination:
name: foo-server
route:
- labels:
serving: "true"
httpReqTimeout:
simpleTimeout:
timeout: 5s
precedence: 3
但是,我无法让这两个RouteRules
一起工作。对于此配置,我有foo-server
的延迟,但请求超时不起作用,因此我从foo-server
收到数据。我试图更改httpDelay
规则precedence: 2
。在这种情况下,根本不会有任何延迟,我认为httpReqTimeout
工作正常。
在这两种情况下,我都可以看到两个规则都已创建:
>istioctl get routerules
NAME KIND NAMESPACE
foo-delay RouteRule.v1alpha2.config.istio.io default
foo-timeout-default RouteRule.v1alpha2.config.istio.io default
为什么这两个RouteRules
不能一起工作?
答案 0 :(得分:1)
这里发生了两件事。 Istio中的RouteRule“优先级”并不推断合并。因此,具有最高优先级和匹配条件的规则将首先匹配,而所有其他规则将被envoy代理忽略。此外,即使您将这两个规则合并为一个规则,遗憾的是特使也无法处理这种情况。编写特使,以便在任何超时/重试之前应用错误