Skip to main content
The configuration below follows the recommended way in Public access: two ingress-nginx controllers run in the cluster, one behind an internal load balancer and one behind a public load balancer, and one name, molesignal.example.com, resolves to each of them in the internal and the public DNS. MoleSignal’s Service is molesignal on port 5080 in the namespace molesignal; in a role-split deployment, use the router’s Service instead.

Two controllers

The two controllers need different IngressClasses and different controllerValues, or each takes the other’s Ingresses. The internal controller’s Service carries the cloud provider’s internal load balancer annotation:
The public controller keeps the client source address and logs paths, never query strings; heartbeat and calendar paths carry a token, so only their prefix is logged:
Install each:

Internal Ingress

The internal Ingress forwards every path. Live queries are streamed responses, so buffering is off and the timeouts are long:

Public Ingress

The public Ingress lists only the paths to open; the controller’s default backend answers 404 for every path not listed. Keep only the paths in use:
Prefix matches by path element: /s matches /s/<share token> but not /shared, and /api/v1/public/share matches /api/v1/public/share/query. An Ingress cannot filter by method, so MoleSignal does: each path above takes only the methods it uses and answers 405 or 404 to the rest. Annotations apply to a whole Ingress object: to give some paths their own body limit or source addresses, move them to another Ingress, for example to let only the ranges of the Azure service tag AzureBotService reach the Teams callback:
Remove a moved path from molesignal-public; one path belongs in one Ingress only.

Custom domains of status pages

When a status page uses status.example.org, add a rule for it on the public controller that opens only the status page’s root paths, endpoints and web files:

Check

Confirm that each controller took its own Ingresses and that they have the addresses of their load balancers:
From the internet, the sign-in endpoint answers 404, and alert intake without a token answers 401:
Finally, in the _sys organization, list the network of the public controller’s pods as trusted proxies under Settings → Client IP recognition, see Client IP recognition.
Last modified on October 31, 2026