Skip to main content

Connectivity requirements

Written by Aron Day

3B is reached through four external URLs, all served on ports 80/443 by the built-in nginx front end and routed by hostname and path. Plan your URLs, DNS, and firewall rules before you install.

The four external URLs

URL

Setting

Purpose

UI

EXTERNAL_UI_URL

The app users sign in to.

API

EXTERNAL_API_URL

The application programming interface.

Public

EXTERNAL_PUBLIC_URL

Addresses 3B shares externally — webhooks and public links.

Zero sync

ZERO_SYNC_URL

The real-time sync service that streams data and changes to the UI over a persistent connection.

Hostnames and DNS

On new installs, the UI, API, and Zero sync URLs share a single hostname (they are routed by path behind that one origin), and the public URL gets its own hostname. So a typical install needs two DNS records, both pointing at your server or load balancer:

3b.example.com         A  <address>
3b-public.example.com  A  <address>

The single-server installer proposes exactly these defaults from your root domain. Stacks upgraded from older releases, and the Kubernetes platform guides, may instead give each of the four URLs its own hostname — that split-hostname model remains fully supported:

3b.example.com         A  <address>   (UI)
3b-api.example.com     A  <address>   (API)
3b-ws.example.com      A  <address>   (Zero sync)
3b-public.example.com  A  <address>   (public)

Either way, DNS is required: the services share ports 80/443 and are told apart by hostname, so an IP-and-port-only are not supported. The cookie domain is the shared parent domain of your hostnames (for example example.com), used for sign-in cookies.

If you set a public wildcard domain (PUBLIC_WILDCARD_DOMAIN), also create a wildcard record (*.public.example.com) and make sure your certificate covers it.

Inbound ports

Setup

Inbound ports to open

HTTPS

80, 443

HTTP (evaluation only)

80

On the single-server install, nginx binds host ports 80 and 443 directly. Kubernetes also exposes the same front end on NodePorts 30080 (HTTP) and 30443 (HTTPS) if you prefer to point a load balancer at those instead.

TLS is effectively required

3B expects to be reached over HTTPS, with TLS terminated somewhere in the request path — at 3B itself or at a load balancer or proxy in front of it. This is more than a recommendation: AI providers require requests to arrive over a secure (HTTPS) connection, so configuring them does not work over plain HTTP. See TLS termination for the supported options.

Outbound connectivity

Destination

When

Purpose

oci.tines.com (HTTPS)

Install and every update

The Helm chart, container images, and install bundles. The only source of the software.

github.com (HTTPS)

Single-server standard install

Downloads the small oras registry tool.

Your AI providers, SMTP server, and the third-party services your workflows call

Runtime

Only what you configure and use.

An air-gapped server needs no outbound access at all.

Behind an outbound proxy? 3B can use it — set HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (or the httpProxy Helm values). Make sure the proxy permits the hosts above.

Workflow egress and internal networks

Workflow code runs in sandboxes whose outbound requests are blocked from reaching private and internal address ranges by default (an SSRF guard). If your workflows must reach internal services, allow the tightest possible CIDR ranges via ALLOWED_CIDR_BLOCKS (single server) or allowedCidrBlocks (Helm) — see the configuration reference for the security implications before widening this.

Did this answer your question?