Kubernetes IngressClass | error=”ingress does not contain a valid IngressClass"

Kubernetes IngressClass | error=”ingress does not contain a valid IngressClass"

If you have come across this error after updating Kubernetes to the latest version. This solution should work.

IngressClass is ingress resource that was added in Kubernetes 1.18 helps to target a specific Ingress controller while running multiple ingress controller in a single cluster.

Earlier kubernetes.io/ingress.class annotation was used to specify the ingress controller which is deprecated by 1.18. Here we are directly mentioning the name of the controller rather than creating a the resource.

Solution

Step 1 - Create IngressClass resource

First we have to create IngressClass ingress resource. (Check if there is any kubectl get ingressclass -A -o yaml )

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
spec:
    # use your controller name.
  controller: k8s.io/ingress-nginx

Step 2 - Create/Update Ingress

Update ingress resource spec.ingressClassName with ingress class name nginx. This should resolve the problem.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

Set Default IngressClass

Instead of assigning ingressClassName inside ingress resource, we can set a specific ingress controller as default by adding annotation [ingressclass.kubernetes.io/is-default-class](http://ingressclass.kubernetes.io/is-default-class) to "true".

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: nginx
    annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
    # use your controller name.
  controller: k8s.io/ingress-nginx

One of the above solution should fix the invalid ingress class error. Please note that both Kubernetes and Ingress controller should be updated to the latest version to make sure this works.


https://kubernetes.io/docs/concepts/services-networking/ingress/

https://kubernetes.io/docs/concepts/services-networking/ingress/#default-ingress-class

https://github.com/haproxytech/kubernetes-ingress/blob/master/documentation/ingressclass.md

https://stackoverflow.com/a/64912413/3473281