在 Istio VS 中基于 URI 前缀将请求路由到服务

Posted

技术标签:

【中文标题】在 Istio VS 中基于 URI 前缀将请求路由到服务【英文标题】:Routing requests to services based on URI prefix in Istio VS 【发布时间】:2020-10-27 14:48:50 【问题描述】:

这就是我想要实现的目标: 根据 URI 前缀将流量路由到服务

我面临的问题: 无法从上下文路径中分离前缀

解释:

我想根据前缀将流量路由到服务。 比如说 /dev/service/context/path//test/service/context/path/ 。 但是如果不更改应用程序本身的上下文路径,我就无法这样做。

有没有办法可以将 URI 的前缀部分与应用程序的上下文路径分开?

这就是我的 VS 的样子:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: servicea
  namespace: dev
spec:
  hosts:
  - "*"
  gateways:
  - dev-gateway
  http:
  - match:
    - uri:
        prefix: /dev
    route:
    - destination:
        port:
          number: 8080
        host: servicea

谢谢

【问题讨论】:

【参考方案1】:

不确定我是否正确理解了您的问题。我想你可以像这样添加一个重写规则:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: servicea
  namespace: dev
spec:
  hosts:
  - "*"
  gateways:
  - dev-gateway
  http:
  - match:
    - uri:
        prefix: /dev
    rewrite:
       uri: /
    route:
    - destination:
        port:
          number: 8080
        host: servicea

这样,您对/dev/service/context/path/ 的流量变为/service/context/path/

【讨论】:

以上是关于在 Istio VS 中基于 URI 前缀将请求路由到服务的主要内容,如果未能解决你的问题,请参考以下文章

Istio流量管理实践之: 基于Istio实现流量对比分析

Istio VirtualService 虚拟服务

k8s istio 配置请求的路由规则

Spring Boot、Minikube、Istio 和 Keycloak:“无效参数:redirect_uri”

istio 是不是可以通过 uri 路径的动态部分支持到不同服务的路由

Service Mesh vs SideCar