我目前正在研究一种情况,当我们需要动态创建服务并通过主网关的URI子路径提供对它们的访问。
我打算将虚拟服务用于其流量路由。用于特定服务的虚拟服务应如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: subpaths-routes
spec:
hosts:
- mainservice.prod.svc.cluster.local
http:
- name: "subpath-redirection"
match:
- uri:
prefix: "/bservices/svc-2345-6789"
route:
- destination:
host: svc-2345-6789.prod.svc.cluster.local
但是可能有大量的此类服务(如数千个)。全部遵循相同的路由模式。我想知道Istio是否具有使用变量/参数指定VirtualService的机制,如下所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: subpaths-routes
spec:
hosts:
- mainservice.prod.svc.cluster.local
http:
- name: "subpath-redirection"
match:
- uri:
prefix: "/bservices/"{{ variable }}
route:
- destination:
host: {{ variable }}.prod.svc.cluster.local
在Nginx中,可以通过指定如下内容来做类似的事情:
location ~ /service/(?<variable>[0-9a-zA-Z\_\-]+)/ {
proxy_pass http://$variable:8080;
}
Istio中有没有办法做到这一点?如果没有,那么成千上万个VS将如何影响请求处理的性能?在消耗CPU和RAM方面,保持它们昂贵吗?
先感谢您!
如何在Istio VirtualService中使用变量?
据我所知,istio中没有这样的选项可以在前缀和主机中指定变量,如果它只是一个前缀,那么您可以尝试使用regex而不是前缀。
如果您想以某种方式使其自动化,我的意思是创建一个变量并将其放入prefix和host中,那么您可以尝试使用helm进行操作。
掌舵虚拟服务的例子很少。
数千个VS将如何影响请求处理的性能?
有关于github的问题,就像@lanceliuu提到的那样
当我们在单个集群中创建约1k个虚拟服务时,入口网关正在缓慢地获取新的虚拟服务。
因此,这可能是成千上万个虚拟服务的问题之一。
在消耗CPU和RAM方面,保持它们昂贵吗?
我会说这需要测试。我检查了上述github问题,他们提到istio组件没有mem / cpu压力,但是我不能说这有多昂贵。
从理论上讲,您可以创建1个大型虚拟服务,而不是数千个,但是如文档所述,您应该将大型虚拟服务拆分为多个资源。
其他资源:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句