无法使用“将大型虚拟服务和目标规则拆分为多个资源”

时间:2020-03-25 06:54:48

标签: istio

istio文档dercribe“将大型虚拟服务和目标规则拆分为多个资源”

https://istio.io/docs/ops/best-practices/traffic-management/

这是我的virtualService yaml,

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: project-b
  namespace: test1
spec:
  hosts:
  - project-b.test1.svc.cluster.local
  http:
  - match:
    - headers:
        route-namespace:
          exact: "test1"
    route:
    - destination:
        host: project-b.test1.svc.cluster.local


---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: project-b-test2
  namespace: test1
spec:
  hosts:
  - project-b.test1.svc.cluster.local
  http:
  - match:
    - headers:
        route-namespace:
          exact: "test2"
    route:
    - destination:
        host: project-b.test2.svc.cluster.local

enter image description here 仅有一项虚拟服务,

1 个答案:

答案 0 :(得分:0)

是的,这是预期的行为。

根据istio文档:

如果在单个VirtualServiceDestinationRule资源中为特定主机定义完整的路由规则或策略集很不方便,则最好为该主机增量指定配置。托管多种资源。 飞行员将合并这些目标规则,并在将这些虚拟服务绑定到网关时对其进行合并。


为现有主机应用第二个及后续VirtualService时,istio-pilot将把附加路由规则合并到主机的现有配置中。但是,使用此功能时有一些警告,使用时必须仔细考虑。

  1. 尽管将保留任何给定源VirtualService中规则的评估顺序,但是跨资源顺序是未定义的。换句话说,对于片段配置中的规则,无法保证评估的顺序,因此,只有在片段之间的规则之间没有冲突或规则之间没有冲突的情况下,它才具有可预测的行为。
  2. 片段中应该只有一个“包罗万象”规则(即与任何请求路径或标头匹配的规则)。所有这些“全部捕获”规则将在合并配置中移至列表的末尾,但是由于它们捕获了所有请求,因此,首先应用的哪个将本质上覆盖并禁用其他任何请求。
  3. VirtualService仅在绑定到网关时才可以分段。边车不支持主机合并。