概述目标:通过Kyverno实现标签规范、禁止最新镜像标签、自动补全注解等策略,以准入控制保障一致性。适用:生产集群资源规范与安全治理、GitOps策略即代码。核心与实战验证策略:禁止使用latest镜像标签(ClusterPolicy):apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: disallow-latest-tag

spec:

validationFailureAction: enforce

rules:

  • name: no-latest

match:

any:

  • resources:

kinds: [Deployment, StatefulSet, DaemonSet]

validate:

message: "image tag 'latest' is not allowed"

pattern:

spec:

template:

spec:

containers:

  • image: "*:*"

deny:

conditions:

any:

  • key: "{{ images.containers.[].image | split(':')[1] }}"

operator: Equals

value: latest

验证策略:必须包含appenv标签:apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: require-labels

spec:

validationFailureAction: enforce

rules:

  • name: require-app-env

match:

any:

  • resources:

kinds: [Deployment, Service]

validate:

message: "app and env labels are required"

pattern:

metadata:

labels:

app: "?*"

env: "?*"

变更策略:自动添加注解:apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: add-annotations

spec:

rules:

  • name: add-contact

match:

any:

  • resources:

kinds: [Deployment]

mutate:

patchStrategicMerge:

metadata:

annotations:

contact: [email protected]

示例应用策略与检查:kubectl apply -f disallow-latest-tag.yaml

kubectl apply -f require-labels.yaml

kubectl apply -f add-annotations.yaml

kubectl get clusterpolicy

测试不合规资源被拒:kubectl apply -f bad-deploy.yaml

验证与监控策略状态:观察kubectl get policyreport/clusterpolicyreport;查看失败条目与资源列表。日志与审计:查看Kyverno控制器日志;在GitOps中版本化策略并审查变更。例外与范围:使用matchexclude精确限定命名空间与资源类型。常见误区仅创建Policy未设validationFailureAction导致不强制;生产需enforce。规则匹配过宽导致误拒;需精确匹配kind与命名空间。忽视PolicyReport,无法及时发现违规资源;应接入告警与仪表盘。结语Kyverno以策略即代码实现准入治理与自动修复,配合报告与审计可提升资源合规性与生产一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部