<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How-to Guides on Coraza Kubernetes Operator</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/</link><description>Recent content in How-to Guides on Coraza Kubernetes Operator</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/index.xml" rel="self" type="application/rss+xml"/><item><title>Install on Kubernetes with Helm</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/install-kubernetes-helm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/install-kubernetes-helm/</guid><description>&lt;p&gt;This guide covers installing the Coraza Kubernetes Operator using Helm on a standard Kubernetes cluster.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes cluster running &lt;strong&gt;v1.32 or later&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://istio.io/latest/docs/setup/"&gt;Istio&lt;/a&gt; installed with Gateway API CRDs&lt;/li&gt;
&lt;li&gt;&lt;a href="https://helm.sh/docs/intro/install/"&gt;Helm 3&lt;/a&gt; installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="add-the-helm-repository"&gt;Add the Helm Repository&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://networking-incubator.github.io/coraza-kubernetes-operator/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-with-default-values"&gt;Install with Default Values&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade --install coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; coraza-kubernetes-operator/coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --namespace coraza-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="customize-the-installation"&gt;Customize the Installation&lt;/h2&gt;
&lt;p&gt;Override default values by passing a values file or individual settings:&lt;/p&gt;</description></item><item><title>Install on OpenShift via OperatorHub</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/install-openshift-operatorhub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/install-openshift-operatorhub/</guid><description>&lt;p&gt;This guide covers installing the Coraza Kubernetes Operator on OpenShift Container Platform using the OperatorHub.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OpenShift Container Platform &lt;strong&gt;v4.20 or later&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cluster administrator privileges&lt;/li&gt;
&lt;li&gt;OpenShift Service Mesh or Istio installed with Gateway API support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-from-operatorhub-web-console"&gt;Install from OperatorHub (Web Console)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the OpenShift web console as a cluster administrator.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Operators &amp;gt; OperatorHub&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Coraza Kubernetes Operator&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the operator tile and click &lt;strong&gt;Install&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the update channel, installation mode, and approval strategy.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Install&lt;/strong&gt; and wait for the operator to reach the &lt;strong&gt;Succeeded&lt;/strong&gt; phase.&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- TODO: Replace with the published CatalogSource details when available. --&gt;
&lt;h2 id="install-from-operatorhub-cli"&gt;Install from OperatorHub (CLI)&lt;/h2&gt;
&lt;p&gt;If the operator is available in your cluster&amp;rsquo;s default catalog, create a Subscription resource:&lt;/p&gt;</description></item><item><title>Creating Firewall Rules</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/creating-firewall-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/creating-firewall-rules/</guid><description>&lt;p&gt;Firewall rules in the Coraza Kubernetes Operator are written using &lt;a href="https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-%28v3.x%29"&gt;ModSecurity SecLang&lt;/a&gt; syntax, stored in ConfigMaps, and aggregated by a RuleSet resource.&lt;/p&gt;
&lt;h2 id="writing-rules-in-configmaps"&gt;Writing Rules in ConfigMaps&lt;/h2&gt;
&lt;p&gt;Each ConfigMap must contain a key named &lt;code&gt;rules&lt;/code&gt; with SecLang directives as its value.&lt;/p&gt;
&lt;p&gt;A basic ConfigMap with Coraza engine configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;base-rules&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecRuleEngine On
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecRequestBodyAccess On
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecResponseBodyAccess Off
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecAuditLog /dev/stdout
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecAuditLogFormat JSON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; SecAuditEngine RelevantOnly&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A ConfigMap with a SQL injection detection rule:&lt;/p&gt;</description></item><item><title>Deploying a WAF Engine</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/deploying-waf-engine/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/deploying-waf-engine/</guid><description>&lt;p&gt;An Engine resource references a RuleSet and attaches the Coraza WAF to one or more Gateways via an Istio WasmPlugin.&lt;/p&gt;
&lt;h2 id="creating-an-engine"&gt;Creating an Engine&lt;/h2&gt;
&lt;p&gt;The minimum Engine configuration requires a RuleSet reference and a workload selector that matches your Gateway:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;waf.k8s.coraza.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Engine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-engine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruleSet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-ruleset&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;istio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wasm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;workloadSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway.networking.k8s.io/gateway-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruleSetCacheServer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pollIntervalSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="selecting-a-gateway"&gt;Selecting a Gateway&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;workloadSelector&lt;/code&gt; determines which Gateway pods the WAF attaches to. Kubernetes Gateway API implementations typically label Gateway pods with &lt;code&gt;gateway.networking.k8s.io/gateway-name&lt;/code&gt;. Use the label that matches your Gateway:&lt;/p&gt;</description></item><item><title>Using the OWASP CoreRuleSet</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/using-coreruleset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/using-coreruleset/</guid><description>&lt;p&gt;The &lt;a href="https://coreruleset.org/"&gt;OWASP CoreRuleSet (CRS)&lt;/a&gt; is a widely used set of attack detection rules for ModSecurity-compatible WAFs. The &lt;code&gt;kubectl-coraza&lt;/code&gt; plugin can generate Kubernetes ConfigMaps and RuleSet resources from CRS rule files.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Important&lt;/div&gt;
&lt;p&gt;This project does not provide, maintain, or support CoreRuleSet rules. Users must supply their own rules. The tools described here are provided for convenience.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="install-the-kubectl-coraza-plugin"&gt;Install the kubectl-coraza Plugin&lt;/h2&gt;
&lt;p&gt;Build the plugin from the operator repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/networking-incubator/coraza-kubernetes-operator.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; coraza-kubernetes-operator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This produces &lt;code&gt;bin/kubectl-coraza&lt;/code&gt;. Copy it to a directory on your &lt;code&gt;PATH&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Using Data Files with Rules</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/using-data-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/using-data-files/</guid><description>&lt;p&gt;Some SecLang rules use the &lt;code&gt;@pmFromFile&lt;/code&gt; directive to match against patterns stored in external data files. The Coraza Kubernetes Operator supports this through Secrets of type &lt;code&gt;coraza/data&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="when-to-use-data-files"&gt;When to Use Data Files&lt;/h2&gt;
&lt;p&gt;Use data files when your rules reference &lt;code&gt;@pmFromFile&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SecRule ARGS &amp;#34;@pmFromFile bad-patterns.data&amp;#34; \
 &amp;#34;id:3001,phase:2,deny,status:403,msg:&amp;#39;Blocked pattern detected&amp;#39;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This rule reads patterns from a file named &lt;code&gt;bad-patterns.data&lt;/code&gt;. To make this file available to the operator, store it in a Secret.&lt;/p&gt;</description></item><item><title>Configuring Failure Policies</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/configuring-failure-policies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/configuring-failure-policies/</guid><description>&lt;p&gt;The Engine &lt;code&gt;failurePolicy&lt;/code&gt; field determines how traffic is handled when the WAF is not ready or encounters an error during rule evaluation.&lt;/p&gt;
&lt;h2 id="available-policies"&gt;Available Policies&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Policy&lt;/th&gt;
 &lt;th&gt;Behavior&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fail&lt;/code&gt; (default)&lt;/td&gt;
 &lt;td&gt;Block all traffic when the WAF is not ready or encounters an error. This prioritizes security.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;allow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Allow traffic through when the WAF is not ready or encounters an error. This prioritizes availability.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="setting-the-failure-policy"&gt;Setting the Failure Policy&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;waf.k8s.coraza.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Engine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-engine&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;failurePolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fail&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruleSet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-ruleset&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;istio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wasm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;workloadSelector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;gateway.networking.k8s.io/gateway-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;my-gateway&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ruleSetCacheServer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pollIntervalSeconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="when-to-use-each-policy"&gt;When to Use Each Policy&lt;/h2&gt;
&lt;h3 id="use-fail-when"&gt;Use &lt;code&gt;fail&lt;/code&gt; when:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Security is the highest priority.&lt;/li&gt;
&lt;li&gt;You prefer to block traffic rather than risk allowing unfiltered requests.&lt;/li&gt;
&lt;li&gt;The application behind the Gateway can tolerate brief outages during WAF startup or rule updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="use-allow-when"&gt;Use &lt;code&gt;allow&lt;/code&gt; when:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Availability is the highest priority.&lt;/li&gt;
&lt;li&gt;You prefer to serve traffic unfiltered rather than block it during WAF startup.&lt;/li&gt;
&lt;li&gt;The WAF provides defense-in-depth alongside other security controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="changing-the-policy"&gt;Changing the Policy&lt;/h2&gt;
&lt;p&gt;You can change the failure policy on an existing Engine at any time:&lt;/p&gt;</description></item><item><title>Monitoring with Prometheus</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/monitoring-prometheus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/monitoring-prometheus/</guid><description>&lt;p&gt;The Coraza Kubernetes Operator exposes Prometheus metrics over HTTPS for monitoring the RuleSet cache server.&lt;/p&gt;
&lt;h2 id="enabling-the-metrics-endpoint"&gt;Enabling the Metrics Endpoint&lt;/h2&gt;
&lt;p&gt;Metrics are enabled by default. The endpoint is served over HTTPS on port &lt;strong&gt;8443&lt;/strong&gt; with TLS 1.3 and requires authentication via a Kubernetes ServiceAccount token.&lt;/p&gt;
&lt;p&gt;To disable metrics:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# values.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="enabling-the-servicemonitor"&gt;Enabling the ServiceMonitor&lt;/h2&gt;
&lt;p&gt;If you use the &lt;a href="https://prometheus-operator.dev/"&gt;Prometheus Operator&lt;/a&gt;, enable the ServiceMonitor to automatically discover the metrics endpoint:&lt;/p&gt;</description></item><item><title>Upgrading the Operator</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/upgrading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/v0.4/howto/upgrading/</guid><description>&lt;h2 id="upgrading-with-helm"&gt;Upgrading with Helm&lt;/h2&gt;
&lt;p&gt;To upgrade to the latest version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; coraza-kubernetes-operator/coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --namespace coraza-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To upgrade to a specific version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm upgrade coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; coraza-kubernetes-operator/coraza-kubernetes-operator &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --namespace coraza-system &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --version 0.3.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Helm automatically applies any CRD changes included in the new chart version.&lt;/p&gt;
&lt;h2 id="upgrading-on-openshift-olm"&gt;Upgrading on OpenShift (OLM)&lt;/h2&gt;
&lt;p&gt;If you installed the operator through OperatorHub with automatic approval, OLM handles upgrades automatically when new versions are published to the catalog.&lt;/p&gt;</description></item></channel></rss>