Kyverno镜像签名验证策略未生效问题排查求助
Kyverno拦截未签名镜像失效的排查与解决
问题现象
在k3s集群测试Kyverno的未签名镜像拦截功能时遇到两个异常:
- 已经注释GitHub Action里的cosign签名步骤,生成了无有效签名的镜像,但部署Pod时完全没被拦截,成功运行
- 修正ClusterPolicy里的镜像引用标签后,用Kyverno CLI验证能检测到问题,但
kubectl apply部署Pod还是正常跑
问题根因
核心原因是ClusterPolicy未配置background: false。Kyverno默认会启用后台验证,对集群中已存在的资源进行扫描,但对于准入控制场景(拦截新部署的Pod),必须禁用后台验证,确保策略仅在资源创建/更新的实时阶段生效,否则会出现CLI验证正常但实际部署不拦截的情况。
修复方案
编辑你的ClusterPolicy,添加background: false配置项,示例如下:
apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: verify-image spec: background: false # 关键配置:禁用后台验证 validationFailureAction: Enforce rules: - name: block-unsigned-images match: resources: kinds: - Pod verifyImages: - imageReferences: - "your-image-registry/*" # 替换为你的镜像仓库前缀 attestors: - count: 1 entries: - keyless: url: "https://fulcio.sigstore.dev" identities: - issuer: "https://token.actions.githubusercontent.com" subject: "https://github.com/your-org/your-repo/.github/workflows/your-ci.yml@refs/heads/main"
然后重新应用策略:
kubectl apply -f your-clusterpolicy.yaml
完成后再部署无签名镜像,Kyverno就会正确拦截Pod的创建请求了。
内容的提问来源于stack exchange,提问作者sqr
相关产品推荐
相关产品推荐

