Kubernetes 准入控制器 kyverno 允许未签名的图像进入集群

Kubernetes 准入控制器 kyverno 允许未签名的图像进入集群

我是 Kubernetes 新手。我正在尝试使用 Cosign 为 Docker 镜像签名,并使用 Kyverno Admission 控制器验证镜像。但在我的设置中,Kyverno Admission 控制器允许未签名的镜像进入集群。

Kyverno 政策文件,

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: kyverno
  namespace: kyverno
spec:
  validationFailureAction: Enforce
  background: false
  webhookTimeoutSeconds: 30
  failurePolicy: Fail
  rules:
    - name: kyverno
      match:
        any:
        - resources:
            kinds:
              - Pod
      verifyImages:
      - imageReferences:
        - "localhost:5000/nginx_signed"
        attestors:
        - entries:
          - keyless:
              subject: "[email protected]"
              issuer: "https://accounts.google.com"
              rekor:
               url: "https://rekor.sigstore.dev"   

我正在按照本教程使用 Kyverno 验证图像,

https://kyverno.io/docs/writing-policies/verify-images/sigstore/

在我的设置中,上述教程中提到的第一个示例按预期工作。但是当我使用策略文件和无密钥签名方法时,Kyverno 准入控制器不起作用,并且使用未签名的映像创建了 pod。

答案1

发生这种情况的原因是因为verifyImages.imageReferences设置不正确。

您使用的图像最后也有一个标签或摘要,但您的图像引用与这些不匹配。目前,只有当图像恰好是字符串时,它才会匹配localhost:5000/nginx_signed

您应该更新图像引用localhost:5000/nginx_signed*以使其匹配localhost:5000/nginx_signed:<ANY-TAG>localhost:5000/nginx_signed@sha256:<DIGEST-HASH>

我还建议您在 Kubernetes slack 的 Kyverno 频道上发布与 Kyverno 相关的问题:https://slack.k8s.io/#kyverno

相关内容