ingress-nginx: Breaking change in helm chart 4.4.1

What happened:

FluxCD started to upgrade my ingress-nginx helmchart because it’s allowed for non-breaking changes. Suddenly my ingresses weren’t accessible anymore giving the following error: ingress y/ingress-x contains invalid path

It turned out that path: / was missing, while this worked fine with helm chart 4.4.0.

What you expected to happen: The ingress should still be accessible when path: / is missing, or it should be tagged as a breaking change.

NGINX Ingress controller version (exec into the pod and run nginx-ingress-controller --version.): NGINX Ingress controller Release: v1.5.2 Build: e0733c7fd0520ec8d7f351ca49b09199d35d35df Repository: https://github.com/kubernetes/ingress-nginx nginx version: nginx/1.21.6 Kubernetes version (use kubectl version):

Environment:

  • Cloud provider or hardware configuration: GCP/GKE

  • How was the ingress-nginx-controller installed: Helm chart managed by FluxCD

    • If helm was used then please show output of helm ls -A | grep -i ingress ingress-nginx ingress-nginx 11 2022-12-29 22:02:44.451484653 +0000 UTC deployed ingress-nginx-4.4.1 1.5.2

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 16 (14 by maintainers)

Most upvoted comments

@rikatz below the config I was using when the issue occurred. I had to add path: / a line above pathType to resolve the issue.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/issuer: letsencrypt-prod
    kubectl.kubernetes.io/last-applied-configuration: |
      [ANONIMIZED]
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header l5d-dst-override $service_name.$namespace.svc.cluster.local:$service_port;
      grpc_set_header l5d-dst-override $service_name.$namespace.svc.cluster.local:$service_port;
  creationTimestamp: "2019-12-23T11:19:19Z"
  generation: 6
  labels:
    app.kubernetes.io/component: [ANONIMIZED]
    app.kubernetes.io/name: [ANONIMIZED]
    app.kubernetes.io/part-of: [ANONIMIZED]
  name: [ANONIMIZED]
  namespace: [ANONIMIZED]
  resourceVersion: "888097965"
  uid: [ANONIMIZED]
spec:
  rules:
  - host: [ANONIMIZED]
    http:
      paths:
      - backend:
          service:
            name: [ANONIMIZED]
            port:
              number: 80
        pathType: ImplementationSpecific
  - host: [ANONIMIZED]
    http:
      paths:
      - backend:
          service:
            name: [ANONIMIZED]
            port:
              number: 80
        pathType: ImplementationSpecific
  - host: [ANONIMIZED]
    http:
      paths:
      - backend:
          service:
            name: [ANONIMIZED]
            port:
              number: 80
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - [ANONIMIZED]
    - [ANONIMIZED]
    - [ANONIMIZED]
    secretName: [ANONIMIZED]
status:
  loadBalancer:
    ingress:
    - ip: [ANONIMIZED]