Configuration Reference

Complete guide to all Helm values and environment variables.

Docs / Configuration

Configuration Reference

PandoCore can be configured via Helm values during installation or environment variables at runtime. This reference covers all available options.

Webhook Configuration

The admission webhook (pando-webhook Helm chart) controls automatic sidecar injection cluster-wide:

Helm Value Default Description
licenseKey (required) License key stored as Secret and injected into sidecars
defaultMode monitor Default operating mode for injected sidecars
excludedNamespaces [kube-system, kube-public, kube-node-lease] Namespaces where injection is always skipped
sidecar.image Latest from registry Sidecar container image to inject
replicas 2 Webhook server replicas (2 for HA)
tls.certManager false Use cert-manager for TLS (otherwise self-signed)

Per-pod overrides are available via annotations. See Admission Webhook for details.

Portal Integration

Detection events are automatically streamed from sidecars to your PandoCore Portal dashboard. This is enabled by default.

Helm Value Default Description
portalWebhook.enabled true Send detection events to the PandoCore Portal
portalWebhook.url https://portal.pandocore.xyz/api/events/ingest Portal ingestion endpoint (override for staging/custom deployments)

When enabled, the webhook sets PANDO_EVIDENCE_WEBHOOK_URL on each sidecar, authenticated via the license key. Events appear in your portal dashboard.

Alert Integration

PandoCore can send real-time Slack alerts when detections occur. Alerts fire in both alert and enforce modes.

Helm Value Default Description
slackWebhookURL (empty) Slack incoming webhook URL for alert notifications

To set up Slack alerts:

  1. Create a Slack incoming webhook for your channel
  2. Set slackWebhookURL in your Helm values
  3. Set defaultMode to alert or enforce
# values.yaml
slackWebhookURL: "https://hooks.slack.com/services/T.../B.../xxx"
defaultMode: alert

In-Cluster Dashboard Configuration

The optional in-cluster dashboard provides real-time debugging visibility. See Dashboard for full documentation.

Helm Value Default Description
dashboard.enabled false Enable the in-cluster dashboard deployment
dashboard.pollInterval "30s" How often to poll sidecar /status endpoints
dashboard.maxEvents 10000 Maximum events stored in memory
dashboard.resources 50m CPU / 64Mi mem Resource limits for the dashboard pod

Sidecar Helm Values

These values are set during helm install or in a values.yaml file:

Required Values

Value Description Example
licenseKey Your PandoCore license key from the customer portal pando_live_abc123...
imagePullSecret Base64-encoded Docker config for registry access Provided in customer portal

Image Settings

Value Default Description
image.repository us-central1-docker.pkg.dev/pandocore-prod/sidecar/pando-sidecar Container image repository
image.tag Chart appVersion Image tag to deploy
image.pullPolicy IfNotPresent Image pull policy

Operating Mode

Value Default Description
mode monitor monitor, alert, enforce, or debug

Detection Thresholds

Value Default Description
thresholds.incremental 0.15 Threshold for sudden behavioral changes (0.0-1.0). Lower = more sensitive.
thresholds.cumulative 0.45 Threshold for gradual drift accumulation (0.0-1.0). Lower = more sensitive.

Sampling

Value Default Description
sampling.intervalMs 100 How often behavioral data is collected (milliseconds)

Logging

Value Default Description
logging.level info Log level: trace, debug, info, warn, error
logging.json true Enable JSON-structured logging for SIEM integration

Resources

Value Default Description
resources.limits.cpu 100m CPU limit for sidecar container
resources.limits.memory 50Mi Memory limit for sidecar container
resources.requests.cpu 50m CPU request for sidecar container
resources.requests.memory 25Mi Memory request for sidecar container

Environment Variables

These can be set directly on the sidecar container to override Helm values:

Core Settings

Variable Default Description
PANDO_LICENSE_KEY License key (required)
PANDO_MODE monitor Operating mode: monitor, enforce, debug
POD_NAME Pod name (set via fieldRef)
POD_NAMESPACE Pod namespace (set via fieldRef)
PANDO_TARGET_CONTAINER Auto-detect Name of the container to monitor. Auto-injected by webhook (first non-sidecar container). Override via pandocore.xyz/target-container annotation.
PANDO_TARGET_PID 0 (auto) Explicit PID to monitor. Overrides container-based resolution. Use only for debugging.

Alert Settings

Variable Default Description
PANDO_SLACK_WEBHOOK_URL Slack incoming webhook URL for alert notifications
PANDO_ALERT_TIMEOUT_SECONDS 5 Timeout for alert delivery requests

Graduated Response

By default, drift detections follow a graduated response chain: alert → isolate → terminate. Network isolation denies all egress except DNS (port 53), preventing data exfiltration while keeping the pod reachable for health checks. If drift persists past the escalation timeout, the pod is terminated. If drift subsides, isolation is automatically removed.

Variable Default Description
PANDO_RESPONSE_ACTIONS Per-detection type Comma-separated response chain: alert, isolate, terminate
PANDO_ESCALATION_TIMEOUT_SECS 120 Seconds after isolation before escalating to terminate
PANDO_RECOVERY_TIMEOUT_SECS 60 Seconds of clean samples after isolation before removing isolation

Default chains by detection type:

Detection Thresholds

Variable Default Description
PANDO_THRESHOLD_INCREMENTAL 0.15 Threshold for sudden changes (sample-to-sample drift)
PANDO_THRESHOLD_CUMULATIVE 0.45 Threshold for total drift from baseline
PANDO_SAMPLE_INTERVAL_MS 100 Sampling interval in milliseconds

Sliding Window (Adaptive Baseline)

Variable Default Description
PANDO_WINDOW_DURATION_SECONDS 600 Duration of the sliding window (10 minutes)
PANDO_WINDOW_MIN_SAMPLES 60 Minimum samples for a valid window
PANDO_WINDOW_MAX_SAMPLES 6000 Maximum samples to retain in window

Learning Phase (Threshold Calibration)

Variable Default Description
PANDO_LEARNING_DURATION_SECONDS 600 Learning phase duration (10 minutes)
PANDO_LEARNING_MIN_SAMPLES 300 Minimum samples for threshold calibration
PANDO_SKIP_LEARNING false Skip learning phase (not recommended)
PANDO_SENSITIVITY 2.0 Threshold sensitivity multiplier. Higher = fewer false positives. Range: 0.5–10.0
PANDO_RUNTIME_PROFILE default Runtime profile: default (sensitivity 2.0), jit (sensitivity 3.0, for Java/Node.js/.NET), or database (sensitivity 3.0, for PostgreSQL/MySQL/Redis/MongoDB). Auto-detected by the webhook.
Automatic Runtime Detection

The admission webhook automatically detects runtime families from container images and sets the appropriate PANDO_RUNTIME_PROFILE:

  • jit — Java (OpenJDK, Temurin, Corretto, Spring, Tomcat, Quarkus), Node.js, .NET. JIT runtimes produce higher ambient drift due to tiered compilation and GC heap reorganization.
  • database — PostgreSQL, MySQL/MariaDB, Redis, MongoDB, Cassandra, CockroachDB, Elasticsearch. Databases exhibit cyclical memory entropy shifts from buffer pool pressure, WAL activity, and connection pool churn.

Both profiles raise sensitivity to 3.0, preventing false positives without reducing detection capability. You can override with an explicit PANDO_SENSITIVITY value.

Integrity Checks

Variable Default Description
PANDO_CHECK_TRACED_STATE true Enable detection of debugger attachment
PANDO_INTEGRITY_CHECK_INTERVAL_SECS 30 Interval between integrity checks

ML Anomaly Detection

Variable Default Description
PANDO_ML_ENABLED true Enable ML-based anomaly detection
PANDO_ML_THRESHOLD 0.7 ML anomaly score threshold (0.0-1.0)
PANDO_ML_INFERENCE_INTERVAL_SECS 60 Seconds between ML inference runs

Logging Settings

Variable Default Description
PANDO_LOG_LEVEL info Log level: trace, debug, info, warn, error
PANDO_LOG_JSON true Enable JSON-formatted logs for SIEM integration

Configuration Examples

Production Deployment

Recommended settings for production workloads:

# values-production.yaml
licenseKey: "your-license-key"
imagePullSecret: "your-pull-secret"

mode: enforce

thresholds:
  incremental: 0.15
  cumulative: 0.45

logging:
  level: info
  json: true

resources:
  limits:
    cpu: 100m
    memory: 50Mi
  requests:
    cpu: 50m
    memory: 25Mi

Initial Evaluation

Settings for initial deployment and tuning:

# values-evaluation.yaml
licenseKey: "your-license-key"
imagePullSecret: "your-pull-secret"

mode: monitor  # Detect only, don't enforce

thresholds:
  incremental: 0.20  # Less sensitive during evaluation
  cumulative: 0.55

logging:
  level: debug  # More verbose for tuning
  json: true

High-Sensitivity Workloads

For workloads requiring tighter monitoring:

# values-high-sensitivity.yaml
licenseKey: "your-license-key"
imagePullSecret: "your-pull-secret"

mode: enforce

thresholds:
  incremental: 0.10  # More sensitive
  cumulative: 0.35

sampling:
  intervalMs: 50  # Faster sampling

Tuning Thresholds

If you're seeing too many or too few detections, adjust the thresholds:

ℹ️ Tuning Tips
  • Too many detections: Increase threshold values (e.g., 0.20, 0.55)
  • Missing real issues: Decrease threshold values (e.g., 0.10, 0.35)
  • Spiky workloads: Focus on increasing incremental threshold
  • Gradual drift issues: Focus on adjusting cumulative threshold

Runtime Threshold Adjustment

# Adjust thresholds without redeployment
kubectl set env deployment/your-app -c pando-sidecar \
  PANDO_THRESHOLD_INCREMENTAL=0.20 \
  PANDO_THRESHOLD_CUMULATIVE=0.55

Next Steps