The Falco Operator applies configuration at two levels:
-
Base configuration — The operator generates a default
falco.yamlConfigMap based on the deployment mode (DaemonSet or Deployment). This provides sensible defaults for each mode. -
Configuration fragments —
ConfigCustom Resources add or override specific settings on top of the base configuration. Fragments are applied in priority order (0–99) via the Artifact Operator sidecar.
This means you do not need to provide a complete Falco configuration. Only specify the settings you want to change.
These are the defaults of the operator-generated base
falco.yaml. Optional functionality such as container metadata enrichment (container.*,k8s.*fields) is not part of the base config — load the container plugin via aPluginCR to enable it.
When a Falco CR uses type: DaemonSet (or omits type), the operator applies these defaults:
| Category | Setting | Default Value |
|---|---|---|
| Engine | engine.kind |
modern_ebpf |
| Outputs | stdout_output.enabled |
true |
syslog_output.enabled |
true |
|
| Webserver | webserver.enabled |
true |
webserver.listen_port |
8765 |
|
webserver.prometheus_metrics_enabled |
true |
|
| Security | Security context | Privileged |
| Host mounts | Paths | /proc, /sys, /dev, /etc, container runtime sockets |
| Resources | CPU request | 100m |
| Memory request | 512Mi |
|
| CPU limit | 1000m |
|
| Memory limit | 1024Mi |
|
| Probes | Startup | HTTP /healthz, delay 3s, period 5s, 20 failures (~103s max) |
| Liveness | HTTP /healthz, delay 0s (startup probe handles the wait) |
|
| Readiness | HTTP /healthz, delay 0s (startup probe handles the wait) |
The full default falco.yaml configuration (engine, outputs, metrics, etc.) is defined in internal/pkg/resources/falco.go.
When a Falco CR uses type: Deployment, the operator applies these defaults:
| Category | Setting | Default Value |
|---|---|---|
| Engine | engine.kind |
nodriver |
| Designed for | Plugin-only workloads |
All other settings (outputs, webserver, resources) follow the same defaults as DaemonSet mode.
Create a Config resource to override specific settings:
apiVersion: artifact.falcosecurity.dev/v1alpha1
kind: Config
metadata:
name: http-output
spec:
config:
http_output:
enabled: true
url: "http://falcosidekick.falco.svc:2801"
priority: 50Store configuration in a ConfigMap and reference it:
apiVersion: artifact.falcosecurity.dev/v1alpha1
kind: Config
metadata:
name: base-config
spec:
configMapRef:
name: falco-base-config
priority: 30The ConfigMap must contain a key named config.yaml.
Configuration fragments are applied in ascending priority order:
- Priority 0–29: Base overrides (applied first)
- Priority 30–69: Standard configuration
- Priority 70–99: High-priority overrides (applied last, wins on conflicts)
Example: A Config with priority 30 sets output_timeout: 1000, and another with priority 70 sets output_timeout: 5000. The effective value is 5000.
Use label selectors to apply configuration to specific nodes:
apiVersion: artifact.falcosecurity.dev/v1alpha1
kind: Config
metadata:
name: debug-node1
spec:
config:
libs_logger:
enabled: true
severity: debug
priority: 90
selector:
matchLabels:
kubernetes.io/hostname: "node1"The podTemplateSpec field in the Falco CR allows full control over the pod specification:
apiVersion: instance.falcosecurity.dev/v1alpha1
kind: Falco
metadata:
name: falco
spec:
podTemplateSpec:
spec:
containers:
- name: falco
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 2Gi
tolerations:
- key: "node-role.kubernetes.io/control-plane"
effect: "NoSchedule"
nodeSelector:
kubernetes.io/os: linuxThe following container names are reserved by the operator:
falco— The main Falco containerartifact-operator— The Artifact Operator native sidecar
You can customize these containers in podTemplateSpec by matching their names.
The Artifact Operator sidecar image is configurable via the ARTIFACT_OPERATOR_IMAGE environment variable on the Falco Operator Deployment:
env:
- name: ARTIFACT_OPERATOR_IMAGE
value: "docker.io/falcosecurity/artifact-operator:v0.2.0"Default: docker.io/falcosecurity/artifact-operator:latest
The operator copies the labels of a Falco (or Component) resource onto the resources it generates.
Some external tools add their own labels to the resources they manage and rely on them to decide which objects they own.
When such a label is copied onto a generated resource, the tool may treat that resource as one of its own and remove it when it is not part of its desired state.
Namespaced resources are protected by their OwnerReference, but cluster-scoped resources (ClusterRole, ClusterRoleBinding) cannot carry one, so they may be removed and recreated repeatedly.
The --excluded-labels flag lists label keys the operator must not copy from the resource's metadata.labels onto the resources it generates.
Matching keys are dropped wherever the operator would propagate them — including the workload metadata and its pod template — while pod selector labels are always preserved.
Labels you set explicitly (for example in spec.podTemplateSpec.metadata.labels) are left untouched.
The * wildcard is supported and the flag may be repeated.
The Helm chart exposes this as the excludedLabels array. It is empty by default — add the label keys your environment requires:
excludedLabels:
- argocd.argoproj.io/instance
- kustomize.toolkit.fluxcd.io/name
- kustomize.toolkit.fluxcd.io/namespace