- Authors

- Name
- Youngju Kim
- @fjvbn20031
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])
}
| 項目 | Kyverno | OPA/Gatekeeper |
|---|---|---|
| 言語 | YAML + CEL | Rego |
| 学習曲線 | 低い | 高い |
| 表現力 | 中程度(CELで補完) | 高い(チューリング完全) |
3. 機能比較
| 機能 | Kyverno | OPA/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. まとめ
| 比較項目 | Kyverno | OPA/Gatekeeper |
|---|---|---|
| アクセシビリティ | 高い(YAML) | 中程度(Rego) |
| 機能範囲 | 広い(4つのルールタイプ) | 狭い(validation中心) |
| パフォーマンス | 良好 | 優秀 |
| イメージ検証 | ネイティブ | 外部ツール |
| CNCF成熟度 | Incubating | Graduated |
両ツールともプロダクションで検証済みです。チームの能力と要件に応じて選択してください。