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