<?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/dev/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/dev/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/dev/howto/install-kubernetes-helm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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 &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API CRDs&lt;/a&gt;&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="install-from-the-helm-repository"&gt;Install from the Helm Repository&lt;/h2&gt;
&lt;p&gt;Add the Helm repository hosted on GitHub Pages and install:&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 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;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;h3 id="pin-a-specific-version"&gt;Pin a Specific Version&lt;/h3&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 class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --version &amp;lt;chart-version&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;chart-version&amp;gt;&lt;/code&gt; with the desired version (e.g. &lt;code&gt;0.1.0&lt;/code&gt;). Available versions are listed on the &lt;a href="https://github.com/networking-incubator/coraza-kubernetes-operator/releases"&gt;releases page&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Install on OpenShift</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/install-openshift-operatorhub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/install-openshift-operatorhub/</guid><description>&lt;p&gt;This guide covers installing the Coraza Kubernetes Operator on OpenShift Container Platform.&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;Gateway API enabled on your cluster (see &lt;a href="https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/install-openshift-operatorhub/#enable-gateway-api"&gt;Enable Gateway API&lt;/a&gt; below)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.redhat.com/en/documentation/red_hat_openshift_service_mesh/3.0/html-single/gateways/index"&gt;OpenShift Service Mesh&lt;/a&gt; or Istio installed with Gateway API support&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enable-gateway-api"&gt;Enable Gateway API&lt;/h3&gt;
&lt;p&gt;On OpenShift 4.20 and later, the Gateway API CRDs are included by default. You must create the &lt;code&gt;openshift-default&lt;/code&gt; GatewayClass, which is the &lt;a href="https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ingress_and_load_balancing/configuring-ingress-cluster-traffic#ingress-gateway-api"&gt;officially supported GatewayClass&lt;/a&gt; provided by the OpenShift Ingress Operator:&lt;/p&gt;</description></item><item><title>Creating Firewall Rules</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/creating-firewall-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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. Rule text is stored in &lt;strong&gt;RuleSource&lt;/strong&gt; resources; a &lt;strong&gt;RuleSet&lt;/strong&gt; lists RuleSource (and optional RuleData) names in order and drives compilation and caching.&lt;/p&gt;
&lt;h2 id="writing-rules-in-rulesources"&gt;Writing rules in RuleSources&lt;/h2&gt;
&lt;p&gt;Each &lt;strong&gt;RuleSource&lt;/strong&gt; has &lt;code&gt;spec.rules&lt;/code&gt;: a string containing SecLang directives (use a &lt;code&gt;|&lt;/code&gt; block scalar in YAML for multiline text).&lt;/p&gt;
&lt;p&gt;A basic RuleSource 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;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;RuleSource&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;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;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 RuleSource 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/dev/howto/deploying-waf-engine/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/deploying-waf-engine/</guid><description>&lt;p&gt;An Engine resource references a RuleSet and attaches the Coraza WAF to a Gateway 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 target that identifies 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;target&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;type&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;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;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Istio&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;target.name&lt;/code&gt; identifies the Gateway resource in the same namespace. The operator derives the workload label selector using the GEP-1762 convention (&lt;code&gt;gateway.networking.k8s.io/gateway-name&lt;/code&gt; label).&lt;/p&gt;</description></item><item><title>Using the OWASP CoreRuleSet</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/using-coreruleset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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 &lt;strong&gt;RuleSource&lt;/strong&gt;, &lt;strong&gt;RuleData&lt;/strong&gt;, and &lt;strong&gt;RuleSet&lt;/strong&gt; manifests 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/dev/howto/using-data-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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 provides these files from &lt;strong&gt;RuleData&lt;/strong&gt; resources, referenced by the &lt;strong&gt;RuleSet&lt;/strong&gt; &lt;code&gt;spec.data&lt;/code&gt; list.&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;. Store that file in a &lt;strong&gt;RuleData&lt;/strong&gt; &lt;code&gt;spec.files&lt;/code&gt; map (filename → content).&lt;/p&gt;</description></item><item><title>Configuring Failure Policies</title><link>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/howto/configuring-failure-policies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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;target&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;type&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;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;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Istio&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/dev/howto/monitoring-prometheus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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/dev/howto/upgrading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://networking-incubator.github.io/coraza-kubernetes-operator/dev/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>