需要强制镜像来源、禁止特权容器、要求资源限制、自动补标签或生成配套资源。Kyverno 用 Kubernetes 原生 YAML 表达策略,不需要学习 Rego。
Audit 先观察,Enforce 再拦截。helm repo add kyverno https://kyverno.github.io/kyverno
helm install kyverno kyverno/kyverno \
--namespace kyverno --create-namespace \
--set admissionController.replicas=3
latest 标签:kubectl apply -f - <<'EOF'
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-latest-tag
spec:
validationFailureAction: Audit
rules:
- name: require-image-tag
match:
any:
- resources:
kinds: [Pod]
validate:
message: "镜像必须使用明确版本,不能使用 latest。"
pattern:
spec:
containers:
- image: "!*:latest"
EOF
kubectl get policyreport -A
kubectl get clusterpolicyreport
Enforce:kubectl patch clusterpolicy disallow-latest-tag \
--type merge -p '{"spec":{"validationFailureAction":"Enforce"}}'
添加资源限制和特权容器策略。对系统命名空间使用 exclude 或 PolicyException。
使用 mutate 自动补标签:
kubectl apply -f - <<'EOF'
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-team-label
spec:
rules:
- name: add-label
match:
any:
- resources:
kinds: [Deployment]
mutate:
patchStrategicMerge:
metadata:
labels:
managed-by: kyverno
EOF
kyverno apply policies/ --resource deployment.yaml
kyverno test .
kubectl get clusterpolicy 显示策略为 Ready。validationFailureAction 改回 Audit,立即停止拦截。kyverno — CLI 测试和策略管理kubectl — 查看策略、报告和事件helm — 安装和升级 Kyvernojq / yq — 处理策略 YAML