You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kyverno CLI镜像bundle验证通过但策略执行失败,求排查原因

Kyverno ClusterPolicy镜像签名验证失败问题排查

我正尝试配置Kyverno ClusterPolicy以阻止无attestation的镜像,代码托管于github仓库whoissqr/cg-test-keyless-sign。

我的ClusterPolicy配置

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: check-image-keyless
spec:
  validationFailureAction: Enforce
  failurePolicy: Fail
  background: false
  webhookTimeoutSeconds: 30
  rules:
    - name: check-image-keyless
      match:
        any:
        - resources:
            kinds:
              - Pod
      verifyImages:
      - verifyDigest: false
        imageReferences:
        - "ghcr.io/whoissqr/cg-test-keyless-sign:latest"
        attestors:
        - entries:
          - keyless:
              subject: "https://github.com/whoissqr/cg-test-keyless-sign/.github/workflows/main.yml@refs/heads/main"
              issuer: "https://token.actions.githubusercontent.com"
              rekor:
                url: https://rekor.sigstore.dev

执行命令及现象

执行命令:
kubectl get clusterpolicies -o yaml | kyverno apply - --resource ./k3s/pod.yaml -v 5

输出显示cosign已验证镜像(bundleVerified=true)、镜像证明者验证成功,但结果仍显示fail:1,单独使用cosign验证该镜像可通过,请问这个失败项具体是什么原因?

可能的原因及解决方法

  • 未指定要验证的Attestation类型:
    默认情况下Kyverno的verifyImages仅验证镜像签名,若要验证attestation(证明),必须显式添加attestations字段指定对应的predicate类型。GitHub Actions生成的SLSA证明通常使用https://slsa.dev/provenance/v0.2,补充该配置后Kyverno才能正确识别并验证attestation:

    verifyImages:
    - verifyDigest: false
      imageReferences:
      - "ghcr.io/whoissqr/cg-test-keyless-sign:latest"
      attestors:
      - entries:
        - keyless:
            subject: "https://github.com/whoissqr/cg-test-keyless-sign/.github/workflows/main.yml@refs/heads/main"
            issuer: "https://token.actions.githubusercontent.com"
            rekor:
              url: https://rekor.sigstore.dev
      # 添加以下attestations配置
      attestations:
      - predicateType: "https://slsa.dev/provenance/v0.2"
    
  • 镜像引用匹配异常:
    确认pod.yaml中的镜像地址与policy里imageReferences的内容完全一致(包括tag、域名拼写)。若pod使用了镜像摘要而非tag,即使verifyDigest: false,也可能导致Kyverno无法正确关联验证规则,可尝试将policy中的镜像引用改为带摘要的形式,或统一使用tag。

  • Kyverno版本兼容性问题:
    部分旧版本Kyverno对cosign keyless验证、attestation处理存在bug,建议升级到最新稳定版,同时查看对应版本的官方文档确认特性支持情况。

  • 日志细节遗漏:
    虽然启用了-v 5日志,可重点排查Kyverno在镜像验证后的规则评估阶段输出,确认是否有其他隐含的规则约束触发失败,比如是否存在其他未注意到的验证条件。

内容的提问来源于stack exchange,提问作者sqr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:47:33