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 仅有一项虚拟服务,
答案 0 :(得分:0)
是的,这是预期的行为。
根据istio文档:
如果在单个
VirtualService
或DestinationRule
资源中为特定主机定义完整的路由规则或策略集很不方便,则最好为该主机增量指定配置。托管多种资源。 飞行员将合并这些目标规则,并在将这些虚拟服务绑定到网关时对其进行合并。
为现有主机应用第二个及后续
VirtualService
时,istio-pilot
将把附加路由规则合并到主机的现有配置中。但是,使用此功能时有一些警告,使用时必须仔细考虑。
- 尽管将保留任何给定源
VirtualService
中规则的评估顺序,但是跨资源顺序是未定义的。换句话说,对于片段配置中的规则,无法保证评估的顺序,因此,只有在片段之间的规则之间没有冲突或规则之间没有冲突的情况下,它才具有可预测的行为。- 片段中应该只有一个“包罗万象”规则(即与任何请求路径或标头匹配的规则)。所有这些“全部捕获”规则将在合并配置中移至列表的末尾,但是由于它们捕获了所有请求,因此,首先应用的哪个将本质上覆盖并禁用其他任何请求。
VirtualService
仅在绑定到网关时才可以分段。边车不支持主机合并。