Welcome to the Linux Foundation Forum!

Lab 10.1 keep getting 404 error

Hi,

I seem to be having a hard time understanding how the ingress works. I don't really understand how it is different than a NodePort. I did the lab anyway hoping to get a better explaination. I'm stuck at step 11. Please let me know what other debug data I can provide.

Ip address of the master node is inet 10.128.0.2/32

curl -H "Host: www.example.com" http://10.128.0.2/
404 page not found

kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 43d
secondapp NodePort 10.110.199.2 80:30263/TCP 55m

kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
ingress-test www.example.com 80 42m

kubectl get pods
NAME READY STATUS RESTARTS AGE
ds-one-2d2gd 1/1 Running 4 10d
ds-one-zh44r 1/1 Running 4 11d
secondapp-ddd9845d6-zdbms 1/1 Running 0 61m

kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 10.128.0.2:6443 43d
secondapp 192.168.1.121:80 56m

Comments

  • serewicz
    serewicz Posts: 1,000

    Hello,
    A 404 typically means you are reaching the ingress controller, but it doesn't know which service to send the traffic to. If you try to use the secondapp node port does it work? From the output above it looks like 10.110.199.2:30263 would be the IP and port. Does it work if you access that IP:High-port from outside the VM? I often find the service is there but does not have the labels, or the Pod doesn't have the labels to match the traffic.

    The flow should be Outside -> Ingress Controller -> Service -> Endpoint -> Pod -> Container. So I would troubleshoot starting with the service as the Ingress Controller is responding saying it doesn't know who to send it to, but got the message.

    Regards,

  • btanoue
    btanoue Posts: 59

    Serewicz,

    I can use the IP of my kubemaster node (IP's changed a bit due to reboot) at the NodePort High Port Number and indeed see the nginx page in curl. So that is good.

    kubectl get ingress
    NAME HOSTS ADDRESS PORTS AGE
    ingress-test www.example.com 80 19h

    I then went in and did a
    kubectl edit ingress ingress-test
    and saw secondapp as the ServiceName.

    I did a
    kubectl get deployments secondapp -o yaml |grep label -A2

    ' labels:'
    ' app: secondapp'

    ' name: secondapp'

    ' labels:'
    ' app: secondapp'
    ' spec:'

    So it looks like the labels are right and that the ingress should be tied to the deployment.

    I might want to try this all again, but I don't know that to delete with all the rules and trafik part.
    I also don't understand what clusterrole and clusterrolebinding do? Can you explain that in more detail?

    Is there anything else I can provide. Also ignore the formatting. of the grep please.

    If you think it would be easier to start again, I can do that, but when I tried to delete some these access controls (I think) it wouldn't let me.

    Thanks for the help.

  • btanoue
    btanoue Posts: 59

    I can see the nginx on the external IP at high port number. So I know that works as well.
    I have the secondapp labels on the ingress.

  • serewicz
    serewicz Posts: 1,000

    Check for a typo between the ingress rule and the service. It is case sensitive.

    Regards,

  • btanoue
    btanoue Posts: 59

    That was it!

    I had traefix instead of traefik
    In the ingress rule. I was so focused on the secondapp part I didn't even look there!
    Thanks!

    Also, I've been trying to write all the yams files manually so I can get a feel for them on the test.

  • btanoue
    btanoue Posts: 59

    ugh...yaml. Stupid auto-correct.

Categories

Upcoming Training