我是 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