Ingress with context path example
Learn about configuring an Ingress resource that rewrites the connection path in incoming requests and does a reverse-rewrite on UI calls going to the backend.
This YAML code snippet configures an ingress UI Connection with a path. The annotations here are for the ingress-nginx ingress controller and all are required for NiFi to correctly understand the incoming requests.
In the example the path includes some regex at the end: (/|$)(.*)
. This regex
informs the rewrite directives in the configuration-snippet and rewrite-target annotations.
NiFi does not handle proxy paths well, it does not understand that
https://nifi.localhost/some/path/to/nifi
coming through the defined Ingress
is intended to call the /nifi
API to load the UI. The rewrite-target
annotation addresses this by capturing the /nifi and anything that comes
after and sends that as the path to the NiFi pod. It translates
/some/path/to/nifi/
to /nifi/
. Similarly, the NiFi web UI
does not correctly form API calls going to the backend, attempting to call
/nifi/
instead of /some/path/to/nifi/
. This is addressed
by the configuration-snippet rewrite instruction. It does the reverse of the rewrite-target,
reapplying the removed context path /some/path/to
. The remaining
configuration-snippet lines are headers required by a NiFi behind a proxy. For more
information, see the NiFi System Administrator’s Guide.
spec:
uiConnection:
type: Ingress
ingressConfig:
ingressClassName: myIngressClass
ingressTLS:
- hosts:
- nifi.localhost
secretName: mynifi-ingress-cert
paths:
- port: 8443
path: "/some/path/to(/|$)(.*)"
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/configuration-snippet: |-
proxy_set_header X-ProxyScheme $scheme;
proxy_set_header X-ProxyHost $host;
proxy_set_header X-ProxyPort $server_port;
proxy_set_header X-ProxyContextPath /some/path/to;
rewrite (.*\/nifi)$ $1/ redirect;
proxy_ssl_name mynifi.default.svc.cluster.local;
nginx.ingress.kubernetes.io/rewrite-target: /$2