I would like to simplify the answer a bit further for those who are reletively new to Kubernetes and its ingress options in particular.
There are 2 separate things that need to be present for ingress to work:
- Ingress Controller(essentially a separate Pod/Deployment along with
a Service that can be used to utilize routing and proxying. Based on
nginx container for example); - Ingress rules(a separate Kubernetes
resourse withkind: Ingress
. Will only take effect if Ingress
Controller is already deployed)
Now, Ingress Controller can be deployed in any namespace and is, in fact, usually deployed in a namespace separate from your app services. It can out-of-the-box see Ingress rules in all namespaces in the cluster and will pick them up.
The Ingress rules, however, must reside in the namespace where the app that they configure reside.
There are some workarounds for that, but this is the most common approach.