0

我有两个 IstioRouteRule用于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一起工作?

4

1 回答 1

1

这里发生了两件事。Istio 中的 RouteRule “优先级”不会推断合并。因此,具有最高优先级和匹配条件的规则将首先匹配,而所有其他规则将被特使代理忽略。此外,即使您将这两个规则合并为一个规则,不幸的是 envoy 也无法处理这种情况。Envoy 的编写方式是在任何超时/重试之前应用故障

于 2018-02-27T21:48:11.137 回答