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:
- Uppercase the flag name
- Replace hyphens with underscores
- 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