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

如何在Helm Chart中使用命名模板在运行时设置service.port值?

问题解答

你这种方式无法实现通过命名模板动态设置service.port的需求,原因如下:

Helm的--set参数仅用于直接传递字面量值或简单层级结构,不会解析其中的模板语法(包括include调用命名模板的写法)。执行你给出的命令后,service.port会被设置为字符串{{ include changePortNo . }}的字面量,而非调用模板生成的实际端口数值。

正确实现方式

方式1:在Chart模板中直接引用命名模板

直接在templates/service.yaml里将端口字段替换为对命名模板的调用,Helm在渲染Chart时会自动执行模板逻辑生成端口值:

# templates/service.yaml
spec:
  ports:
    - port: {{ include "changePortNo" . }}
      targetPort: http
      protocol: TCP
      name: http

这种方式下,安装时无需额外的--set参数,Helm会自动调用_helpers.tpl中定义的changePortNo模板生成端口。

方式2:支持命令行动态传参调整模板输出

如果需要通过命令行动态控制模板生成的端口值,可以在values.yaml中定义一个参数,让命名模板根据该参数输出不同结果:

  1. 在_helpers.tpl中修改模板,支持读取自定义参数:
# _helpers.tpl
{{- define "changePortNo" -}}
{{- /* 如果命令行传入了customPort则使用该值,否则用默认端口 */ -}}
{{- .Values.customPort | default 80 -}}
{{- end -}}
  1. 在templates/service.yaml中保持模板调用:
spec:
  ports:
    - port: {{ include "changePortNo" . }}
      targetPort: http
      protocol: TCP
      name: http
  1. 安装时通过--set传入自定义端口:
helm install --set customPort=8080 nginx-test .

如果不传入customPort,则会使用默认的80端口。

内容的提问来源于stack exchange,提问作者Sathish Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:22:35