Url rewriting Istio VirtualService HttpRequest被完全忽略

Url rewriting Istio VirtualService HttpRequest被完全忽略,url-rewriting,istio,Url Rewriting,Istio,我检查了api服务部署吊舱和默认istio入口网关部署中的istio代理侧车容器的日志。从安格尔大道到我的服务,这条路依然没有改变。我希望请求看起来像: Client: 'GET mysite.com/api/some-resource/123/' || || VV Ingressgateway: 'GET mysite.com/api/some-resource/123/' || || VV VirtualService: rewrite.uri: / || |

我检查了
api服务
部署吊舱和默认
istio入口网关
部署中的
istio代理
侧车容器的日志。从安格尔大道到我的服务,这条路依然没有改变。我希望请求看起来像:

Client: 'GET mysite.com/api/some-resource/123/'
  ||
  ||
  VV
Ingressgateway: 'GET mysite.com/api/some-resource/123/'
  ||
  ||
  VV
VirtualService: rewrite.uri: /
  ||
  ||
  VV
api-service: 'GET mysite.com/some-resource/123/'

我发现重定向实际上是起作用的,但是特使侧车并没有像我假设的那样在日志中反映这一点

我推断特使侧车将记录重写的路径(查看
重写
字段的说明):

转发前将执行重写

我检查了在
api服务部署中运行的web服务器的访问日志,发现了格式错误的请求:
GET//some resource/123/
(来自
/api/some resource/123/

原来额外的
/
(来自
rewrite.url://
)导致了404个错误。提供了一个修复:空白


正如用户警告的那样,不确定此行为是否是有意的。

我已将
rewrite.uri
字段更改为许多随机内容,它只是被忽略了。rewrite的语义似乎是:将
前缀中的部分替换为
rewrite
中的部分。因此,在
/api/some resource/123/
中,将
/api
替换为
/,您将得到
///some resource/123
。您想要的是将
/api/`(注意最后的斜杠)替换为
/
转发前将执行重写
-我认为它没有说明日志中将写入什么。正如我所说,我推断。在任何情况下,重写uri后向下游转发请求有什么意义,然后sidecar记录旧的、丢弃的uri…有什么意义?不,不幸的是api服务sidecar中的日志显示了原始URL。您所说的是基于文档我所期望的行为,以及为什么我对sidecar毫无意义地记录与istio ingressgateway完全相同的事情感到恼火。在启用并检查api服务的Web服务器的访问日志之前,我几乎认为我的配置被忽略了。在那里,我发现了双斜杠的问题。谢谢@Will提到这一点。我花了一个多小时的时间,想弄明白为什么我的前缀重写不起作用。sidecar应该真正记录重写的url,而不是旧的url。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-route-rules
spec:
  hosts:
    - mysite.com
  gateways:
    - istio-system/mysite-gateway
  http:
    - match:
      - uri:
          prefix: /api
      rewrite:
        uri: /
      route:
        - destination:
            host: api-service.default.svc.cluster.local
            port:
              number: 7000
    - route:
        - destination:
            host: web-experience.default.svc.cluster.local
            port:
              number: 9000