- Authors

- Name
- Youngju Kim
- @fjvbn20031
1. HA(高可用性)デプロイ
1.1 レプリカ構成
helm install kyverno kyverno/kyverno -n kyverno --create-namespace \
--set admissionController.replicas=3 \
--set backgroundController.replicas=2 \
--set reportsController.replicas=2
1.2 リソース割り当てとトポロジー
admissionController:
replicas: 3
container:
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
1.3 failurePolicy戦略
Fail: Webhookダウン時にリクエストを拒否(セキュリティ優先)Ignore: Webhookダウン時にリクエストを許可(可用性優先)
failurePolicy: Fail使用時は必ずPDBを設定:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: kyverno-admission-controller
namespace: kyverno
spec:
minAvailable: 2
selector:
matchLabels:
app.kubernetes.io/component: admission-controller
2. ポリシーレポート
kubectl get policyreport -n production
kubectl get clusterpolicyreport
レポートにはポリシーごと、ネームスペースごとのpass/fail/warn数が含まれます。Policy Reporter UIで可視化できます:
helm install policy-reporter policy-reporter/policy-reporter -n kyverno \
--set ui.enabled=true --set kyvernoPlugin.enabled=true
3. モニタリング
3.1 Prometheusメトリクス
主要メトリクス: kyverno_admission_requests_total、kyverno_admission_review_duration_seconds、kyverno_policy_results_total。
3.2 アラートルール
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kyverno-alerts
spec:
groups:
- name: kyverno
rules:
- alert: KyvernoWebhookHighLatency
expr: histogram_quantile(0.99, rate(kyverno_admission_review_duration_seconds_bucket[5m])) > 10
for: 5m
- alert: KyvernoHighFailureRate
expr: rate(kyverno_admission_requests_total{success="false"}[5m]) > 0.1
for: 5m
4. バックグラウンドスキャニング
apiVersion: kyverno.io/v1
kind: ClusterPolicy
spec:
validationFailureAction: Audit
background: true
rules:
- name: check-labels
validate:
pattern:
metadata:
labels:
app.kubernetes.io/name: '?*'
5. PolicyException
apiVersion: kyverno.io/v2beta1
kind: PolicyException
metadata:
name: allow-privileged-monitoring
namespace: monitoring
spec:
exceptions:
- policyName: disallow-privileged
ruleNames:
- check-privileged
match:
any:
- resources:
kinds: ['Pod']
namespaces: ['monitoring']
names: ['prometheus-*']
6. トラブルシューティング
# Kyvernoログの確認
kubectl logs -n kyverno -l app.kubernetes.io/component=admission-controller --tail=100
# Webhookステータスの確認
kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations
# ポリシーステータスの確認
kubectl get clusterpolicy -o wide
kubectl describe clusterpolicy require-labels
# Admissionレイテンシの確認
kubectl exec -n kyverno deploy/kyverno-admission-controller -- wget -qO- localhost:8000/metrics | grep admission_review_duration
7. まとめ
- HAデプロイ: 3+レプリカ、PDB、TopologySpreadConstraints
- ポリシーレポート: PolicyReport CRDでコンプライアンス状況の可視化
- モニタリング: Prometheusメトリクス + Grafanaダッシュボード + アラートルール
- バックグラウンドスキャニング: 既存リソースに対する定期的なポリシー評価
- 例外メカニズム: PolicyExceptionで正当な例外を管理
- トラブルシューティング: Webhookログ、ポリシーステータス、レポートによる診断