Kyverno & Kyverno Policies
Kyverno — это приложение для управления политиками безопасности Kubernetes. Политики безопасности представлены в Kyverno как ресурсы Kubernetes.
Kyverno поддерживает такие инструменты, как kubectl, git и kustomize. Интерфейс командной строки Kyverno можно использовать для тестирования политик и проверки ресурсов как часть конвейера CI/CD.
Kyverno-policies — это расширение для Kyverno.
Kyverno-policies содержит реализацию Kubernetes Pod Security Standards (PSS). При установке расширения можно выбрать режим работы политик: audit (только оповещение) или enforce (блокировка). Оригиналы политик загружены в отдельный репозиторий Kyverno-policies.
Отправлять оповещения из Kyverno в другие системы можно с помощью расширения kyverno-policy-reporter. Kyverno-policy-reporter поддерживает выгрузку в Yandex Object Storage (s3).
Совет
Чтобы выявить уязвимости в работе кластера Kubernetes, используйте приложение Chaos Mesh. Нахождение уязвимостей поможет настроить политики безопасности.
Важно
Обновление до новой версии с версий, выпущенных до 2026 года, не поддерживается.
Порядок обновления для старых версий
Запланируйте небольшое окно обслуживания: эти шаги на короткое время отключают контроль
допуска (admission control) Kyverno в кластере. Команды выполняются черезkubectlв целевом
кластере.
0. (Рекомендуется) Сделайте резервную копию собственных политик
Шаг 3 удаляет CRD Kyverno, а вместе с ними — все объекты ClusterPolicy/Policy, включая
созданные вами. (Встроенные политики Pod Security Standards новая версия создаёт заново
автоматически; сохранять нужно только ваши собственные политики.) Историю PolicyReports тоже
удаляется, она будет перегенерирована после переустановки.
kubectl get clusterpolicies.kyverno.io,policies.kyverno.io -A -o yaml > my-kyverno-policies-backup.yaml
1. Удалите старую версию через Marketplace
Удаляйте старое приложение через Marketplace, а не командой helm uninstall:
- Консоль: Managed Service for Kubernetes → ваш кластер → Marketplace / установленные
приложения → удалите приложение Kyverno; или - Terraform: удалите ресурс
yandex_kubernetes_marketplace_helm_releaseи выполните
terraform apply(destroy).
При этом запускается pre-delete-хук старого чарта (который удаляет вебхуки Kyverno) и
очищается запись Marketplace об установке. Прямой helm uninstall минует Marketplace и
оставляет «осиротевшую» запись о приложении, что позже приводит к ошибке AlreadyExists
при установке новой версии.
2. Удалите оставшиеся admission-вебхуки Kyverno — критично
Kyverno регистрирует свои вебхуки во время работы. Если какие-то из них уцелели после шага 1
(например, старый под был нездоров и pre-delete-хук не отработал), они указывают на уже
несуществующий Service и блокируют создание любых подов во всём кластере. Убедитесь, что их
не осталось, и удалите оставшиеся:
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations | grep kyverno
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations -o name \
| grep kyverno | xargs -r kubectl delete
3. Удалите старые CRD Kyverno — обязательно
Helm устанавливает CRD чарта (каталог crds/) только если таких CRD ещё нет — он никогда не
обновляет и не заменяет существующие. Если старые CRD (Kyverno 1.9) остаются, новая установка
продолжит использовать устаревшие определения, и новые контроллеры v1.18 попадут в
crash-loop на проверках наличия CRD (отсутствуют ephemeralreports.reports.kyverno.io, группа
policies.kyverno.io и т. д.). Удалите все CRD Kyverno, чтобы установился новый корректный
набор:
kubectl get crd -o name | grep -E 'kyverno\.io|wgpolicyk8s\.io' | xargs -r kubectl delete
Заодно удалятся типы CRD, убранные в v1.18 (например, generaterequests, updaterequests).
4. Удалите старое пространство имён
Удалите пространство имён, которое использовала старая версия продукта (или убедитесь, что оно пустое,
прежде чем переиспользовать):
kubectl delete namespace <старое-пространство-имён>
5. Проверьте, что кластер очищен
kubectl get crd | grep -E 'kyverno\.io|wgpolicyk8s\.io' # пусто
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations | grep kyverno # пусто
kubectl get ns <старое-пространство-имён> # NotFound
6. Установите новую версию
Установите новую версию Kyverno.
Затем проверьте установку и заново примените собственные политики из шага 0:
kubectl -n <пространство-имён> get pods # 4 контроллера в состоянии Running: admission/background/cleanup/reports
kubectl get clusterpolicies.kyverno.io # политики PSS, READY=true
При проверке сохранённых собственных политик учтите, что в Kyverno v1.18 поле
spec.validationFailureActionперенесено на уровень правила —
spec.rules[].validate.failureAction(Audit/Enforce).
- Создайте группу узлов для Kyverno.
- Задайте настройки приложения:
- Пространство имен — создайте новое пространство имен (например,
kyverno-space). Если вы оставите пространство имен по умолчанию, Kyverno может работать некорректно. - Название приложения — укажите название приложения.
- Включение Kyverno policies — выберите для автоматической установки расширения kyverno-policies в Kyverno.
- Pod Security Standard profile — выберите профиль Pod Security Standard:
baseline,restrictedилиprivileged. Если поле не заполнено, по умолчанию будет установлено значениеbaseline. - Validation failure action — выберите способ реагирования на срабатывания Kyverno:
audit(режим оповещения) илиenforce(режим блокировки). Если поле не заполнено, по умолчанию будет установлено значениеaudit.
- Пространство имен — создайте новое пространство имен (например,
- Нажмите кнопку Установить.
- Дождитесь перехода приложения в статус
Deployed.
Подробнее о том, как отслеживать срабатывания Kyverno, читайте в инструкции.
Если приложение вам больше не нужно, удалите его. После этого очистите конфигурации веб-хуков приложения, иначе кластер будет работать некорректно.
- Управление конфигурациями среды независимо от конфигураций рабочей нагрузки.
- Сканирование существующих рабочих нагрузок для оптимизации работы кластеров Kubernetes.
- Блокирование или изменение запросов API для оптимизации работы кластеров Kubernetes.
- Проверка, изменение и генерация ресурсов Kubernetes.
- Обеспечение безопасности цепочки поставок образов OCI.
Служба технической поддержки Yandex Cloud отвечает на запросы 24 часа в сутки, 7 дней в неделю. Доступные виды запросов и срок их обработки зависят от тарифного плана. Подключить платную поддержку можно в консоли управления. Подробнее о порядке оказания технической поддержки.
| Helm-чарт | Версия | Pull-команда | Документация |
|---|---|---|---|
| yandex-cloud/kyverno/charts/kyverno | 3.8.1 | Открыть |
| Docker-образ | Версия | Pull-команда |
|---|---|---|
| yandex-cloud/kyverno/kyvernopre1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/kyverno1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/background-controller1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/cleanup-controller1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/reports-controller1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/kyverno-cli1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/readiness-checker1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/readiness-checker1784119283108724882851268354215029534556359918548 | v1.18.1 | |
| yandex-cloud/kyverno/kubectl1784119283108724882851268354215029534556359918548 | v1.31.4 |