You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Helm动态读取values.yaml中URI的匹配类型

解决Helm模板动态生成Virtual Service的HTTP Match URI配置问题

问题背景

需要通过Helm模板生成Istio Virtual Service,支持单个或多个match块,核心难点是动态解析values.yaml中paths.uri的两种配置格式:

  1. 字符串数组形式(批量前缀匹配)
  2. 带exact/prefix/regex键的映射形式(精确匹配、前缀匹配、正则匹配)

当前模板无法正确识别uri下的匹配类型键,导致生成的配置不符合预期。

修正后的Helm模板代码

{{- range $path := .Values.paths }}
  - match:
    {{- if kindIs "slice" $path.uri }}
      {{- range $uri := $path.uri }}
      - uri:
          prefix: "{{ $uri }}"
        {{- with $path.method }}
        method: "{{ . }}"
        {{- end }}
      {{- end }}
    {{- else if kindIs "map" $path.uri }}
      - uri:
          {{- toYaml $path.uri | nindent 12 }}
        {{- with $path.method }}
        method: "{{ . }}"
        {{- end }}
    {{- end }}
    {{- with $path.rewrite }}
    rewrite:
      uri: "{{ . }}"
    {{- end }}
    route:
    - destination:
        port:
          number: {{ $path.servicePort }}
        host: "{{ .Values.service.name }}" # 替换为你的服务名称变量
{{- end }}

关键解析

  1. 类型判断:用kindIs函数判断$path.uri是数组(slice)还是映射(map),分别适配两种配置格式
  2. 数组格式处理:遍历数组中的每个URI值,默认生成prefix类型的匹配规则(可根据需求调整为regex等)
  3. 映射格式处理:直接用toYaml渲染uri下的键值对,完美支持exact/prefix/regex三种匹配类型
  4. 可选字段渲染:用with关键字处理可选的method和rewrite字段,仅在配置存在时生成对应内容
  5. 正确循环逻辑:外层循环遍历paths数组中的每个配置项,修正了原模板错误的遍历逻辑

生成结果示例

对应你提供的values.yaml配置,模板会生成如下Virtual Service片段:

- match:
      - uri:
          prefix: "/process-devlopment/projects"
        method: "POST"
      - uri:
          prefix: "/process-devlopment/modules"
        method: "POST"
    rewrite:
      uri: "/process-devlopment/projects"
    route:
    - destination:
        port:
          number: 80
        host: "your-service-name"
  - match:
      - uri:
          exact: "/process-devlopment/projects"
    rewrite:
      uri: "/process-devlopment/modules"
    route:
    - destination:
        port:
          number: 80
        host: "your-service-name"

内容的提问来源于stack exchange,提问作者amey kambli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:57:30