【发布时间】:2020-12-05 14:22:40
【问题描述】:
我有以下 ingress.yaml:
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host }} // row 31
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
以及以下值来提供此模板:
hosts:
host: "app.example.com"
paths:
- "/api"
- "/oauth"
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
当我运行“helm install”时,它失败了:
错误:升级失败:模板:templates/ingress.yaml:31:15: 在 <.host> 处执行“templates/ingress.yaml”:无法评估字段 类型接口 {}
中的主机
所以对我来说,hosts 必须是一个列表,而不是字典(因为 range 指令)。所以我转换它:
hosts:
- host: "app.example.com"
paths:
- "/api"
- "/oauth"
但在这种情况下,我得到:
警告:主机的目的地是一个表。忽略非表值 [map[host:app.example.com 路径:[/api /oauth]]]
还有和上面一样的错误。
如何让它工作?
更新 1
价值观:
ingress:
enabled: true
rules:
- host: c1.app.example.com
paths:
- /api
- /oauth
- host: c2.app.example.com
paths:
- /api
- /oauth
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
模板:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.rules }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
更新 2
我知道问题不在于代码,而在于命令行。我喂的是字符串而不是数组。
helm 模板 ... --set ingress.hosts.host=c1.app.example.com ...
我将尝试弄清楚如何提供多个值并在此处进行更新。
更新 3
我从值中删除了数据:
ingress:
enabled: false
rules:
- host:
tls:
- secretName:
hosts: []
【问题讨论】:
-
问题解决了吗?
-
@HelloWorld 我刚刚放置了 UPDATE 3。这是一个解决方案。
-
请将答案作为实际答案提供,而不是更新问题。让问题成为问题并使用答案发布答案,不要将它们混合在一起。很难看出这是解决方案。添加答案后,请将其标记为已接受。谢谢
-
@HelloWorld 完成。
标签: kubernetes-helm kubernetes-ingress