В этой статье речь пойдёт о том, как начать работу с Kyverno на платформе контейнеров OpenShift, с помощью которой можно повысить безопасность, легко внедрять передовые технологии и решать другие непростые задачи.
Red Hat® OpenShift — это широко распространённая контейнерная платформа на базе Kubernetes. По мере внедрения OpenShift разработчики часто сталкиваются с необходимостью автоматического обновления или создания конфигурации, а также обеспечения безопасности и внедрения передового подхода.
По сути, они стремятся создать необходимые защитные механизмы, чтобы разработчики могли продолжать использовать OpenShift без воздействия на другие приложения и без допущения уязвимостей в результате неправильной конфигурации. Для этой задачи идеально подходит Kyverno, нативный механизм политик Kubernetes, который часто используется для решения вышеупомянутых проблем. Дальше я расскажу о том, как начать работу с Kyverno на контейнерной платформе OpenShift.
Red Hat® OpenShift
Контейнерная платформа Red Hat® OpenShift — это ведущая в отрасли гибридная облачная платформа на базе контейнеров и Kubernetes. Использование контейнерной платформы OpenShift упрощает и ускоряет разработку, внедрение и управление жизненным циклом гибридного набора приложений, которые могут быть расположены в совершенно любом месте: в стационарной среде, в публичных облаках и в Edge. Контейнерная платформа OpenShift предназначена для обеспечения непрерывных нововведений и скорости в любом масштабе, помогая организациям быть готовыми к сегодняшнему дню и строить планы для завтрашнего.
Kyverno
Kyverno — идеальное решение для автоматизации, управления и обеспечения безопасности любой платформы на базе Kubernetes, включая контейнерную платформу OpenShift. Kyverno работает как динамический контроллер допуска в кластере. Он получает от kube-apiserver HTTP-обратные вызовы вебхуков с проверкой и изменением допусков и применяет соответствующие политики для получения результатов, которые обеспечивают соблюдение политик допуска или отклоняют запросы. Политики Kyverno написаны на родном для Kubernetes языке YAML, что значительно сокращает время обучения, необходимое для написания собственных политик. Политики Kyverno могут сопоставлять ресурсы, используя селекторы типа ресурса, имени и метки, чтобы инициировать такие действия, как проверка, изменение, генерация и верификация образа для подписи контейнеров и сертификации цепочки программного обеспечения.
Перед началом работы
Для того чтобы начать работу, вам потребуется следующее:
- Установленная контейнерная платформа OpenShift версии 4.8 или выше.
- Установленный Helm версии 3.2 (или выше) и настроенный для доступа к вашему кластеру OpenShift.
- Установленный Kubectl и также настроенный для доступа к вашему кластеру OpenShift.
После того как вы подготовили все необходимые компоненты — приступайте к выполнению следующих шагов:
- Установите Kyverno.
- Установите политики Kyverno.
- Просмотрите отчёт о нарушении политик.
Устанавливаем Kyverno
Для установки Kyverno вам понадобятся права администратора кластера. Последние инструкции по установке Kyverno можно найти здесь.
Сначала добавьте репозиторий Kyverno helm и обновите его:
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
Затем установите Kyverno на ваш кластер OpenShift. Обратите внимание, что пространство имён
kyverno
будет создано автоматически:helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace
После установки карты Helm проверьте, запущен ли под Kyverno.
kubectl get pods -n kyverno
Обратите внимание: в зависимости от размера вашего кластера OpenShift, то есть количества ресурсов в кластере, может потребоваться увеличить лимиты памяти и CPU для развёрнутого Kyverno. Также следует увеличить количество реплик до 2, чтобы Kyverno был развёрнут в режиме высокой доступности.На кластерах OpenShift, если вы хотите предотвратить сканирование и проверку ресурсов в системных пространствах имён (те, что начинаются с openshift), можете обновить карту конфигурации Kyverno, включив в неё следующую запись:
webhooks: '[{"namespaceSelector":{"matchExpressions":[{"key":"openshift.io/run-level","operator":"NotIn",
"values": ["0","1"]}]}}]'
Как только Kyverno pod будет запущен, он автоматически создаст необходимые вебхуки допуска. Вы также можете проверить CRD, которые установлены для Kyverno, с помощью этой команды:
kubectl get crds |grep kyverno
Устанавливаем политики Kyverno
Теперь, когда Kyverno установлен, вы можете заняться установкой политик. При первой установке рекомендуется настроить их на работу в режиме «аудита», чтобы ни один из запросов на подключение к кластеру OpenShift не был заблокирован. Вы можете узнать, настроена ли политика на «аудит», просто проверив свойство validationFailureAction в манифесте политики.
Для установки типовых политик используйте команду:
helm install kyverno-policies kyverno/kyverno-policies --namespace kyverno
Далее вы можете убедиться, установились ли политики, с помощью команды:
kubectl get clusterpolicies
Результат вывода команды должен будет выглядеть следующим образом:
NAME BACKGROUND ACTION READY
deny-privilege-escalation true audit true
disallow-add-capabilities true audit true
disallow-host-namespaces true audit true
disallow-host-path true audit true
disallow-host-ports true audit true
disallow-privileged-containers true audit true
disallow-selinux true audit true
require-default-proc-mount true audit true
require-non-root-groups true audit true
require-run-as-non-root true audit true
restrict-apparmor-profiles true audit true
restrict-seccomp true audit true
restrict-sysctls true audit true
restrict-volume-types true audit true
Обратите внимание, что состояние политики READY означает, что она готова обрабатывать любые входящие запросы или выполнять фоновые задачи.
Просматриваем отчёт о нарушении политик
Как только политики будут установлены и готовы, они должны начать генерировать ошибки нарушения политик. Нарушения политик можно просмотреть, получив отчёты о политиках. Чтобы получить отчёты о политиках для всех пространств имён, используйте команду:
kubectl get policyreports -A
Чтобы получить информацию о нарушении политик в масштабе кластера, выполните команду:
kubectl get clusterpolicyreports
Вы также можете просмотреть подробные результаты анализа политик с помощью команды:
kubectl describe
.Устраняем проблемы и неполадки
Под Kyverno постоянно сбоит и крашится
Проверьте, не вызван ли сбой тем, что под не получает достаточно памяти. Увеличьте лимит памяти.
Не применяются политики
Проверьте, правильно ли созданы проверяющий и мутирующий вебхуки:
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations
Вы должны увидеть следующее:
NAME WEBHOOKS AGE
validatingwebhookconfiguration.admissionregistration.k8s.io/kyverno-policy-validating-webhook-cfg 1 46m
validatingwebhookconfiguration.admissionregistration.k8s.io/kyverno-resource-validating-webhook-cfg 1 46m
validatingwebhookconfiguration.admissionregistration.k8s.io/autoscaling.openshift.io 2 17d
validatingwebhookconfiguration.admissionregistration.k8s.io/multus.openshift.io 1 17d
NAME WEBHOOKS AGE
mutatingwebhookconfiguration.admissionregistration.k8s.io/kyverno-policy-mutating-webhook-cfg 1 46m
mutatingwebhookconfiguration.admissionregistration.k8s.io/kyverno-resource-mutating-webhook-cfg 1 46m
mutatingwebhookconfiguration.admissionregistration.k8s.io/kyverno-verify-mutating-webhook-cfg 1 46m
Также проверьте, правильно ли настроена служба Kyverno:
kubectl get services -n kyverno
Вы должны увидеть следующее:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kyverno-svc ClusterIP 172.30.97.254 <none> 443/TCP 13d
kyverno-svc-metrics ClusterIP 172.30.110.252 <none> 8000/TCP 13d
Для устранения прочих неисправностей ознакомьтесь с документацией Kyverno.
Подводим итоги
Как видите, начать использовать Kyverno на кластере OpenShift очень просто. После установки Kyverno и применения политик вы можете сразу начать учиться писать собственные политики для вашего проекта. Инсталляция OpenShift включает в себя несколько настраиваемых определений ресурсов, поэтому в случае, если вам необходимо валидировать какие-либо кастомные ресурсы, можно просто прописать соответствующую политику Kyverno. Вы также можете найти несколько политик, которые созданы сообществом Kyverno, и применить их к своим кластерам.
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.