istio - 无法使用“将大型虚拟服务和目标规则拆分为多个资源”
问题描述
istio 文档描述“将大型虚拟服务和目标规则拆分为多个资源”
https://istio.io/docs/ops/best-practices/traffic-management/
这是我的虚拟服务 yaml ,</p>
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
在此处输入图像描述 只有一个虚拟服务可用,
解决方案
是的,这是预期的行为。
根据istio文档:
在不方便为单个
VirtualService
或DestinationRule
资源中的特定主机定义完整的路由规则或策略集的情况下,最好在多个资源中逐步指定主机的配置。如果绑定到网关,Pilot 将合并此类目标规则并合并此类虚拟服务。
当
VirtualService
应用现有主机的第二个和后续时,istio-pilot
会将附加路由规则合并到主机的现有配置中。但是,使用此功能时必须仔细考虑一些注意事项。
- 尽管将保留任何给定源中规则的评估顺序
VirtualService
,但跨资源顺序是未定义的。换句话说,跨片段配置的规则没有保证的评估顺序,因此只有在跨片段规则之间没有冲突规则或顺序依赖时,它才会具有可预测的行为。- 片段中应该只有一个“包罗万象”的规则(即,匹配任何请求路径或标头的规则)。所有此类“包罗万象”的规则将被移至合并配置中列表的末尾,但由于它们捕获所有请求,因此首先应用的规则将基本上覆盖并禁用任何其他请求。
- 如果 A
VirtualService
绑定到网关,则只能以这种方式进行分段。Sidecar 不支持主机合并。
推荐阅读
- variables - TCL 文本文件字符串到变量
- javascript - IF/else语句完成后如何运行回调
- javascript - 用于聊天的 Web 套接字未连接 - 404
- android - 测试后卸载应用程序时生成黄瓜报告但删除
- node.js - Tensorflowjs 保存模型抛出错误:不支持的 TypedArray 子类型:Float32Array
- html - 如何中心对齐我的卡片,网格相对于强度图像?
- ios - Firebase iOS SDK调用云函数空响应
- javascript - 如何更改 POST 请求的最大包大小限制?
- java - 如何在 docker 中访问由 Java 应用程序编写的文本文件
- vue.js - 如何修复`TypeError:无法读取路由器链接中未定义的属性'resolve'?