Helm 模板无法读取 ip 地址 - 无法评估字符串类型的字段 ipAddress

Helm template not able to read ip address - can't evaluate field ipAddress in type string

我正在尝试为 Istio 的 ServiceEntry 创建一个 helm 模板,其中包含静态 IP 地址的地址列表。在values.yaml中,我有

- name: test-se
  namespace: test-se-ns
  egressUrls: 
  - mydbhost.com
  port: 32306
  protocol: TCP
  ipAddress: 10.2.2.2

在 .tpl 文件中,我试图将 ipAddress 的值添​​加到列表中

  {{- with .ipAddress }}
  addresses: 
  - {{ .ipAddress | quote }}
  {{- end }}

总是失败并出现异常

templates/_service_entry.tpl:18:13:在 <.ipAddress> 处执行“common.serviceentry.tpl”:无法计算字符串类型

中的字段 ipAddress

知道我做错了什么吗?

如果您使用 with,您会将您用作 with 的内容作为该块内的上下文。

所以,用点来指代它。

{{- with .ipAddress }}
addresses: 
  - {{ . | quote }}
{{- end }}

来自docs

{{with pipeline}} T1 {{end}}
    If the value of the pipeline is empty, no output is generated;
    otherwise, dot is set to the value of the pipeline and T1 is
    executed.

在这种情况下,if 似乎也很合适,因为您对新上下文的处理不多。

{{- if .ipAddress }}
addresses: 
  - {{ .ipAddress | quote }}
{{- end }}

当您在 Helm 中使用 with 时,您更改了 . 的范围,因此 Helm 查找对象而不是字符串,您可以在 [=14] 中阅读更多相关信息=].

但无论如何,我认为在你的情况下,你需要使用 range 而不是 with,你可以看一个例子 here