istio:VirtualService 重写到根 url

istio: VirtualService rewrite to the root url

我有一个 Istio 1.4.6 VirtualService,其中包含匹配项和 url 重写,定义如下:

    match:
    - authority:
        prefix: example.com
      uri:
        prefix: /foo/bar
    rewrite:
      uri: /
    route:
    - destination:
        host: some-service
        port:
          number: 80

我想重写如下:

指向 /foo/bar 的流量或其任何子路径应重写为 / 加上 some-service.

上的任何子路径
i.e.
example.com/foo/bar -> some-service
example.com/foo/bar/subpath -> some-service/subpath
example.com/foo/bar/subpath/anothersubpath -> some-service/subpath/anothersubpath

但是,当我系统挖掘进入 some-service 的流量时,我看到 Istio 已将路径重写为:

GET //subpath/anothersubpath HTTP/1.1

注意 GET 请求中的两个斜杠。在 VirtualService spec rewrite.uri 字段中,我似乎无法将该字段留空或在其中添加空字符串。这样做会导致资源无法验证。

即我不能这样做:

    rewrite:
      uri: ""

而且不能这样做

    rewrite:
      uri:

如何定义 VirtualService 重写以将流量发送到目标服务的根目录?任何帮助深表感谢。

关于这个有githubissue

最简单的解决方法是在 uri 中添加空格,只要您不是 运行 .net 核心应用程序即可。

    rewrite:
      uri: " "

可以找到其他解决方法 here

希望对您有所帮助。

另一种方法是:

    - match:
        - uri:
            prefix: "/v2/my-service/"
        - uri:
            exact: "/v2/my-service"
      rewrite:
        uri: "/"
      route:
        - destination:
            host: my-internal-service
            port:
              number: 6666