【问题标题】:How to use variables in Istio VirtualService?如何在 Istio VirtualService 中使用变量?
【发布时间】:2020-11-24 20:37:14
【问题描述】:

我目前正在处理一个案例,我们需要动态创建服务并通过主网关的 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 的消耗而言,保留它们是否昂贵?

提前谢谢你!

【问题讨论】:

    标签: kubernetes routes istio


    【解决方案1】:

    如何在 Istio VirtualService 中使用变量?

    据我所知,在 istio 中没有这样的选项来指定前缀和主机中的变量,如果它只是一个前缀,那么你可以尝试使用 regex 而不是前缀。


    如果您想以某种方式自动化它,我的意思是创建一个变量并同时输入前缀和主机,然后您可以尝试使用helm 来实现它。

    helm 中虚拟服务的例子很少。


    数千个 VS 将如何影响请求处理的性能?

    github issue 关于那个,正如@lanceliuu 提到的那样

    当我们在单个集群中创建约 1k 个虚拟服务时,入口网关正在缓慢地获取新的虚拟服务。

    所以这可能是数千个虚拟服务的问题之一。

    就 CPU 和 RAM 的消耗而言,保留它们是否昂贵?

    我会说它需要测试。我检查了上面的 github 问题,他们提到 istio 组件没有内存/cpu 压力,但我不能说这有多贵。

    理论上您可以创建 1 个大型虚拟服务而不是数千个,但正如 documentation 中所述,您应该将大型虚拟服务拆分为多个资源。


    其他资源:

    【讨论】:

    • 感谢您的回答,尤其是链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2019-09-25
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多