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

Kubernetes istio可以通过uri路径的动态部分支持到不同服务的路由吗,kubernetes,istio,api-gateway,Kubernetes,Istio,Api Gateway,我知道istio支持通过静态规则路由到不同的服务,如下所示: --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-virtualservice spec: hosts: - "*" gateways: - my-gateway http: - match: - uri: prefix: /applications/app-a

我知道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
但我有一个要求,即当出现新用户或新配置时,我已经动态创建了服务。如果使用静态方式,则每次都必须创建新的虚拟服务或更新现有的虚拟服务

我没有发现任何文档提到这种用法,但是我可以使用诸如regex之类的工具或其他方法创建一个规则来应用于所有这些新创建的服务,而不必每次更新虚拟服务吗?下面是一些不起作用的东西,但试着证明我的想法:

---
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

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

我认为我不能按你的要求去做。好的一面是,您必须控制集群中的所有入口点——哪个应用程序可以访问,以及如何访问——安全漏洞更少。

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

我不确定,但他们在VirtualService中使用regexp:

因此,您可以尝试使用以下内容:

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
我不确定他们是否在VirtualService中使用regexp而不是regix:

因此,您可以尝试使用以下内容:

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

哇,这是我的拼写错误,我只是想对regex,谢谢,我会纠正它。哇,这是我的拼写错误,我只是想对regex,谢谢,我会纠正它。