Skip to Content
Networking & Egress

Networking & Egress

Marshal is designed to run entirely inside your own network. This page covers the network model you should expect, the outbound access the cluster needs, and how to plan access for whoever runs the install. For the pieces that make this possible architecturally, see Architecture; for the full pre-install checklist, see Installing Marshal.

The network model

By default, Marshal’s Kubernetes control plane and the application itself are not exposed to the public internet. Everything — the API, the gateway, the web dashboard, and every session pod — runs inside your VPC or VNet, reachable only from inside your network (or through whatever access path you choose to expose, such as your own internal load balancer or ingress).

No inbound access into your environment is ever required for Marshal to operate. The cluster only needs to make outbound connections — nothing on the Marshal side needs to reach in.

Reaching the cluster during install

Because the cluster isn’t exposed to the internet, whoever runs the install (terraform apply, helm install, or your GitOps sync) needs a way to reach inside your network first.

Nothing extra to set up — run the install from a machine that already has VPN or bastion access into the target VPC/VNet, the same way you’d reach any other private resource in your network.

Outbound egress the cluster needs

The cluster needs outbound HTTPS (443) to the following *.marshal.codes destinations. Four are always required by the chart’s defaults; one is required only if you turn on webhook relay.

DestinationPurposeRequired?
registry.marshal.codesImage and Helm chart pulls. In a production install this traffic is routed through a pull-through cache that runs in your own environment — your nodes pull from your own registry mirror, and the cache is the only thing that talks to registry.marshal.codes directly. See Installing Marshal for how the cache is set up on your target cloud.Always
keys.marshal.codesThe api fetches the public JWKS here to verify your installation JWT’s signature.Always
tokens.marshal.codesTwo separate uses: the api exchanges your installation JWT for a short-lived operational license here (license refresh), and the in-cluster marketplace service exchanges it for a short-lived marketplace token here (marketplace token exchange).Always
marketplace.marshal.codesThe in-cluster marketplace service proxies every browse/install call here live (no local cache) — this is the chart’s default upstream, on by default in every install, not an opt-in feature.Always
hooks.marshal.codesWebhook relay — lets an external service (e.g. a GitHub App) deliver webhooks into your private cluster without any inbound access, by having the cluster hold an outbound connection to Marshal’s hosted Relay. Only reachable/needed if you set a webhookRelay token; with none configured the api mounts no webhook endpoints and makes no outbound calls here.Only with webhook relay configured

That’s the complete list. Marshal doesn’t need outbound access to anything else to operate, and — as noted above — never needs inbound access into your environment.

If your network policy blocks egress by default, allow-list the four “Always” destinations above (plus hooks.marshal.codes if you use webhook relay, and your own internal DNS/NTP/etc. as usual) rather than opening broader outbound access.

Planning access for the install

Before you start the install, make sure you’ve settled:

  • Who runs the install, and from where — their own machine, or a bastion — and that they have (or can get) network access into the target VPC/VNet.
  • Egress rules cover the destinations above.
  • Your hostname decision — the internal hostname your developers will use to reach Marshal (e.g. marshal.yourcompany.com). You don’t need working DNS yet, just the string, since it’s required as input before the first install step. You’ll wire the actual DNS record once the cluster’s load balancer has an address.

The full prerequisite checklist — credentials, database, tooling — lives in Installing Marshal.