Symptoms:
When accessing the application, it returns a 404 error default backend.
Ingress objects are not updating new IPs:
# kubectl get ingress -n ingress-app
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-app app default host.example.com >>>10.10.1.10<<< 80 44d
>>>OLD IP<<<
The ingress describe output does not show the Contour Ingress Class annotation:
# kubectl describe ingress -n ingress-app app
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app
namespace: ingress-app
annotations:
kubernetes.io/ingress.class: default
spec:
...
In later versions of Kubernetes, Contour requires an annotation indicating the IngressClass. If the Contour annotation is missing, Ingress objects won't be updated with external IP addresses.
Add the "kubernetes.io/ingress.class:=contour" annotation to the ingress objects.
Workaround:
The workaround to fix this issue is annotating the ingress objects, please follow the steps below:
1. Identify the ingress objects:
# kubectl get ingress -n ingress-app
...
NAMESPACE NAME
ingress-app app
...
2. Run the following command to annotate the object:
# kubectl annotate ingress -n ingress-app app "kubernetes.io/ingress.class:=contour"
ingress.networking.k8s.io/app-ingress annotated
3. The ingress objects will update the IP and show a newer date:
# kubectl get ingress -n ingress-app
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-app app default host.example.com 10.10.1.11 80 1m
>>>NEW IP<<<
External Links:
Impact/Risks:
Applications that are dependent on ingress objects won't be accessible.