Skip to content
Published on

Kyverno vs OPA/Gatekeeper: ポリシーエンジン比較分析

Authors

1. アーキテクチャ比較

Kyverno: Kubernetesネイティブ設計、3コントローラ、ClusterPolicy CRD、validate/mutate/generate/verifyImagesすべてサポート。

OPA/Gatekeeper: 汎用OPA + Kubernetesアダプター、ConstraintTemplate + Constraintの2層モデル、validation中心。


2. ポリシー言語

Kyverno: YAML + CEL

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-labels
spec:
  rules:
    - name: check-app-label
      match:
        any:
          - resources:
              kinds: ['Deployment']
      validate:
        pattern:
          metadata:
            labels:
              app.kubernetes.io/name: '?*'

OPA/Gatekeeper: Rego

apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
  name: k8srequiredlabels
spec:
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8srequiredlabels
        violation[{"msg": msg}] {
          provided := {l | input.review.object.metadata.labels[l]}
          required := {l | l := input.parameters.labels[_]}
          missing := required - provided
          count(missing) > 0
          msg := sprintf("Missing: %v", [missing])
        }
項目KyvernoOPA/Gatekeeper
言語YAML + CELRego
学習曲線低い高い
表現力中程度(CELで補完)高い(チューリング完全)

3. 機能比較

機能KyvernoOPA/Gatekeeper
Validationネイティブネイティブ
Mutationフルサポートアルファ(v3.10+)
Generationネイティブ非サポート
イメージ検証ネイティブ外部ツール必要

4. パフォーマンス

ポリシー数KyvernoレイテンシOPA/Gatekeeperレイテンシ
10~5ms~3ms
50~15ms~8ms
100~30ms~15ms

5. 選択ガイド

Kyvernoを選ぶ場合: Kubernetes専用環境、YAMLに慣れたチーム、mutation/generation/イメージ検証が必要、学習曲線を最小化したい。

OPA/Gatekeeperを選ぶ場合: Kubernetes以外でもOPAを使用、複雑なポリシーロジックが必要、大規模でのパフォーマンスが重要、チームがRegoに慣れている。


6. まとめ

比較項目KyvernoOPA/Gatekeeper
アクセシビリティ高い(YAML)中程度(Rego)
機能範囲広い(4つのルールタイプ)狭い(validation中心)
パフォーマンス良好優秀
イメージ検証ネイティブ外部ツール
CNCF成熟度IncubatingGraduated

両ツールともプロダクションで検証済みです。チームの能力と要件に応じて選択してください。