Istio VirtualService HTTPRewrite 被完全忽略

问题描述 投票:0回答:1

我检查了

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
url-rewriting istio
1个回答
2
投票

我发现重定向实际上有效,但 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 评论提出了一个修复:空白。

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

© www.soinside.com 2019 - 2024. All rights reserved.