13 May 2026

7 Min. Reading Time

Anyone running a multi-cloud setup with three or more Kubernetes clusters and still documenting governance in Confluence pages will face operational risks by 2026 that NIS2 auditors are sure to detect during their first random check. Policy-as-Code tools like OPA Gatekeeper or Kyverno enforce rules directly in the Admission Path. What used to live as a PDF in the compliance folder now becomes YAML, which validates every Pod definition before it is even scheduled.

The Essentials at a Glance

  • Policy-as-Code shifts compliance from audit meetings into the build pipeline: OPA Gatekeeper and Kyverno hook up as admission webhooks to every Kubernetes API call and block Pods violating configuration policies before they get scheduled.
  • Multi-cloud means multi-policy engines or a unified platform layer: EKS, AKS, and GKE each come with their own default rules. To consistently enforce governance across all three cluster types, you need either a centralized policy hub or GitOps pipelines that push identical rules to every cluster.
  • The difference between OPA Gatekeeper and Kyverno is practical, not ideological: Gatekeeper requires Rego as its DSL and a team proficient in the language. Kyverno uses YAML patterns that any platform engineer can read without training. The decision usually hinges on skill availability rather than feature lists.

Related:Multi-Cluster Without a New Ops Silo  /  Kubernetes 1.36 Migration Checklist

Why Compliance Drift in Multi-Cloud K8s Happens Faster Than You Think

In the articles we’ve published in cloudmagazin since early 2026, a pattern has emerged that most platform teams underestimate. Anyone managing three cluster sets via EKS, AKS, and GKE eventually ends up with three slightly different defaults for Pod Security Standards. A minor deviation in how `runAsNonRoot` is defined, a different behavior regarding automatic Service Account tokens, or an alternative default path for Network Policies. Individually, these seem harmless. But collectively, they create a compliance profile that no one has fully documented anymore.

The NIS2 implementations our authors have covered in recent weeks now turn this drift gap into an audit issue. It’s no longer enough to show that a policy exists somewhere. Auditors are asking about the mechanism enforcing it. Confluence isn’t a valid answer anymore.

Policy-as-Code using OPA Gatekeeper or Kyverno solves this problem by shifting rule definitions to where Kubernetes already checks every resource anyway: the Admission Controller. This makes compliance part of the build process—not just a quarterly meeting.

OPA Gatekeeper vs. Kyverno: the operational dividing line

Theoretical comparisons of the two engines appear in every second DevOps conference recording. In practice, these tools differentiate themselves in ways that go beyond what their feature matrices suggest.

Dimension OPA Gatekeeper Kyverno
Language Rego (custom DSL) YAML patterns, Kubernetes-native
Learning curve Steep, requires separate skill set Shallow, familiar to platform engineers
Mutating policies Via Gatekeeper mutator Built-in
Reuse outside K8s Yes (OPA patterns everywhere) No (K8s-only)
Best-fit profile Teams with Rego experience, multi-domain compliance engine Platform teams needing to roll out governance quickly

What consistently causes issues in our authors’ observations during cluster migrations is the question of skills. Rego is powerful, but if three out of eight platform engineers can’t write it productively, policy maintenance becomes a bottleneck. Kyverno reaches readability thresholds sooner.

A Multi-Cloud Setup without Policy Drift: Four Steps

  1. Version your policy library centrally. A single Git repository holds all ConstraintTemplates or ClusterPolicies. Every cluster consumes from this source, no cluster owns it. If you maintain policies locally per cluster, within six months you’ll have three different definitions for the same rule.
  2. GitOps push instead of manual kubectl apply. Tools like Argo CD or Flux deploy the policy library to each cluster. This makes the cluster state a function of the Git state, and audit questions are answered with a Git log rather than a screenshot.
  3. Audit mode before enforcement mode. New policies run in warning mode for at least two weeks. The reports show which existing workloads would violate the rule. Only when the hit list is empty or intentionally excluded does the policy switch to blocking mode.
  4. Drift detection as a separate layer. Even with GitOps, there are ad-hoc changes that briefly bypass the controller. A weekly drift report (e.g., via Argo CD diff or Kyverno Reports API) highlights every deviation. Without this layer, consistency across multiple clusters will eventually blur.

The first two steps are mandatory. Step three prevents the standard trap where policies break in production and block four teams simultaneously. Step four is the difference between a compliance demonstration and a setup that remains consistent even after 18 months.

What platform teams will really decide in the 2026 engine choice

In our research with DACH platform leads, three decision anchors emerged that rarely appear in conference slides.

First is the question of whether the platform team already enforces compliance for non-Kubernetes workloads (Terraform plans, IAM policies, CI pipelines). If yes, OPA is the natural lever since Rego covers all these domains. If the compliance world is purely Kubernetes, there’s little reason to bring in a second DSL.

Second is the size and seniority distribution within the team. A team of three engineers where only one reliably writes Rego is better served by Kyverno. As soon as this one engineer is on vacation or leaves, policy maintenance grinds to a halt. Kyverno-YAML survives personnel turnover much more easily.

Third is the existing security tooling. If Falco, Trivy, or Pod Security Standards are already in the pipeline, reporting expectations are often natively fulfilled by Kyverno using its Reports-CRDs. Gatekeeper offers less out of the box here.

Frequently Asked Questions

Is Policy-as-Code worth it even for a single Kubernetes cluster?

Yes, as soon as the cluster runs production workloads from more than one team. Without an admission controller, consistency responsibility spreads into every individual manifest. With Policy-as-Code, it becomes a platform property. For a lab cluster, the overhead is too high; for a multi-tenant setup, it’s mandatory.

How much performance overhead do admission webhooks introduce?

In well-configured setups, the additional admission latency per pod creation stays in the single-digit millisecond range. It becomes critical only during bulk operations (such as Helm releases with hundreds of resources) or with very complex constraint templates. Both engines support caching and background reconciliation.

Can OPA and Kyverno run side by side in the same cluster?

Technically yes, both register as different webhooks. Operationally, it rarely makes sense. Duplicate policies lead to confusion during debugging, and duplicate audit layers double the maintenance effort. If a migration path is needed, run them in parallel temporarily; otherwise, consolidate onto one engine.

What happens if the admission webhook fails?

It depends on the `failurePolicy` setting. On `Fail`, any webhook outage blocks the cluster from creating new pods. On `Ignore`, policies are bypassed when the webhook is down, potentially creating compliance gaps. Best practice for production is `Fail` plus high availability of the webhook deployment. Running a single-pod setup for a multi-tenant cluster is reckless.

Is Policy-as-Code enough on its own for NIS2 compliance?

No, but it covers a large portion of the technical evidence requirements. NIS2 also requires incident response processes, vendor management, and reporting mechanisms. Policy-as-Code provides the technical proof of enforcement for security configurations, significantly reducing audit workload. The organizational aspects remain unaffected.

Read more

More from the MBF Media Network

Also available in

A magazine by Evernine Media GmbH