Use this file to discover all available pages before exploring further.
Try free on Pangolin Cloud
Fastest way to get started with Pangolin using the hosted control plane. No credit card required.
This page covers troubleshooting Pangolin Kubernetes deployments across Helm, Kustomize, Argo CD, and Flux workflows.Start with the core checks, then use the section that matches the symptom.
helm status "$PANGOLIN_RELEASE" --namespace "$PANGOLIN_NAMESPACE"helm history "$PANGOLIN_RELEASE" --namespace "$PANGOLIN_NAMESPACE"helm get values "$PANGOLIN_RELEASE" --namespace "$PANGOLIN_NAMESPACE" --all
helm lint charts/pangolin is only useful when you are working inside the Helm chart repository. For normal installs, use helm template and helm upgrade --dry-run.
kubectl get pods --namespace "$PANGOLIN_NAMESPACE"kubectl get deploy,statefulset,job,cronjob --namespace "$PANGOLIN_NAMESPACE"kubectl get events --namespace "$PANGOLIN_NAMESPACE" --sort-by=.lastTimestamp
In controller mode, the chart uses Traefik CRDs such as IngressRoute.Check whether Traefik CRDs are installed:
kubectl get crd | grep traefik
Check rendered or applied Traefik resources:
kubectl get ingressroute --namespace "$PANGOLIN_NAMESPACE"kubectl describe ingressroute <name> --namespace "$PANGOLIN_NAMESPACE"
Depending on your Traefik setup, also check:
kubectl get middleware,tlsoption,traefikservice --namespace "$PANGOLIN_NAMESPACE"
kubectl get ingress is only useful if your selected deployment mode renders standard Kubernetes Ingress resources. In controller mode, use IngressRoute.
Logs mention missing setup data, missing exit node, or tunnel configuration not being ready.
Pangolin itself is not initialized yet.
CauseOn first install, Gerbil may start before Pangolin has completed the initial setup. The chart supports gerbil.startupMode for this case.ResolutionUse delayed startup for the first install:
kubectl get pods,svc,pvc --namespace "$PANGOLIN_NAMESPACE" \ -l app.kubernetes.io/name=gerbil
Gerbil is blocked by Pod Security Admission
Symptoms
Gerbil pod does not start.
Events mention Pod Security Admission.
Events mention forbidden capabilities.
Logs or events mention NET_ADMIN.
CauseGerbil requires the NET_ADMIN Linux capability for WireGuard interface management. A namespace using a restricted Pod Security profile can block this.ResolutionCheck namespace labels:
kubectl get namespace "$PANGOLIN_NAMESPACE" --show-labels
For a namespace running Gerbil, use a policy profile that allows the required capability. Example:
Do not use a restricted Pod Security profile for Gerbil unless you have validated the selected chart mode and security context. Removing NET_ADMIN breaks WireGuard management.
Dashboard is not reachable through IngressRoute
Symptoms
The dashboard URL does not load.
Browser shows timeout, bad gateway, 404, or TLS error.
API path /api/v1 fails while the dashboard path works, or the reverse.
Common causes
DNS points to the wrong load balancer or ingress endpoint.
Traefik CRDs are missing.
Traefik controller is not watching the namespace or selector labels.
IngressRoute host does not match the dashboard URL.
API route was changed and no longer matches PathPrefix(/api/v1).
TLS resolver or TLS Secret is misconfigured.
ChecksCheck DNS:
nslookup pangolin.example.com
Check Traefik CRDs:
kubectl get crd | grep traefik
Check IngressRoute resources:
kubectl get ingressroute --namespace "$PANGOLIN_NAMESPACE"kubectl describe ingressroute <name> --namespace "$PANGOLIN_NAMESPACE"
The dashboard/UI port is 3002. The API/external port is 3000. Port-forward 3002 when checking the dashboard locally.
TLS certResolver and secretName conflict
Symptoms
IngressRoute is created but TLS does not work.
Traefik logs mention TLS configuration problems.
Certificate is not issued or the TLS Secret is not found.
CauseThe dashboard IngressRoute TLS configuration should use either a Traefik certificate resolver or an existing TLS Secret.ResolutionUse Traefik ACME certificate resolver:
kubectl get networkpolicy --namespace "$PANGOLIN_NAMESPACE"kubectl describe networkpolicy --namespace "$PANGOLIN_NAMESPACE"
Verify external firewall rules for the configured UDP ports.
Gerbil is behind reverse proxy or UDP gateway and tunnels fail
Symptoms
Newt peers do not establish stable handshakes.
Tunnel traffic drops even though Gerbil pods are healthy.
Logs show connection resets or malformed upstream traffic.
CauseProxy protocol handling is inconsistent between the upstream hop and Gerbil.
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.
kubectl get svc --namespace "$PANGOLIN_NAMESPACE" \ -l app.kubernetes.io/name=gerbil -o wide
External database mode missing or invalid Secret
Symptoms
Pangolin pod crashes.
Logs mention database connection errors.
Events mention missing Secret or missing Secret key.
Causedatabase.mode=external needs a valid database connection Secret unless the chart is configured to generate one from values.ResolutionCreate a connection Secret:
For external integrations, add scoped egress rules for the required services instead of allowing broad egress.For a temporary isolation test, disable NetworkPolicy and re-apply:
networkPolicy: enabled: false
If this fixes the issue, re-enable policies and add the missing rules.
Pangolin pod is CrashLoopBackOff or Pending
Symptoms
Pangolin pod restarts repeatedly.
Pod stays Pending.
Readiness never becomes true.
ChecksFind the pod:
kubectl get pods --namespace "$PANGOLIN_NAMESPACE" \ -l app.kubernetes.io/name=pangolin
Do not assume tools such as psql, curl, or dig are available inside the Pangolin container. Use logs, Events, or a temporary debug pod when needed.
Run a temporary debug pod for network tests:
kubectl run net-debug \ --namespace "$PANGOLIN_NAMESPACE" \ --rm -it \ --image=curlimages/curl:latest \ --restart=Never \ -- sh
Traefik CRDs or resources are missing
Symptoms
Helm template or install succeeds, but Traefik resources are not reconciled.
kubectl get ingressroute fails with unknown resource type.
Argo CD or Flux reports missing kind IngressRoute.
CauseController mode expects Traefik CRDs and a Traefik controller. They must be installed separately or through the bundled dependency when enabled.Checks
kubectl get crd | grep traefikkubectl get pods --all-namespaces | grep -i traefik
If you want the chart to install the bundled Traefik controller, enable it:
If Traefik is already installed elsewhere, keep it disabled and make sure the controller watches the namespace and labels used by the Pangolin IngressRoute.
Helm upgrade fails or rendered output is unexpected
Symptoms
helm upgrade fails.
Rendered resources changed unexpectedly.
Existing resources conflict with chart-managed resources.
GitOps reports immutable field changes or ownership conflicts.