Network & egress

Networking configuration for ingress routing, egress DNS filtering, Chromium browser automation, and Tailscale integration.


Ingress

Disabled by default. Enable for external access with WebSocket support.

KeyDefaultDescription
ingress.enabledfalseEnable Ingress
ingress.classNamenginxIngress class name
ingress.hostopenclaw.example.comHostname
ingress.tls[]TLS configuration
ingress.annotations(WebSocket timeouts)Includes nginx proxy timeout annotations
yaml
ingress:
  enabled: true
  className: nginx
  host: openclaw.example.com
  tls:
    - secretName: openclaw-tls
      hosts:
        - openclaw.example.com

Gateway API

Enabled by default. Alternative to Ingress using gateway.networking.k8s.io/v1 HTTPRoutes with path-based routing.

KeyDefaultDescription
gatewayAPI.enabledtrueEnable Gateway API resources
gatewayAPI.gatewayClassName""Gateway class (defaults to controller's class when empty)
gatewayAPI.hostopenclaw.example.comHostname for all routes
gatewayAPI.routes.openclaw/Path prefix for OpenClaw
gatewayAPI.routes.o11y/o11yPath prefix for HyperDX
gatewayAPI.routes.litellm/litellmPath prefix for LiteLLM
gatewayAPI.routes.filtering/filteringPath prefix for Blocky
gatewayAPI.crds.installfalseInstall Gateway API CRDs (not needed with bundled controller)
gatewayAPI.controller.enabledtrueDeploy Envoy Gateway as a subchart
gatewayAPI.controller.gatewayClassNameenvoyGatewayClass created by Envoy Gateway

If you already run a Gateway API controller (Istio, Cilium, etc.), set controller.enabled: false and set gatewayClassName to match your existing GatewayClass.

NetworkPolicy

KeyDefaultDescription
networkPolicy.enabledtrueEnable NetworkPolicy resources
networkPolicy.ingressControllerNamespaceSelectorkubernetes.io/metadata.name: ingress-nginxLabels identifying the ingress controller namespace
networkPolicy.egress.allowAllfalseWhen false, enables egress scaffolding

Egress DNS filter

Enabled by default. Deploys a Blocky DNS proxy for NextDNS-style filtering within the cluster.

KeyDefaultDescription
egressFilter.enabledtrueDeploy Blocky
egressFilter.replicas1Blocky replicas
egressFilter.upstreamDns.default[10.96.0.10]Upstream DNS (kube-dns ClusterIP)
egressFilter.blockCountries[RU, CN]Country/TLD blocklist presets to deny
egressFilter.denylists.threatsHaGeZi TIF listThreat intelligence blocklist
egressFilter.denylists.malwareStevenBlack hostsMalware blocklist
egressFilter.allowlists[]Domains that are never blocked
egressFilter.queryLog.enabledtrueLog blocked queries to stdout
egressFilter.queryLog.logLevelblockedblocked or all
egressFilter.metrics.enabledtruePrometheus metrics on :4000/metrics
egressFilter.customConfig(default-deny config)Escape hatch: full Blocky config.yml

When customConfig is set, all other egressFilter settings (except image, replicas, resources, securityContext) are ignored.

The default customConfig ships a default-deny posture: blocks all domains, then explicitly allows a short list (GitHub, Slack, Google OAuth).

egressFilter.blockCountries is a deny control, not an allow control. It blocks matching country TLDs while other DNS remains governed by your upstream resolvers, denylists, allowlists, or full customConfig.

Available blocklist presets: RU (.ru, .su, .рф), CN (.cn, .中国, .中國), IR (.ir), KP (.kp), BY (.by).

Chromium

Enabled by default. Deploys Chromium as a standalone Deployment + ClusterIP Service for browser automation via CDP.

KeyDefaultDescription
chromium.enabledtrueDeploy Chromium
chromium.image.repositoryzenika/alpine-chromeChromium image
chromium.image.tag124Image tag
chromium.cdpPort9222Chrome DevTools Protocol port

The container runs as uid 1000 (non-root) with a read-only root filesystem and all Linux capabilities dropped. For stronger isolation, set pod.runtimeClassName to a gVisor or Kata runtime.

Tailscale

Two independent features, both enabled by default:

Expose

Annotates the Service for the Tailscale K8s Operator to proxy port 18789 onto your tailnet. No public ingress needed.

KeyDefaultDescription
tailscale.expose.enabledtrueEnable tailnet exposure
tailscale.expose.hostname""Tailnet hostname
tailscale.expose.tags""ACL tags (e.g. tag:k8s,tag:kubeclaw)

SSH

Adds a Tailscale sidecar container with --ssh so operators can SSH into the pod from any enrolled device.

KeyDefaultDescription
tailscale.ssh.enabledtrueEnable SSH sidecar
tailscale.ssh.image.tagv1.78.1Tailscale image tag
tailscale.ssh.authKey""Required (unless authKeySecretName is set)
tailscale.ssh.authKeySecretName""Reference an existing Secret
tailscale.ssh.authKeySecretKeyTS_AUTHKEYKey within the referenced Secret
tailscale.ssh.hostname""Tailnet hostname (defaults to Helm fullname)
tailscale.ssh.userspacetrueUserspace networking (no NET_ADMIN needed)
tailscale.ssh.persistStatefalsePersist state across restarts via PVC