Home > Back-end >  Ingress cannot route the apis
Ingress cannot route the apis

Time:05-22

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

CodePudding user response:

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.

CodePudding user response:

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: ...
  • Related