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 路径的动态部分支持到不同服务的路由的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot、Minikube、Istio 和 Keycloak:“无效参数:redirect_uri”
OAuth2(授权代码授予类型)的重定向 URI 中是不是应该存在动态查询参数