Search code examples
nginxkubernetesnginx-ingress

kubernetes nginx virtual server subroute


I am abit confused on the kubernetes nginx virtual subroute. https://docs.nginx.com/nginx-ingress-controller/configuration/virtualserver-and-virtualserverroute-resources/#virtualserverroute-subroute

"In the case of a prefix, the path must start with the same path as the path of the route of the VirtualServer that references this resource"

path: /coffee
action: 
    path: coffee

will the /coffee be passed to the app?

because when I try to deploy the virtualserver with the route it doesn't work (exmaple below)

path: /one
action: 
    path: hellok8s

however, this route that I am using previously is working

path: /
action: 
    path: hellok8s

So taking for example, if I have an app-1 and app-2... Should I differentiate them through the host or through a sub-path?

  • app-1: helloworld.test.com
  • app-2: helloworld2.test.com

or is there way that I can differentiate them through path like below?

  • app-1: helloworld.test.com/appone
  • app-2: helloworld.test.com/apptwo

--- edit

apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
  name: hellok8s-app-vs
spec:
  host: helloworld.moonshot.com
  tls:
    secret: nginx-tls-secret
    # basedOn: scheme
    redirect:
      enable: true
      code: 301
      upstream:
  - name: hellok8s
    service: hellok8s-service
    port: 8080
  routes:
  - path: /one
    action:
      proxy:
        upstream: hellok8s
        rewritePath: /

Solution

  • So the path is the URL which will be exposed by the Nginx to world outside. What happens to that path internally depends on the action's sub attributes, some examples:

    Here the /coffee is what end user sees but the request is sent to root of coffee service. So if the coffee would be a service in K8S running at 8080, the request will land at coffee:8080

    path: /coffee
     action:
      pass: coffee
    

    But there are more actions. And let's say you use the action.proxy then you can define at a lot more granular level what should happen with path. So in below example, we are forwarding to the coffee service but the request path is being re-written to filtercoffee

    proxy:
      upstream: coffee
      rewritePath: /filtercoffee 
    

    You can also use redirect, return in action's pass directive, but you must use one of the four listed here