Configuration Reference

Every flag has an environment variable equivalent: --flag-name becomes SKIPPER_FLAG_NAME. CLI flags take precedence over environment variables. Sensitive values (private keys) are shown as ******** in help output.

Controller configuration

Flag Type Default Description
--host string 0.0.0.0 The hostname the controller listens on.
--port int 50051 The port the server listens on.
--shutdown-timeout duration 5s The timeout for shutting down the controller.
--namespace string (required) The namespace the controller is in.
--pod-ip string (required) The pod IP the controller is running on.
--kubeconfig-qps float32 100 The QPS for the kubeconfig client.
--kubeconfig-burst int 200 The burst for the kubeconfig client.
--paseto-private-key string (required), sensitive The private key used to sign PASETO tokens for assigned pods.
--heartbeat-timeout duration 90s How long to wait before scaling a function to 0 if it has not sent a heartbeat.
--scale-interval duration 15s How often to scale functions.
--hpa-tolerance float64 0.1 The usage ratio tolerance for the HPA algorithm.
--hpa-initial-readiness-delay duration 30s The initial readiness delay for the HPA algorithm.
--hpa-downscale-stabilization duration 90s The stabilization window for downscaling in the HPA algorithm.
--hash-ring-wait-time duration 10s How long to wait for the controller to populate its hash ring.
--function-namespaces string list (required) The namespaces where functions can be invoked.
--function-assign-path string /__skipper/assign The path used to assign a function to a pod.
--function-assign-timeout duration 30s The timeout for assigning a function to a pod.
--max-concurrent-stale-replacements int 10 Maximum number of stale instances that can be replaced concurrently.
--skip-forbidden-namespaces bool false Whether to skip function namespaces that the service account does not have access to.
--web-port int 8080 The port the web UI listens on.
--web-template-dir string When set, reload templates from this directory on each request (dev mode).
--single-controller-mode bool false Add only this controller to the hash ring, ignoring controller pod discovery. For local development.

Router configuration

Flag Type Default Description
--host string 0.0.0.0 The hostname the router listens on.
--port int 8080 The port the router listens on.
--shutdown-timeout duration 5s The timeout for shutting down the router.
--pod-ip string (required) The pod IP the router is running on.
--heartbeat-interval duration 5s The interval at which to send heartbeats to the controller.
--max-round-trip-attempts int 6 The maximum number of attempts to proxy a request to a function.
--round-trip-retry-min-timeout duration 100ms The minimum timeout between round trip attempts.
--round-trip-retry-max-timeout duration 5s The maximum timeout between round trip attempts.
--controller-service-host string (required) The hostname of the controller service.
--controller-port int 50051 The port the controller service listens on.
--controller-headless-service-host string The hostname of the headless controller service. Falls back to controller-service-host if not set.
--controller-namespace string The namespace of the controller service. Required for zone-aware routing.
--controller-headless-service-name string The name of the headless controller service. Required for zone-aware routing.
--zone string The availability zone this router runs in. Used for zone-aware routing.

Shared configuration

These flags are available on both the controller and the router.

Flag Type Default Description
--log-level string info The log level to use. (trace, debug, info, warn, error)
--log-format string json The log format to use. (json, text)
--log-file string Path to a log file. When set, logs are written to both stderr and this file.
--log-file-level string Log level for the file output. Defaults to --log-level. (trace, debug, info, warn, error)
--log-file-format string Log format for the file output. Defaults to --log-format. (json, text)
--pprof bool true Whether to enable pprof.
--pprof-host string 0.0.0.0 The host to serve the pprof on.
--pprof-port int 6060 The port to serve the pprof on.
--pprof-shutdown-timeout duration 5s The timeout for shutting down the pprof.
--telemetry bool false Whether to enable OpenTelemetry.
--telemetry-trace bool true Whether to enable tracing if telemetry is enabled.
--telemetry-metric bool true Whether to enable metrics if telemetry is enabled.
--telemetry-shutdown-timeout duration 5s The timeout for shutting down the telemetry.
--telemetry-prometheus-host string 0.0.0.0 The host for the Prometheus metrics endpoint.
--telemetry-prometheus-port int 9090 The port for the Prometheus metrics endpoint.
--telemetry-metric-otlp bool false Whether to send metrics to the OTLP endpoint.

Environment variable substitution

The pattern for deriving environment variable names from flags:

  1. Uppercase the flag name
  2. Replace hyphens with underscores
  3. Prefix with SKIPPER_

For example, --heartbeat-timeout becomes SKIPPER_HEARTBEAT_TIMEOUT.

This is particularly useful in Kubernetes manifests:

env:
  - name: SKIPPER_POD_IP
    valueFrom:
      fieldRef:
        fieldPath: status.podIP
  - name: SKIPPER_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace