skip to Main Content

I have an ingress controller with two services running behind it. I also have an SSL certificate installed with Lets Encrypt and cert-manager.

For some reason, whenever i make a request to my endpoints, it returns a 404 not found error. For example

http://stefandeboer.com/api/neume-billing-service/Transaction

returns

<html>

<head>
    <title>404 Not Found</title>
</head>

<body>
    <center>
        <h1>404 Not Found</h1>
    </center>
    <hr>
    <center>nginx</center>
</body>

</html>

This is the YAML for my ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/use-regex: "true"
  creationTimestamp: "2023-06-05T22:51:36Z"
  generation: 3
  name: neume-ingress
  namespace: default
  resourceVersion: "1888643"
  uid: 9abf4d0f-3370-4856-b3e2-c555c7042739
spec:
  rules:
  - host: stefandeboer.com
  - http:
      paths:
      - backend:
          service:
            name: neume-user-service
            port:
              number: 80
        path: /api/neume-user-service(/|$)(.*)
        pathType: Prefix
      - backend:
          service:
            name: neume-billing-service
            port:
              number: 80
        path: /api/neume-billing-service(/|$)(.*)
        pathType: Prefix
  tls:
  - hosts:
    - stefandeboer.com
    secretName: tls-secret
status:
  loadBalancer:
    ingress:
    - ip: 20.4.165.91

Both my pods are running in the same namespace:

NAME                                                READY   STATUS    RESTARTS   AGE
neume-billing-service-deployment-769ff6487b-sjk5d   1/1     Running   0          31m
neume-user-service-deployment-5674b4b75d-8zhgp      1/1     Running   0          29m

What could i be doing wrong here?

2

Answers


  1. Chosen as BEST ANSWER

    After making some tweaks to my YAML file it worked like a charm! I put the http under the host object and made sure to add the $2 after the target-rewrite.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        cert-manager.io/cluster-issuer: letsencrypt
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/rewrite-target: /$2
        nginx.ingress.kubernetes.io/use-regex: "true"
      creationTimestamp: "2023-06-06T00:57:42Z"
      generation: 4
      name: neume-ingress
      namespace: default
      resourceVersion: "1925615"
      uid: d3b349c2-49d1-488b-bc15-148acfce095a
    spec:
      rules:
      - host: stefandeboer.com
        http:
          paths:
          - backend:
              service:
                name: neume-user-service
                port:
                  number: 80
            path: /neume-user-service(/|$)(.*)
            pathType: Prefix
          - backend:
              service:
                name: neume-billing-service
                port:
                  number: 80
            path: /neume-billing-service(/|$)(.*)
            pathType: Prefix
      tls:
      - hosts:
        - stefandeboer.com
        secretName: tls-secret
    status:
      loadBalancer:
        ingress:
        - ip: 20.4.165.91
    

  2. its looks like that you have miss configuration on your ingress, the host declaration must be part of the same object as the HTTP declaration.

    instead of:

      rules:
      - host: stefandeboer.com
      - http:
    

    you need to do it like this:

       rules:
       - host: stefandeboer.com
         http:
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search