Skip to content
NebulaCtrldocs

Configuration

Every setting of the control plane (nebula serve) with its flag, default and meaning, and which settings reach a control plane installed with the installer.

The control plane is nebula serve. A setting is a flag, an environment variable or a key in a nebula.yaml file. A flag wins over the environment variable, and the environment variable wins over the file. This page groups the settings of nebula serve by what they do. The CLI reference lists every command.

How a setting is named

FormNameExample
Flag-- plus the name--base-url
Environment variableNEBULA_ plus the name in capitals, with - as _NEBULA_BASE_URL
nebula.yaml keyThe namebase-url

nebula.yaml is read from the working directory, from /etc/nebula, or from the path in --config. A missing file is not an error. In an environment variable, --trusted-proxies and --previous-master-keys take comma-separated values.

Which settings an installed control plane receives

The installer writes its answers to .env in the install directory (/opt/nebula by default) and starts the control plane with a compose file. Docker Compose passes a variable from .env to the container only if the compose file names it. The compose file the installer downloads names these variables:

VariableSetting
NEBULA_DATABASE_URL, NEBULA_MASTER_KEY, NEBULA_BASE_URLRequired settings.
NEBULA_OIDC_ISSUER, NEBULA_OIDC_CLIENT_ID, NEBULA_OIDC_CLIENT_SECRETRequired settings.
NEBULA_OIDC_PROVIDER_NAME, NEBULA_OIDC_SCOPES, NEBULA_OIDC_INSECURE_HTTPSign-in.
NEBULA_PREVIOUS_MASTER_KEYSSecrets.
NEBULA_TRUSTED_PROXIESNetwork.
NEBULA_LOG_LEVEL--log-level.
NEBULA_AGENT_IMAGE--agent-image.
NEBULA_UPDATER_TOKEN--updater-token.

The compose file fixes NEBULA_LISTEN at 0.0.0.0:8080 inside the container and NEBULA_METRICS_LISTEN at 127.0.0.1:9090. The installer's --listen option sets the address the container publishes on the host, as NEBULA_HOST_LISTEN.

To set any other setting, add it to the environment block of your own compose file and install with --compose-file. Running the installer without --compose-file downloads the compose file again and replaces the one in the install directory.

Required

nebula serve refuses to start unless all six are set, and lists the missing ones.

FlagMeaning
--database-urlPostgreSQL connection URL. Postgres needs TimescaleDB 2.13 or newer, loaded through shared_preload_libraries.
--master-keyBase64 of exactly 32 bytes. Every stored secret is sealed under it.
--base-urlThe public URL of this installation, for example https://nebula.example.com. Every cluster's agent connects back to it.
--oidc-issuerOIDC issuer URL. Sign-in is delegated to it.
--oidc-client-idOIDC client ID registered with the issuer.
--oidc-client-secretOIDC client secret registered with the issuer.

Network

FlagDefaultMeaning
--listen:8080Address the API and the console listen on.
--metrics-listen127.0.0.1:9090Address Prometheus metrics listen on.
--trusted-proxiesnoneProxy IP addresses or CIDRs allowed to supply client IP headers. Use cloudflare for Cloudflare's reviewed edge ranges, and include the exact local reverse proxy or Docker bridge CIDR.
--pproffalseExpose /debug/pprof on the metrics listener.

Sign-in

FlagDefaultMeaning
--oidc-scopesopenid profile emailSpace-separated OIDC scopes to request.
--oidc-provider-nameyour identity providerName shown on the sign-in button.
--oidc-acr-valuesnoneacr_values sent on every sign-in, for a provider that only reports a second factor when asked for a stronger context, for example urn:okta:loa:2fa:any.
--oidc-insecure-httpfalseAllow an issuer on plain http. Development and end-to-end tests only.

Secrets

FlagDefaultMeaning
--previous-master-keysnoneOlder master keys, comma-separated. Keep them only until nebula secrets reseal has re-encrypted every stored secret.

Clusters and agents

FlagDefaultMeaning
--agent-imageghcr.io/nebulactrl/nebula-agent at this binary's versionContainer image the cluster install manifest deploys.
--agent-update-deadline10mHow long a running agent update may go without the new agent reporting in before it is rolled back automatically.
--k3s-versionv1.36.4+k3s1K3s version the install script pins with INSTALL_K3S_VERSION.
--k3s-channels-urlhttps://update.k3s.io/v1-release/channelsK3s release-channel feed that a cluster's available upgrades are computed against.
--simulated-clusterfalseRun an in-process simulated cluster instead of waiting for a real one. For development.
--simulated-cluster-expandable-storagefalseGive the simulated cluster an expandable default storage class next to local-path.

Integrations

FlagDefaultMeaning
--github-api-basehttps://api.github.comGitHub API base URL. Override it for GitHub Enterprise Server.
--github-web-basehttps://github.comGitHub web base URL used for the GitHub App manifest flow. Override it for GitHub Enterprise Server.
--acme-directory-urlhttps://acme-v02.api.letsencrypt.org/directoryACME directory that DNS-01 certificates are issued from. Point it at Let's Encrypt staging when testing.
--acme-dns-resolversthe system resolverRecursive DNS servers (host:port) used to find a hostname's zone and to check DNS-01 propagation. Set it for split-horizon DNS or a private test CA.
--cloudflare-api-basehttps://api.cloudflare.com/client/v4Cloudflare API base URL. Override it for a test fake.
--pagerduty-events-urlhttps://events.pagerduty.comPagerDuty Events API origin that notification channels deliver to. Override it for a test fake.

Update checks

FlagDefaultMeaning
--update-checktrueCheck the release feed for a newer release. false turns update checks off, for an air-gapped install.
--release-feed-urlhttps://get.nebulactrl.dev/changelog.jsonAnother release feed in the same shape, such as a mirror. Requests carry no instance id or version, only a plain NebulaCtrl User-Agent.
--updater-tokenemptySecret the host updater presents when it polls the control plane. The installer generates it as NEBULA_UPDATER_TOKEN in .env. Empty turns console updates of the control plane off.

Templates

FlagDefaultMeaning
--community-templatestrueRead the public community template repository (see Templates). false turns it off, for an air-gapped install.
--community-templates-reponebulactrl/nebula-templatesThe community repository, as owner/name. Every instance reads its main branch. The value is checked at startup.

Global

FlagDefaultMeaning
--confignonePath to a nebula.yaml file.
--log-levelinfodebug, info, warn or error. Any other value is refused at startup.

On this page