如何覆盖入口规则 helm-chart 模板
How to override ingress rules helm-chart template
这是我的 ingress.yml 文件
spec:
rules:
- host: {{- if .Values.ingress.host }} {{ tpl .Values.ingress.host . }} {{- end }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
{{- range $port := .Values.container.app.port }}
- path: {{ tpl $port.path $ }}
pathType: Prefix
backend:
service:
name: {{ $.Release.Name }}
port:
number: {{ int $port.port }}
{{- end }}
{{ end }}
我想覆盖此规则,这里的某些服务是我在 values.yml 文件中尝试做的
ingress:
scheme: internal
host: test.com
paths:
- path: /
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
- path: /
pathType: Prefix
backend:
service:
name: test
port:
number: 3000
但在我部署后它根本没有覆盖可能是格式错误不确定
更新
我尝试过这种方式,但它仍然没有覆盖入口中的规则
hosts:
- host: test.com
paths:
- path: /test
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
- path: /test
pathType: Prefix
backend:
service:
name: test-dev
port:
number: 3000
ingress.yaml
应该类似于
kind: Ingress
metadata:
name: {{ $name }}
labels:
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- with $_annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
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 | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $name }}
servicePort: 80
{{- end }}
{{- end }}
{{- end }}
values.yaml
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: test.example.io
paths: [/path]
# tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
另一个例子:
Ingress.yaml : https://github.com/helm/charts/blob/master/stable/ghost/templates/ingress.yaml
values.yaml : https://github.com/helm/charts/blob/master/stable/ghost/values.yaml
我假设这不是整个 ingress.yaml 模板,因为如果是,您将完全错过 apiVersion
、kind
和 metadata
块。 :)
helm 可以使用 helm create <chartName>
创建基线图表。在此基线图表中,有一个 ingress.yaml
模板和相应的 values.yaml
,它工作正常并遵循 helm 最佳实践。我建议您使用它来简化和加快您的工作流程,而不是编写您自己的模板,即使您一开始并不理解它。 helm create
生成的模板值得研究,因为可以从中学到很多东西,它们很好地展示了如何解决编写 helm 图表时的一些常见问题,以及如何遵循标签、注释等的最佳实践。
无论如何,如果您想坚持使用该数据结构并创建自己的模板,这就是我在测试期间使用的模板。我使用 helm template
命令检查在提供您的值时是否存在任何渲染错误。
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}
spec:
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
{{- range .Values.ingress.paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend:
service: {{ .backend.service | toYaml | nindent 14 }}
{{- end }}
这是我的 ingress.yml 文件
spec:
rules:
- host: {{- if .Values.ingress.host }} {{ tpl .Values.ingress.host . }} {{- end }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
{{- range $port := .Values.container.app.port }}
- path: {{ tpl $port.path $ }}
pathType: Prefix
backend:
service:
name: {{ $.Release.Name }}
port:
number: {{ int $port.port }}
{{- end }}
{{ end }}
我想覆盖此规则,这里的某些服务是我在 values.yml 文件中尝试做的
ingress:
scheme: internal
host: test.com
paths:
- path: /
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
- path: /
pathType: Prefix
backend:
service:
name: test
port:
number: 3000
但在我部署后它根本没有覆盖可能是格式错误不确定
更新
我尝试过这种方式,但它仍然没有覆盖入口中的规则
hosts:
- host: test.com
paths:
- path: /test
pathType: Prefix
backend:
service:
name: ssl-redirect
port:
name: use-annotation
- path: /test
pathType: Prefix
backend:
service:
name: test-dev
port:
number: 3000
ingress.yaml
应该类似于
kind: Ingress
metadata:
name: {{ $name }}
labels:
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- with $_annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
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 | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $name }}
servicePort: 80
{{- end }}
{{- end }}
{{- end }}
values.yaml
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: test.example.io
paths: [/path]
# tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
另一个例子:
Ingress.yaml : https://github.com/helm/charts/blob/master/stable/ghost/templates/ingress.yaml
values.yaml : https://github.com/helm/charts/blob/master/stable/ghost/values.yaml
我假设这不是整个 ingress.yaml 模板,因为如果是,您将完全错过 apiVersion
、kind
和 metadata
块。 :)
helm 可以使用 helm create <chartName>
创建基线图表。在此基线图表中,有一个 ingress.yaml
模板和相应的 values.yaml
,它工作正常并遵循 helm 最佳实践。我建议您使用它来简化和加快您的工作流程,而不是编写您自己的模板,即使您一开始并不理解它。 helm create
生成的模板值得研究,因为可以从中学到很多东西,它们很好地展示了如何解决编写 helm 图表时的一些常见问题,以及如何遵循标签、注释等的最佳实践。
无论如何,如果您想坚持使用该数据结构并创建自己的模板,这就是我在测试期间使用的模板。我使用 helm template
命令检查在提供您的值时是否存在任何渲染错误。
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}
spec:
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
{{- range .Values.ingress.paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend:
service: {{ .backend.service | toYaml | nindent 14 }}
{{- end }}