I have tested this behavior on my cluster. When I tried configuration provided by you I got below Warning
:
@microk8s:~$ microk8s kubectl get ing
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Also if you will describe it you will get the same Warning
.
@microk8s:~$ kk describe ing
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Name: hello-ing
Namespace: default
Address:
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
*
/hello hello-svc:80 10.1.128.202:8080)
There is similar Github question regarding this error.
The output you see is just a default for when there is no default backend
https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/kubectl/pkg/describe/describe.go#L2393
However, it's working normally.
$ curl 127.0.0.1/hello
Hello, world!
Version: 1.0.0
Hostname: hello-647c466dbc-99rml
If you would add default backend you would get output like:
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
Name: ingress
Namespace: default
Address: 127.0.0.1
Default backend: test2:80 10.1.128.205:80)
Rules:
Host Path Backends
---- ---- --------
*
/hello hello-svc:80 10.1.128.204:8080)
and Ingress
looks like:
spec:
backend:
serviceName: test2
servicePort: 80
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello-svc
servicePort: 80
Though I cannot understand why something that worked half a year ago doesn't work now.
As new apiVersion
changes a bit syntax, adding some features, parameters, etc, there might be situation when after update/upgrade some resources cannot be validated anymore by Kubernetes
. As stated in this article.
An object definition in Kubernetes requires an apiVersion field. When Kubernetes has a release that updates what is available for you to use—changes something in its API—a new apiVersion is created.
However, the official Kubernetes documentation provides little guidance on apiVersion. This guide gives you a cheat sheet on which version to use, explains each version, and gives you the timeline of releases.
If you would only change apiVersion in your YAML, you would get error:
error: error validating "ingress.yaml": error validating data: [ValidationError(Ingress.spec.rules[0].http.paths[0].backend): unknown field "serviceName" in io.k8s.api.networking.v1.IngressBackend, ValidationError(Ingress.spec.rules[0].http.paths[0].backend): unknown field "servicePort" in io.k8s.api.networking.v1.IngressBackend]; if you choose to ignore these errors, turn validation off with --validate=false
To sum up, you got this <error: endpoints "default-http-backend" not found>
as there was no default backend
configured.
For more details you can check Kubernetes Api Docs.