NGINX Ingress 404 not found using docker desktop on windows (not minikube)

10/6/2021

I am trying to make this basic example work on docker desktop on windows, I am not using minikube.

I managed to reach the service using NodePort with:

http://localhost:31429

But when I try http://hello-world.info (made sure to add it in hosts) - 404 not found.

<!-- begin snippet: js hide: false console: true babel: false --><!-- language: lang-html -->
kubectl get svc --all-namespaces
NAMESPACE       NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default         kubernetes                           ClusterIP      10.96.0.1        <none>        443/TCP                      20m
default         web                                  NodePort       10.111.220.81    <none>        8080:31429/TCP               6m47s
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.107.29.182    localhost     80:30266/TCP,443:32426/TCP   19m
ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.101.138.244   <none>        443/TCP                      19m
kube-system     kube-dns                             ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP       20m



kubectl get ingress
NAME              CLASS    HOSTS              ADDRESS   PORTS   AGE
example-ingress   <none>   hello-world.info             80      21m
<!-- end snippet -->

I am lost, can someone please help ? I also noticed that ADDRESS is empty.

Many thanks.

-- dev1334
docker
docker-desktop
kubernetes
nginx
windows

1 Answer

10/20/2021

Reproduced this case on Docker Desktop 4.1.1, Windows 10 Pro

  1. Install Ingress Controller for Docker Desktop:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml

  2. As I understand it, @dev1334 used an example from Set up Ingress on Minikube with the NGINX Ingress Controller article. I also tried it with some modifications to the original example.

  3. In the example for the example-ingress.yaml file in the spec.rules section, the host hello-world.info is specified. Since Docker Desktop for Windows adds to a hosts file in C:\Windows\System32\drivers\etc\hosts during installation the following entry: 127.0.0.1 kubernetes.docker.internal I changed the host in the example-ingress.yaml from hello-world.info to kubernetes.docker.internal
  4. But Ingress still didn't work as expected due to the following error: "Ignoring ingress because of error while validating ingress class" ingress="default/example-ingress" error="ingress does not contain a valid IngressClass"

    I added this line kubernetes.io/ingress.class: "nginx" to the annotations section in example-ingress.yaml

So, the final version of the example-ingress.yaml file is below.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: kubernetes.docker.internal
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 8080
          - path: /v2
            pathType: Prefix
            backend:
              service:
                name: web2
                port:
                  number: 8080

Test results

C:\Users\Andrew_Skorkin>kubectl get po -A
NAMESPACE       NAME                                        READY   STATUS      RESTARTS   AGE
default         web-79d88c97d6-c8xnf                        1/1     Running     0          112m
default         web2-5d47994f45-cxtzm                       1/1     Running     0          94m
ingress-nginx   ingress-nginx-admission-create-sjdcq        0/1     Completed   0          114m
ingress-nginx   ingress-nginx-admission-patch-wccc9         0/1     Completed   1          114m
ingress-nginx   ingress-nginx-controller-5c8d66c76d-jb4w9   1/1     Running     0          114m
...

C:\Users\Andrew_Skorkin>kubectl get svc -A
NAMESPACE       NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default         kubernetes                           ClusterIP      10.96.0.1        <none>        443/TCP                      7d15h
default         web                                  NodePort       10.101.43.157    <none>        8080:32651/TCP               114m
default         web2                                 NodePort       10.100.4.84      <none>        8080:30081/TCP               96m
ingress-nginx   ingress-nginx-controller             LoadBalancer   10.106.138.217   localhost     80:30287/TCP,443:32664/TCP   116m
ingress-nginx   ingress-nginx-controller-admission   ClusterIP      10.111.208.242   <none>        443/TCP                      116m
kube-system     kube-dns                             ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP       7d15h

C:\Users\Andrew_Skorkin>curl kubernetes.docker.internal
Hello, world!
Version: 1.0.0
Hostname: web-79d88c97d6-c8xnf

C:\Users\Andrew_Skorkin>curl kubernetes.docker.internal/v2
Hello, world!
Version: 2.0.0
Hostname: web2-5d47994f45-cxtzm
-- Andrew Skorkin
Source: StackOverflow