Istio RouteRules不能一起工作

时间:2018-02-27 16:38:16

标签: kubernetes kubectl minikube istio

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不能一起工作?

1 个答案:

答案 0 :(得分:1)

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