我检查了
istio-proxy
部署 Pod 和默认 api-service
部署中的 istio-ingressgateway
sidecar 容器的日志。从 ingressgateway 到我的服务的路径保持不变,不成文。我希望请求看起来像这样:
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/'
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
我发现重定向实际上有效,但 Envoy Sidecar 并未按照我预期的方式在日志中反映这一点。
我从 the docs 推断 Envoy Sidecar 将记录重写的路径(查看 rewrite
Field的 Description):
转发前将进行重写。
我检查了在
api-service
部署中运行的 Web 服务器的访问日志,发现格式错误的请求:GET //some-resource/123/
(来自 /api/some-resource/123/
)。
事实证明,额外的
/
(来自 rewrite.url: /
)导致了 404 错误。 来自 istio 问题的 Github 评论提出了一个修复:空白。
正如用户警告的那样,不确定此行为是否是有意为之。