【问题标题】:Error: UPGRADE FAILED: error validating "": error validating data: ValidationError(Ingress.spec.rules[0].http): missing required field "paths"错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”
【发布时间】:2021-03-13 11:15:28
【问题描述】:

我对使用 helm 图表非常陌生,不知道为什么在尝试安装 helm 图表时会出现此错误。我正在使用 --set 和 helm install 命令将主机名设置为 ingress.hosts[0].host。我不明白为什么它说缺少路径,因为“路径”已经存在。

ingress.yaml

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "project.fullname" . -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    app.kubernetes.io/name: {{ include "project.name" . }}
    helm.sh/chart: {{ include "project.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
  {{- with .Values.ingress.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: {{ $fullName }}
              servicePort: http
        {{- end }}
  {{- end }}
{{- end }}

values.yaml

...
...
...
ingress:
  enabled: true
  hostname: some_hostname
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "180"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "180"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "180"
  hosts:
    - host: some_hostname
      paths: [/]

  tls:
    - secretName: some_secretname
      hosts: 
        - some_hostname

resources: {}

...
...
...

安装 helm 的命令

helm upgrade --install $(PROJECT_NAME) --set ingress.hosts[0].host="${HOST_NAME} --set ingress.tls[0].hosts="{${HOST_NAME}}"" 

错误:

Error: UPGRADE FAILED: error validating "": error validating data: ValidationError(Ingress.spec.rules[0].http): missing required field "paths" in io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue

【问题讨论】:

  • 您是否尝试过这样做:paths: - "/"?应该就像你介绍的hosts.host,而不是["/"]
  • @SaikatChakrabortty 是的,我也试过了,没有帮助。

标签: kubernetes kubernetes-helm kubernetes-ingress kubernetes-pod


【解决方案1】:

我遇到了同样的问题,由于某种原因,如果您在 --set 中定义主机,您还必须在集合中定义路径(即使它与 yaml 匹配)。像这样,

helm upgrade --install $(PROJECT_NAME) --set ingress.hosts[0].host=${HOST_NAME}  --set ingress.hosts[0].paths[0]=/

我还没有完成 tls,所以我不确定这是否有同样的问题。

【讨论】:

  • 这也是我的解决方案。 documentation 不是很清楚,但它似乎覆盖了这些值,因此您最终不得不同时指定两者。对于 TLS,我必须同时指定密钥名称和主机。
猜你喜欢
  • 2021-12-10
  • 2021-12-28
  • 2023-03-22
  • 2016-02-23
  • 2016-01-15
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多