我正在尝试在kubernetes集群中设置两个服务的路由,并且我想对具有特定权重的2个不同服务进行canary发布。 例如:如果到达/ endpoint1,则它将50%的流量路由到service1,对于其他50%我要重写的流量,则路由到service2。 如果我尝试此虚拟服务
http:
- match:
uri:
exact: /path1
rewrite:
uri: /path1modified
route:
- destination:
host: service1host
weigh: 50
- destination:
host: service2host
weigh: 50
它将重写,然后修改path1的路由。 所以我需要这样的东西
http:
- match:
uri:
exact: /path1
route:
- destination:
host: service1host
weigh: 50
- destination:
host: service2host
weigh: 50
rewrite:
uri: /path1modified
如果可以的话,我很好奇。 非常感谢。
更新 谢谢大家给出的答案,最终我找到了办法 基本上,我有一个webapp(使用path1)和一个服务(在后端使用ModifyPath1,但是在浏览器中需要path1,使用重写),我想权衡这2个之间的流量。我尝试使用虚拟服务,但我无法设法找到同时包含这两个路径的方法。我的解决方案是添加一个流量管理器,该流量管理器将加权的流量发送到webapp和我的服务,然后使webapp保持端点不变,对于服务,如果匹配uri确切/ path1,然后将其重写为ModifyedPath1。
答案 0 :(得分:1)
我想说,您有几件事没有做。首先要做金丝雀,您不需要为两个不同的服务执行此操作,但是要为同一服务的两个子集执行此操作。最后,有两种不同的部署,但是您只需要定义一个服务,然后通过DestinationRule
定义子集。
换句话说,您有两个部署对吗?这两个部署将有一个共同的标签,并且有一个不同的标签。通过公共标签,您将定义DESTINATION_HOST_THAT_HAS_SUBSETS
,通过不同标签,您将定义子集service1host
和service2host
。
然后,您的VirtualService
将如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: server-vs
spec:
hosts:
- DESTINATION_HOST_THAT_HAS_SUBSETS
http:
- match:
- uri:
prefix: /path1
rewrite:
uri: /path1modified
route:
- destination:
host: DESTINATION_HOST_THAT_HAS_SUBSETS
subset: service1host
weight: 50
route:
- destination:
host: DESTINATION_HOST_THAT_HAS_SUBSETS
subset: service2host
weight: 50
更新
在jt97发表评论(关于可以拥有两个单独的服务是正确的)之后,此VirtualService
应该也可以正常工作。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: server-vs
spec:
hosts:
- DESTANTION_HOST
http:
- match:
- uri:
prefix: /path1
rewrite:
uri: /path1modified
route:
- destination:
host: service1host
weight: 50
route:
- destination:
host: service2host
weight: 50
答案 1 :(得分:0)