Skip to main content
The configuration below follows the recommended way in Public access: one Gateway sits 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. The examples use Gateway API v1 and fit every implementation. Source address allowlists, rate limits, body limits and access logs are not part of Gateway API; each implementation provides them with its own policies, see Policies of the implementation. MoleSignal’s Service is molesignal on port 5080 in the namespace molesignal; in a role-split deployment, use the router’s Service instead.

Two Gateways

Set gatewayClassName to the GatewayClass of the implementation in use. The internal Gateway must land on an internal load balancer: when the implementation supports infrastructure, use it to carry the cloud provider’s annotations to the load balancer’s Service; otherwise follow the implementation’s documentation.

Internal HTTPRoute

The internal HTTPRoute forwards every path. Live queries are streamed responses, so they get a longer timeout of their own:

Public HTTPRoute

The public HTTPRoute matches only the paths to open, with their methods; the gateway answers 404 to every request that matches nothing. Keep only the matches in use:
PathPrefix matches by path element: /s matches /s/<share token> but not /shared. Matching by method is an extended feature of Gateway API that most implementations support; when the implementation in use does not, drop method and let MoleSignal answer 405 or 404 to the methods it does not take.

Policies of the implementation

Source address allowlists, rate limits, body limits and real client address detection are not part of Gateway API; each implementation provides them with its own resources, for example:
  • Envoy Gateway: SecurityPolicy allows by source address, BackendTrafficPolicy limits rates, and ClientTrafficPolicy detects the real client address.
  • Istio: AuthorizationPolicy allows by source address.
  • NGINX Gateway Fabric: ClientSettingsPolicy sets the body limit.
With another implementation, configure the same limits as its documentation describes. For example, to let only the ranges of the Azure service tag AzureBotService reach the Teams callback on Envoy Gateway, move the Teams match to an HTTPRoute of its own, molesignal-public-teams, and attach a SecurityPolicy to it:

Custom domains of status pages

When a status page uses status.example.org, add a listener for that name to the public Gateway, and an HTTPRoute that opens only the status page’s root paths, endpoints and web files:

Check

Confirm that both Gateways have addresses and that the HTTPRoutes report Accepted and ResolvedRefs:
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 gateway’s proxies as trusted proxies under Settings → Client IP recognition, see Client IP recognition.
Last modified on October 31, 2026