- Authors

- Name
- Youngju Kim
- @fjvbn20031
1. Kyvernoとは
KyvernoはKubernetesのために設計されたポリシーエンジンです。OPA/Gatekeeperとは異なり、別のポリシー言語なしにYAMLとCELでポリシーを定義できます。
主な特徴: YAMLベースのポリシー定義、kubectlによるKubernetesリソース管理、4つのルールタイプ(validate、mutate、generate、verifyImages)、CELサポート、バックグラウンドスキャン。
2. アーキテクチャ概要
Admission Controller: APIリクエストを傍受してリアルタイムでポリシーを適用 Background Controller: 既存リソースに対するポリシー評価を定期的に実行 Reports Controller: PolicyReport/ClusterPolicyReport CRDの生成と管理
2.1 Webhook構成
KyvernoはインストールからMutatingWebhookConfigurationとValidatingWebhookConfigurationを自動構成します。failurePolicyはFail(Webhook失敗時に拒否)またはIgnore(失敗時に許可)に設定できます。
3. ポリシータイプ
3.1 ClusterPolicy vs Policy
# ClusterPolicy: クラスタ全体に適用
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-labels
spec:
validationFailureAction: Enforce
rules:
- name: check-labels
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Label 'app.kubernetes.io/name' is required"
pattern:
metadata:
labels:
app.kubernetes.io/name: '?*'
3.2 validationFailureAction
- Enforce: ポリシー違反時にリクエストを拒否
- Audit: 違反を記録するがリクエストは許可
4. ルールタイプ
4.1 validate
rules:
- name: validate-resources
match:
any:
- resources:
kinds:
- Deployment
validate:
message: 'CPU and memory limits are required'
pattern:
spec:
template:
spec:
containers:
- resources:
limits:
memory: '?*'
cpu: '?*'
4.2 mutate
rules:
- name: add-default-labels
match:
any:
- resources:
kinds:
- Deployment
mutate:
patchStrategicMerge:
metadata:
labels:
app.kubernetes.io/managed-by: kyverno
4.3 generate
rules:
- name: generate-networkpolicy
match:
any:
- resources:
kinds:
- Namespace
generate:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
name: default-deny
namespace: '{{ request.object.metadata.name }}'
synchronize: true
data:
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
4.4 verifyImages
rules:
- name: verify-image-signature
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- 'ghcr.io/myorg/*'
attestors:
- entries:
- keyless:
url: https://fulcio.sigstore.dev
5. インストール
helm repo add kyverno https://kyverno.github.io/kyverno/
helm install kyverno kyverno/kyverno -n kyverno --create-namespace
6. まとめ
- Kubernetesネイティブ: YAML/CELベースのポリシー、kubectlで管理
- 3つのコントローラ: Admission(リアルタイム)、Background(既存リソース)、Reports
- 4つのルールタイプ: validate、mutate、generate、verifyImages
- 柔軟なマッチング: リソース種類、ネームスペース、ユーザー、ロールによるフィルタリング
- Audit/Enforceモード: 段階的なポリシー導入をサポート