istio: VirtualService url改写或转发



我有一个Istio VirtualService,其中包含一个匹配和一个路由和重定向url,定义如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-pro
spec:
hosts:
- "*"
gateways:
- my-gateway
http:
- match:
- uri:
prefix: /events
route:
- destination:
host: event-service
port:
number: 8000
- match:
- uri:
prefix: /blog
redirect:
uri: /
authority: blog.mydomain.com
- route:
- destination:
host: default-service
port:
number: 8000

这个VirtualService的工作方式如下:

  1. 如果请求是www.mydomain.com/events它将转发到事件服务。
  2. 如果请求是www.mydomain.com/blog它会将主机重定向到blog.mydomain.com
  3. 如果请求是www.mydomain.com/anyother它将转发到default-service

In case 2我重定向www.mydomain.com/blogblog.mydomain.com页,因为我的博客页面托管在那个域名上。

现在我的问题是,而重定向URL,浏览器的URL是改变为blog.mydomain.com. 我希望它保持不变www.mydomain.com/blog但是blog.mydomain.com的内容应该显示在屏幕上

我认为你应该用重写目标:https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRewrite

如果目的地在Service Mesh的外部,您还需要一个ServiceEntry

- match:
- uri:
prefix: /blog
name: blog.mydomain.com
rewrite:
authority: blog.mydomain.com
uri: /blog
route:
- destination:
host: blog.mydomain.com

在虚拟服务中添加上述规则,然后创建此服务条目。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: blog
spec:
hosts:
- blog.mydomain.com
location: MESH_EXTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS

最新更新