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

Posted

技术标签:

【中文标题】istio 是不是可以通过 uri 路径的动态部分支持到不同服务的路由【英文标题】:can istio support route to different service by dynamic part of uri pathistio 是否可以通过 uri 路径的动态部分支持到不同服务的路由 【发布时间】:2019-06-27 11:06:14 【问题描述】:

我知道 istio 支持通过静态规则路由到不同的服务,如下所示:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtualservice
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /applications/app-a
    route:
    - destination:
        host: app-a
        port:
          number: 9080

但我有一个要求,当有新用户或新配置到来时,我已经动态创建了服务。如果我使用“静态”方式,那么我必须每次都创建新的虚拟服务或更新现有的虚拟服务。

我没有找到任何提到这种用法的文档,但是我可以使用“正则表达式”或其他方式来创建一个规则以应用于所有这些新创建的服务,而无需每次都更新虚拟服务吗?以下是行不通的,但尝试证明我的想法:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtualservice
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        regex: /applications/(?<appname>.*)
    route:
    - destination:
        host: $('appname')--svc
        port:
          number: 9080

当然,任何建议都将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

我认为 Istio 不能满足您的要求。它的好处是您必须控制集群的所有入口点 - 可以访问哪些应用程序以及如何访问它 - 减少安全漏洞。

【讨论】:

【参考方案2】:

我不确定,但on github 他们在VirtualService 中使用正则表达式:

  - match:
    - headers:
        cookie:
          regex: "^(.*?;)?(user=dev-123)(;.*)?"

所以你可以尝试使用类似的东西:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: my-virtualservice
spec:
 hosts:
 - "*"
 gateways:
 - my-gateway
 http:
 - match:
   - uri:
       prefix:
         regex: "/applications/(?<appname>.*)"
   route:
   - destination:
       host: match_group['appname']
       port:
         number: 9080

而不是regix

【讨论】:

哇,这是我的拼写错误,我的意思是“正则表达式”,谢谢,我会改正的。

以上是关于istio 是不是可以通过 uri 路径的动态部分支持到不同服务的路由的主要内容,如果未能解决你的问题,请参考以下文章

路径部分中带有 // 的 URL 是不是有效?

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

OAuth2(授权代码授予类型)的重定向 URI 中是不是应该存在动态查询参数

在 React 中使用数据 URI 而不是小于 10kb 的图像的路径的原因是啥?

Istio实战-非侵入的流量治理

Istio实战-非侵入的流量治理