Skip to main content
This page covers the main Pangolin Kubernetes configuration options for Helm and Kustomize workflows. For exhaustive option coverage, refer to the chart resources:

README

values.yaml

values.schema.json

Version context

This page is aligned with the Pangolin Helm chart 0.1.0-alpha.0.

Configuration sections

Deployment topology

Control how Pangolin components are deployed and integrated with Kubernetes.
Recommended production topology:
In controller mode, Traefik CRDs and a Traefik controller must be available. You can install Traefik separately or enable the bundled Traefik dependency with deployment.installTraefikController=true.
If you enable the bundled Traefik dependency, put Traefik chart overrides under the traefikController key.
Namespace creation is controlled by the namespace block.
Recommended pattern:
  1. Create the namespace manually.
  2. Apply the required labels and annotations.
  3. Install the chart into that namespace.
Gerbil requires NET_ADMIN for WireGuard interface management. If your cluster enforces Pod Security Admission, the namespace must allow that capability.Example:
If you let the chart create the namespace, configure the Pod Security labels through values:
Do not apply a restricted Pod Security profile to a namespace running Gerbil unless you have validated WireGuard functionality. Gerbil requires NET_ADMIN; removing it breaks tunnel management.
Choose the database backend for Pangolin.
Supported modes:

CloudNativePG

The default database mode is cloudnativepg.
CloudNativePG can be used in four common ways:When cnpg-cluster.enabled=true, keep the CNPG cluster name consistent:
For the default CNPG cluster name pangolin-db, CloudNativePG creates an application Secret named pangolin-db-app with the key uri. The chart can automatically use this default Secret when no explicit database.connection.existingSecretName is set.Explicit Secret reference:

External PostgreSQL

For an external PostgreSQL database, prefer a Kubernetes Secret containing the final connection string.
The Secret should contain a PostgreSQL connection string:
You can also let the chart create a connection Secret from values:
Avoid storing database passwords directly in values files for production. Use an existing Secret or your normal secret-management workflow.

Embedded PostgreSQL

Embedded PostgreSQL is intended for labs and tests.

SQLite

SQLite is only suitable for development, CI, or very small test deployments.
The pangolin.config block renders /app/config/config.yml.
Important settings:
pangolin.config.traefik controls the Traefik configuration generated by Pangolin. Traefik installation is controlled separately through controller mode, the bundled Traefik dependency, or standalone Traefik mode.

Pangolin app secret

Pangolin requires SERVER_SECRET.Use an existing Secret for production:
Create the Secret:
If no existing Secret is provided, the chart can generate one:
Do not commit plaintext secrets to Git. For GitOps workflows, use SOPS, Sealed Secrets, External Secrets Operator, Vault, Infisical, or a cloud secret manager.
In controller mode, the chart can render a Traefik IngressRoute for the Pangolin dashboard and API.
Default routing behavior:The host defaults to the hostname from pangolin.config.app.dashboard_url. You can override it with:

TLS with certResolver

TLS with existing Secret

tls.certResolver and tls.secretName are mutually exclusive. Use one or the other.

Multi-Traefik setups

Use labels to target a specific Traefik CRD provider when multiple Traefik instances watch different label selectors:
You can also set an ingress class annotation:
Gerbil manages WireGuard tunnel connectivity for Pangolin.
Important settings:
If Gerbil is exposed through a reverse proxy or UDP gateway, keep proxy protocol settings aligned end-to-end. Do not enable proxy protocol on the upstream hop unless Gerbil is configured to accept it.

Startup mode

For first installs, delayed can help when Gerbil would otherwise fail before the initial Pangolin setup is complete.Switch back after setup:

Security

Gerbil requires NET_ADMIN.
Do not remove NET_ADMIN from Gerbil. Without it, Gerbil cannot create or manage WireGuard interfaces. SYS_MODULE is not added by default and should only be added when your node kernel requires module loading from inside the container.
NetworkPolicy rendering is enabled by default.
The chart-managed NetworkPolicies are intended to allow required Pangolin, Gerbil, database, DNS, and controller traffic for standard deployments.
Important defaults:When tightening policies, verify these paths:
  • DNS egress
  • Pangolin to database
  • controller to Kubernetes API
  • ingress controller to Pangolin service
  • Gerbil UDP traffic
  • outbound access for SMTP, OIDC, webhooks, or other external integrations
Use component-scoped rules where possible:
If you disable or replace chart-managed NetworkPolicies, ensure your custom policies still allow all required traffic paths.
The chart has chart-level monitoring settings for Pangolin and controller-specific monitoring settings for pangolin-kube-controller.

Pangolin monitoring

Controller monitoring

Enable controller ServiceMonitor when Prometheus Operator is available:
Enable chart-level metrics Service when the Pangolin app exposes metrics in your selected configuration:
Only enable ServiceMonitor, PodMonitor, or PrometheusRule resources when the matching CRDs are installed in the cluster.
The chart uses separate ServiceAccounts for Pangolin, Gerbil, and the controller in multi mode.
Default behavior:
In deployment.mode=single with deployment.type=controller, Kubernetes ServiceAccount selection is Pod-level. The shared Pod uses the controller ServiceAccount and token.
Global scheduling defaults:
Resource rendering policy:
CPU limits can cause throttling even when spare CPU exists on the node. For most deployments, start with CPU requests and memory limits, then add CPU limits only when explicitly required.
Pangolin resources:
Gerbil resources:
Controller resources:
Image configuration:
The chart automatically selects the PostgreSQL-capable Pangolin image variant for non-SQLite database modes unless you override the Pangolin tag or digest.
Ephemeral-storage requests and limits are only rendered when resourcesPolicy.ephemeralStorage.enabled=true.
Standalone Traefik is used mainly when deployment.type=standalone.
Important notes:
  • traefik.enabled=true runs an internal Traefik workload managed by this chart.
  • traefik.config.letsencryptEmail is required when standalone Traefik is enabled.
  • If you enable the Traefik dashboard, enable traefik.persistence.enabled so ACME state survives restarts.
  • In controller mode, prefer using an existing or bundled Traefik controller instead of standalone Traefik.
The chart can store Pangolin Blueprint YAML files as Kubernetes ConfigMaps and Secrets.
Example:
Sensitive blueprint environment values should come from a Secret:
The Pangolin server does not apply Blueprint files directly. Blueprints are applied by Newt through the Pangolin API using --blueprint-file or --provisioning-blueprint-file.

Configuration by install method

Helm

Use a values file:
Use inline values only for small tests:
See Pangolin Helm for the installation flow. For complete application configuration keys and examples, see:

Kustomize

Render the chart with Helm, then apply Kustomize overlays:
Apply the overlay:
See Pangolin Kustomize for the Kustomize workflow.

GitOps

Store Helm values or Kustomize overlays in Git. Argo CD or Flux reconciles the desired state. Argo CD Helm example:
Flux HelmRelease example:
See GitOps for GitOps guidance.

Next steps

Helm Install

Install Pangolin with Helm.

Kustomize Install

Install Pangolin with rendered manifests and Kustomize overlays.

Troubleshooting

Debug Pangolin deployments on Kubernetes.

GitOps

Deploy Pangolin with Argo CD or Flux.