错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”

Posted

技术标签:

【中文标题】错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”【英文标题】:Error: UPGRADE FAILED: error validating "": error validating data: ValidationError(Ingress.spec.rules[0].http): missing required field "paths" 【发布时间】: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 是的,我也试过了,没有帮助。 【参考方案1】:

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

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

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

【讨论】:

这也是我的解决方案。 documentation 不是很清楚,但它似乎覆盖了这些值,因此您最终不得不同时指定两者。对于 TLS,我必须同时指定密钥名称和主机。

以上是关于错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”的主要内容,如果未能解决你的问题,请参考以下文章

数据库升级后得到 liquibase 校验和验证错误

数据库本地连接失败,错误代码18456怎么解决?

win10远程桌面显示发生身份验证错误(代码:0x800706be)是怎么回事啊

[转]windows7远程桌面连接失败:发生身份验证错误。要求的函数不受支持

指定数据库时验证失败错误

错误:用户身份验证失败