To clarify, we’re self-hosting n8n inside a Kubernetes cluster (non-AWS) using Traefik as our ingress controller. The n8n pod is deployed in the bots namespace, and we’re routing requests to it using an IngressRoute. Our DNS app.domain.co.uk points directly to Traefik’s LoadBalancer IP.
Here’s what we’ve configured:
TLS is handled by Traefik with the default cert resolver (currently showing Traefik’s self-signed cert while testing). n8n-svc is a ClusterIP service that exposes port 5678 internally to the pod.
We’re using the following n8n environment variables:
We also tried setting N8N_WEBHOOK_URL=https://app.domain.co.uk (i.e. without the port), but that didn’t fix the issue.
Here’s what we’ve tried so far:
Created an IngressRoute with PathPrefix rules for /webhook and /webhook-test Attached a middleware to inject the correct X-Forwarded-* headers Verified that the workflow is active and has the correct webhookPath in Postgres Restarted the n8n-svc deployment after each change Tried removing port :5678 from both the ingress and environment settings Issued curl requests to both:
https://app.domain.co.uk:5678/webhook-test/teams > connection refused https://app.domain.co.uk/webhook-test/teams > 404 page not found
We also ran kubectl logs on the pod while sending the request — no logs are printed, so the request never hits the container.
We can access the UI via kubectl port-forward, but we’re not exposing the UI externally yet until webhooks work reliably. Given that port 5678 is internal, we’re assuming webhooks need to come in via Traefik on 443.
Happy to share any other config if needed
Any advice on where we’re going wrong would be hugely appreciated