为什么我用不同的前缀文件夹击中理智的容器

时间:2018-11-30 14:47:22

标签: istio

您知道为什么将以下两个istio yaml前缀配置路由到同一容器吗?

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-one-virtualservice
spec:
  hosts:
  - "*"
  gateways: 
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /one
    route:
    - destination:
        host: my-one-service

以下内容击中了相同的容器/服务(只是更改了前缀和主机服务):

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-two-virtualservice
spec:
  hosts:
  - "*"
  gateways: 
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /one/two
    route:
    - destination:
        host: my-two-service

1 个答案:

答案 0 :(得分:1)

问题是因为同一主机有2个虚拟服务。在这种情况下,规则将按照here中所述的未定义顺序进行合并。

在您的情况下,由于第二个前缀是第一个前缀的更具体子集,因此您需要确保第二个规则具有更高的优先级(即先排序)。

您可以通过将两个规则都放在一个虚拟服务中来解决此问题,如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-one-virtualservice
spec:
  hosts:
  - "*"
  gateways: 
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /one/two
    route:
    - destination:
        host: my-two-service
  - match:
    - uri:
        prefix: /one
    route:
    - destination:
        host: my-one-service

有关规则排序的更多信息,请参见here