kubeWAF is under active development — feedback and stars on GitHub are very welcome!
kubeWAFkubeWAF
kubeWAFmodsecurity-proxy-wasmpow-proxy-wasm

Installation

Install the kubeWAF operator on a Kubernetes cluster with Helm

This guide covers installing the kubeWAF operator on a Kubernetes cluster.

Prerequisites

  • Kubernetes 1.25+
  • kubectl and Helm 3.8+
  • A data plane you will protect:
    • Envoy Gateway (recommended starting point), and/or
    • Istio, and/or
    • Cilium (CEC slot; Wasm enforcement depends on build)
helm repo add kubewaf https://kubewaf-io.github.io/charts
helm repo update

helm install kubewaf kubewaf/kubewaf \
  --namespace kubewaf-system \
  --create-namespace \
  --set dataplane.modsecurityWasmSourceURL=https://example.com/modsecurity-proxy-wasm.wasm \
  --set dataplane.challengeWasmSourceURL=https://example.com/challenge-proxy-wasm.wasm

Wasm modules

Envoy fetches Wasm over HTTP. Provide source URLs or mount files under /wasm for modsecurity-proxy-wasm and optional challenge (PoW). Monorepo: make wasm-builddist/wasm/.
See WAF engine, challenge, and Data plane.

Verify

kubectl get pods -n kubewaf-system
kubectl get svc -n kubewaf-system
kubectl get crd | grep -E 'kubewaf|seclang'

Pods should be Ready (default 2 replicas). Service should expose:

PortNamePurpose
18001ecdsECDS gRPC
5005extensionEnvoy Gateway Extension Server
18002wasmMulti-module .wasm HTTP

CRDs:

  • secrules.seclang.kubewaf.io
  • secactions.seclang.kubewaf.io
  • rulesets.waf.kubewaf.io
  • wafs.waf.kubewaf.io
  • wafinstances.waf.kubewaf.io

Envoy Gateway only: enable Extension Server

After install, configure Envoy Gateway to call kubeWAF on port 5005. See Envoy Gateway guide.

Helm values overview

replicaCount: 2

leaderElection:
  enabled: true

podDisruptionBudget:
  enabled: true
  minAvailable: 1

dataplane:
  ecds:
    port: 18001
  extensionServer:
    port: 5005
  wasmServe:
    port: 18002
  # Product modules (paths or source URLs)
  modsecurityWasmFile: "/wasm/modsecurity-proxy-wasm.wasm"
  challengeWasmFile: "/wasm/challenge-proxy-wasm.wasm"
  modsecurityWasmSourceURL: ""
  challengeWasmSourceURL: ""

image:
  registry: ghcr.io
  repository: kubewaf-io/kubewaf
  tag: ""

args:
  logLevel: 4

Full reference: charts/kubewaf/values.yaml.

HA notes

Alternative: kustomize

kubectl apply -k https://github.com/kubewaf-io/kubewaf/config/crd
kubectl apply -k https://github.com/kubewaf-io/kubewaf/config/default

You must expose dataplane ports and pass wasm flags yourself; Helm is preferred.

Upgrading

helm upgrade kubewaf kubewaf/kubewaf -n kubewaf-system

If upgrading from versions that created EnvoyExtensionPolicy, delete those objects and re-apply WAF CRs (migration).

Uninstalling

helm uninstall kubewaf -n kubewaf-system
# Optionally: kubectl delete crd …  (if you manage CRD lifecycle separately)

Next steps

  1. Quick start
  2. Data plane setup
  3. Provider guide: Envoy Gateway · Istio · Cilium

On this page