有没有办法在 istio 虚拟服务中为单个上下文路径指定两个服务?

Is there a way were we can specify two services for single context path in istio virtual service?

我有两个不同的微服务 运行 同名 space,它们都有相同的上下文路径(ex - my/context/path),它们的进一步控制器不同,例如服务一支持 - my/context/path/service1 和 service2 支持 my/context/path/service2 现在当我这样定义 vs 时,它总是重定向到 service1,有没有可能的方法来实现这一点? 下面是我的VS:


        apiVersion: networking.istio.io/v1alpha3
        kind: VirtualService
        metadata:
        name: test-service
        namespace: ns-ns
        spec:
         gateways:
         - gateway.ns-ns
        hosts:
         - '*'
       http:
       - match:
        - uri:
          prefix: /my/context/path
        route:
        - destination:
            host: service1.ns-ns.svc.cluster.local
            port:
              number: 9000
      - route:
        - destination:
            host: service2.ns-ns.svc.cluster.local
            port:
              number: 9000

我也在 VS 下试过,但这似乎也重定向到第一个服务。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: test-service
  namespace: ns-ns
spec:
  gateways:
  - gateway.ns-ns
  hosts:
  - '*'
  http:
    - match:
      - uri:
          prefix: /my/context/path
      route:
        - destination:
            host: service1.ns-ns.svc.cluster.local
            port:
              number: 9000
    - match:        
      - uri:
          prefix: /my/context/path/service2
      route:
        - destination:
            host: service2.ns-ns.svc.cluster.local
            port:
              number: 9000

我不确定这是否可以实现,或者我是否需要将两个服务的上下文部分分开?

路由按顺序匹配。因此,您需要从最具体到最通用的开始。例如

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: test-service
  namespace: ns-ns
spec:
  gateways:
  - gateway.ns-ns
  hosts:
  - '*'
  http:
    - match:        
      - uri:
          prefix: /my/context/path/service2
      route:
        - destination:
            host: service2.ns-ns.svc.cluster.local
            port:
              number: 9000
    - match:
      - uri:
          prefix: /my/context/path
      route:
        - destination:
            host: service1.ns-ns.svc.cluster.local
            port:
              number: 9000