skip to Main Content

My ingress cannot route to endpoint.

I provided everything. Nginx-controller works properly. I added the hostname bago.com as loadbalancerip. But it doesn’t work.

Here is my ingres’s yaml file

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
spec:
  rules:
    - host: bago.com
    - http:
        paths:
          - path: /web1/
            pathType: Exact
            backend:
              service:
                name: web1-clusterip
                port:
                  number: 8081
          - path: /web2/
            pathType: Exact
            backend:
              service:
                name: web2-clusterip
                port:
                  number: 8082

svc and ingress running

bahaddin@bahaddin-ThinkPad-E15-Gen-2:~/projects/personal/exposer/k8s-ingress$ k get svc
NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
kubernetes       ClusterIP   10.12.0.1     <none>        443/TCP    154m
web1-clusterip   ClusterIP   10.12.6.102   <none>        8081/TCP   145m
web2-clusertip   ClusterIP   10.12.9.22    <none>        8082/TCP   149m

bahaddin@bahaddin-ThinkPad-E15-Gen-2:~/projects/personal/exposer/k8s-ingress$ k get ingress
NAME              CLASS    HOSTS      ADDRESS          PORTS   AGE
minimal-ingress   <none>   bago.com   34.102.241.199   80      121m
bahaddin@bahaddin-ThinkPad-E15-Gen-2:~/projects/personal/exposer/k8s-ingress$ 

Here is my API java code.

@RequestMapping("/web1")
@RestController
public class Controller {

    @GetMapping("/hello")
    public String foo() {
        return "hello from web1 ms";
    }

}

server.port=8081 on container level

my service

Web1-service.
apiVersion: v1
kind: Service
metadata:
  name: web1-clusterip
spec:
  ports:
    - protocol: "TCP"
      port: 8081
  selector:
    app: web1-dp
  type: ClusterIP

But when I type in the browser

http://bago.com/web1/hello 
http://bago.com/web1/hello

I got a 404 not found error
Screenshot
enter image description here

2

Answers


  1. I see that for the ingress, you have class as <none> if your nginx-controller is making use of a class then you have to define that as ingressClassName under the spec section while creating ingress (rules).

    you can identify the classname by describing the ingress-controller.
    kubectl describe deployments.apps <your-ingress-controller-deployment> -n=<namespace> and look for --ingress-class parameter by default the classname should be nginx.

    This class name is useful if more than one ingress-controller are present on the cluster, by defining the class we can tell which ingress-controller is responsible for which specific ingress rules.

    Login or Signup to reply.
  2. You have an issue in your ingress manifest. You have two items in the list, while you want to have one. Additionally, you are missing the ingress class.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
    spec:
      rules:
        # these are indivudal list items
        - host: bago.com
        - http: ...
    

    You have to change the manifest so that you have a single item. You should also add the ingress class.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
    spec:
      # this should be the ingress class, i.e. nginx
      ingressClassName: my-ingress-class
      rules:
        # this list has only 1 items, which is an object. 
        # note the dash (-) 
        - host: bago.com
          http: ...
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search