如何覆盖入口规则 helm-chart 模板

问题描述 投票:0回答:2

这是我的 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 }}

我想覆盖此规则,这里的某些服务是我尝试在 value.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
kubernetes kubernetes-helm
2个回答
2
投票

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.yamlhttps://github.com/helm/charts/blob/master/stable/ghost/templates/ingress.yaml

values.yamlhttps://github.com/helm/charts/blob/master/stable/ghost/values.yaml


0
投票

我假设这不是整个 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 }}

© www.soinside.com 2019 - 2024. All rights reserved.