Ошибка: СБОЙ ОБНОВЛЕНИЯ: ошибка проверки «»: ошибка проверки данных: ошибка проверки (Ingress.spec.rules[0].http): отсутствует обязательное поле «пути»

#kubernetes #kubernetes-helm #kubernetes-ingress #kubernetes-pod

#kubernetes #kubernetes-helm #kubernetes-вход #kubernetes-pod

Вопрос:

Я очень новичок в использовании helm-диаграмм и не уверен, почему я получаю эту ошибку при попытке установить свою helm-диаграмму. Я использую —set с помощью команды установки helm, чтобы задать имя хоста в 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
 

Комментарии:

1. вы пытались сделать это: paths: - "/" вместо этого? должно быть так, как вы представили hosts.host , вместо ["/"]

2. @SaikatChakrabortty да, я тоже пробовал, не помогает.

Ответ №1:

У меня была такая же проблема, по какой-то причине, если вы определяете хост в --set , вы также должны определить путь в наборе (даже если он соответствует yaml). Вот так,

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

Я еще не подключал tls, поэтому я не уверен, что это та же проблема.

Комментарии:

1. Это также было решением с моей стороны. Документация не очень понятна, но, похоже, она переопределяет значения, поэтому вам в конечном итоге придется указывать оба. Для TLS я должен был указать как секретное имя, так и хост.