Контроллер доступа Kubernetes, kyverno, позволяет помещать в кластер неподписанные образы
Я новичок в Kubernetes. Я пытаюсь подписать образ Docker с помощью Cosign и проверить образ с помощью контроллера доступа Kyverno. Но в моей настройке контроллер допуска 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: "xxx@gmail.com"
issuer: "https://accounts.google.com"
rekor:
url: "https://rekor.sigstore.dev"
Я следую этому руководству для проверки изображения с помощью Kyverno,
https://kyverno.io/docs/writing-policies/verify-images/sigstore/
В моей настройке первый пример, упомянутый в приведенном выше руководстве, работает, как и ожидалось. Но когда я использую файл политики и метод подписи без ключа, контроллер доступа Kyverno не работает, и модуль создается с неподписанным образом.
1 ответ
Причина, по которой это происходит, заключается в том, чтоverifyImages.imageReferences
установлен неправильно.
Изображение, которое вы используете, также имеет тег или дайджест в конце, но ссылка на ваше изображение им не соответствует. Сейчас он соответствует только тогда, когда изображение является в точности строкой.localhost:5000/nginx_signed
Вам следует обновить ссылку на изображение наlocalhost:5000/nginx_signed*
так, чтобы оно соответствовалоlocalhost:5000/nginx_signed:<ANY-TAG>
илиlocalhost:5000/nginx_signed@sha256:<DIGEST-HASH>
.
Я бы также посоветовал вам публиковать вопросы, связанные с Kyverno, на канале Kyverno в Kubernetes Slack: https://slack.k8s.io/#kyverno