1

我正在尝试在 kubernetes 集群中设置两个服务的路由,并且我想做一个具有特定权重的 2 个不同服务的金丝雀版本。例如:如果到达 /endpoint1,那么它将 50% 的流量路由到 service1,另外 50% 我想重写,然后路由到 service2。如果我尝试这个虚拟服务

  http:
  - match:
      uri:
        exact: /path1
    rewrite:
      uri: /path1modified
    route:
    - destination:
        host: service1host
        weigh: 50
    - destination:
        host: service2host
        weigh: 50

它将重写然后使用 path1modified 路由。所以我需要这样的东西

  http:
  - match:
      uri:
        exact: /path1
    route:
    - destination:
        host: service1host
        weigh: 50
    - destination:
        host: service2host
        weigh: 50       
        rewrite:
          uri: /path1modified

如果这是可能的,我很好奇。非常感谢。

更新 谢谢大家给出的答案,最终我找到了一种方法,基本上我有一个webapp(它使用了path1)并且我有一个服务(它在后端使用了modifiedPath1,但它需要在浏览器中使用path1,使用rewrite),我想要权衡这 2 之间的流量。我尝试使用虚拟服务,但我无法找到一种方法来包含两条路径。我的解决方案是添加一个流量管理器,它将加权流量发送到 webapp 和我的服务,然后对于 webapp,让端点保持原样,对于服务,如果匹配 uri 精确 /path1,然后重写为 modifiedPath1。

4

2 回答 2

1

我想说,有几件事你没有做。首先要做金丝雀,你不是为两个不同的服务做,而是为同一个服务的两个子集做。最后,有两种不同的部署,但您只需要定义一个服务,然后通过DestinationRule您定义子集。

换句话说,你有两个部署,对吧?这两个部署将有一个共同的标签和一个不同的标签。通过您将定义的公共标签DESTINATION_HOST_THAT_HAS_SUBSETS,并通过不同的标签您将定义子集service1hostservice2host.

然后,您的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
于 2020-05-21T10:57:11.910 回答
0

据我所知,这是不可能的。

如果您查看有关rewrite in virtual service 的 istio 文档,rewrite 是http的一部分,因此不能在目标中使用。

可能对基于权重的路由有帮助的链接:

于 2020-05-21T09:12:46.187 回答