Istio VirtualService 单上下文路径配置两个服务的方案咨询
问题解决方案
根本原因
Istio VirtualService 的http路由块规则遵循从上到下优先匹配逻辑,只要请求命中某一条规则,就会直接执行该规则的路由逻辑,不会继续匹配后续规则。
你两次配置的共同问题是都将范围更大的短前缀/my/context/path匹配规则放在了最前面:所有前缀匹配/my/context/path的请求(包括/my/context/path/service2)都会优先命中第一个路由规则,直接转发到service1,后面的service2规则永远不会被触发。
解决方案
不需要拆分两个服务的上下文路径,只需调整路由规则的顺序,将更长、更精确的前缀匹配规则放在前面,范围更大的短前缀规则放在后面即可:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: test-service namespace: ns-ns spec: gateways: - gateway.ns-ns hosts: - '*' http: # 先匹配精确的service2长前缀 - match: - uri: prefix: /my/context/path/service2 route: - destination: host: service2.ns-ns.svc.cluster.local port: number: 9000 # 再匹配根前缀,覆盖service1的请求 - match: - uri: prefix: /my/context/path route: - destination: host: service1.ns-ns.svc.cluster.local port: number: 9000
后续如果新增同根路径的其他子服务,同样按前缀长度从长到短排序配置规则即可正常路由。
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

