skip to Main Content

currently I’m trying the following setup:

I have:

  • one cluster
  • one Ingress Controller
  • one url (myapp.onazure.com)
  • two namespaces for two applications default and default-test
  • two deployments, ingress objects, services for the namespaces

I can easily reach my app from the default namespace with path based routing ‘/’ as a prefix rule
Now i have tried to configure the second namespace and following rule: /testing to hit another service

Unfortunately i get an HTTP404 when i try to hit the following URL myapp.onazure.com/testing/openapi.json

What did I miss?

Working Ingress 1

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: liveapi-ingress-object
  namespace: default
  annotations:
    kubernetes.io/ingress.class: public-nginx
spec:
  tls:
    - hosts:
        - myapp-region1.onazure.com
        - myapp-region2.onazure.com
      secretName: ingress-tls-csi
  rules:
    - host: - myapp-region1.onazure.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: liveapi-svc
                port:
                  number: 8080
    - host: myapp-region2.onazure.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: liveapi-svc
                port:
                  number: 8080

Not working Ingress 2

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: liveapi-ingress-object-testing
  namespace: default-testing
  annotations:
    kubernetes.io/ingress.class: public-nginx
    #nginx.ingress.kubernetes.io/rewrite-target: /testing
spec:
  tls:
    - hosts:
        - myapp-region1.onazure.com
        - myapp-region2.onazure.com
      secretName: ingress-tls-csi-testing
  rules:
    - host: myapp-region1.onazure.com
      http:
        paths:
          - path: /testing
            #pathType: Prefix
            backend:
              service:
                name: liveapi-svc-testing
                port:
                  number: 8080
    - host: myapp-region2.onazure.com
      http:
        paths:
          - path: /testing
            #pathType: Prefix
            backend:
              service:
                name: liveapi-svc-testing
                port:
                  number: 8080


Maybe I am missing a rewrite target to simply ‘/’ in the testing namespace ingress?

2

Answers


  1. Chosen as BEST ANSWER

    Finally I figured out the missing part. I had to add the following statement to the not working ingress object:

      annotations:
        kubernetes.io/ingress.class: public-nginx
        nginx.ingress.kubernetes.io/use-regex: "true"
        nginx.ingress.kubernetes.io/rewrite-target: /$1
    

    Please see the complete ingress object:

    kind: Ingress
    apiVersion: networking.k8s.io/v1
    metadata:
      name: liveapi-ingress-object
      namespace: default-testing
      annotations:
        kubernetes.io/ingress.class: public-nginx
        nginx.ingress.kubernetes.io/use-regex: "true"
        nginx.ingress.kubernetes.io/rewrite-target: /$1
    spec:
      tls:
        - hosts:
            - myapp.onazure.com
          secretName: ingress-tls-csi-testing
      rules:
        - host: myapp.onazure.com
          http:
            paths:
              - path: /testing/(.*)
                pathType: Prefix
                backend:
                  service:
                    name: liveapi-svc-testing
                    port:
                      number: 8000 
    
     
    

  2. Use full DNS name of a service,

    $SERVICE.$NAMESPACE.svc.cluster.local
    

    But you need to make sure your ignress controller has acccess to the desired namespace.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search