Автоматизована безпека кластерів K8S за допомогою Kyverno

pic

Кожна організація працює за певними правилами та політиками для забезпечення відповідності та ефективного управління ресурсами. У середовищах Kubernetes (K8s) управління є ключовим для підтримки порядку та оптимізації використання ресурсів. Без належного управління, керувати Admission Controller безпосередньо може стати складно, особливо коли вони вимагають власних реалізацій на мові Go.

Admission controllers у Kubernetes відповідають за перевірку та зміну запитів до кластера. Наприклад, кожен деплоймент повинен містити запити та ліміти ресурсів, щоб уникнути перевантаження ресурсів. Без цих контролів один pod може споживати до 50% виділених ресурсів, що призведе до неефективності. Встановлення управління гарантує, що кожен pod, створений у кластері, вказує запити та ліміти ресурсів.

Написання власних Admission controllers з нуля може бути складним та часозатратним. Це зазвичай лягає на плечі DevOps інженерів, які повинні забезпечити управління у всьому кластері Kubernetes. На щастя, інструменти, такі як Kyverno, спрощують цей процес, надаючи декларативне та зручне рішення для управління Kubernetes.

Kyverno — потужний, динамічний Admission controller, який спрощує управління Kubernetes. Він дозволяє вам реалізувати Policy-as-Code (PaC) у Kubernetes та інших хмарних середовищах без необхідності вивчати нову мову програмування. Політики Kyverno визначаються як декларативні ресурси YAML, що робить їх зручними для використання та керування через знайомі інструменти, такі як kubectl, git та kustomize.

Основні можливості Kyverno

  • Управління політиками: Перевірка, зміна, генерація та очищення ресурсів Kubernetes, включаючи користувацькі ресурси.
  • Безпека ланцюга постачання: Перевірка підписів OCI контейнерних зображень та артефактів.
  • Повний звіт: Генерація звітів за політиками та обробка виключень як ресурси API Kubernetes.
  • Інтеграція з CI/CD пайплайнами: Використання Kyverno CLI для тестування політик поза кластером у робочих процесах Infrastructure-as-Code (IaC).
  • Графічний інтерфейс: Kyverno Policy Reporter надає веб-інтерфейс для керування звітами.
  • Використання поза Kubernetes: Застосування політик Kyverno до будь-якого JSON payload за допомогою Kyverno JSON.
  • Тестування від кінця до кінця: Kyverno Chainsaw сприяє декларативному тестуванню політик.

Kyverno працює як динамічний Admission controller, використовуючи налаштування webhook. Його функціональність розділена на два основні компоненти: політики та правила. Політики визначають бажаний стан або критерії відповідності, в той час як правила вказують на дії, що застосовуються для виконання цих політик. Така структура дозволяє Kyverno безперешкодно управляти управлінням у кластерах Kubernetes.

Кроки

Використовуйте eksctl для створення EKS кластеру.

pic

Далі, клонуйте мій репозиторій https://github.com/sanju2/kyverno-cluster-security

Встановіть Kyverno.

kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.8.5/install.yaml

pic

Застосуйте політику Kyverno.

kubectl apply -f require-pod-requests-limits.yaml

pic

pic

Перегляньте журнали pod Kyverno, щоб перевірити нещодавно застосовані політики та стан Kyverno.

kubectl logs {{podname}} -n kyverno

Спробуйте розгорнути Nginx без вказівки запитів і лімітів пам'яті. Ви побачите, що деплоймент заблоковано з повідомленням.

kubectl create deploy nginx --image=nginx

pic

У файлі require-pod-requests-limits.yaml дія встановлена на audit.
Це блокує деплоймент Nginx, оскільки згідно з нашим правилом Kyverno, деплойменти повинні вказувати запити та ліміти пам'яті.

Далі ми можемо змінити дію на enforce. Це означає, що деплоймент не буде заблоковано, але в журналах pod Kyverno з'явиться помилка.

pic

pic

pic

Нарешті, видалимо політику Kyverno і спробуємо застосувати деплоймент Nginx знову.

kubectl delete clusterpolicy require-requests-limits

Після перевірки журналів Kyverno ви побачите, що політика кластеру була видалена.

pic

Тепер застосуйте деплоймент Nginx. Він буде створений без проблем.

pic

Kyverno можна автоматизувати за допомогою таких інструментів, як Argo CD, що спрощує деплоймент та управління політиками Kyverno. Ця інтеграція ще більше покращує робочі процеси DevOps, забезпечуючи постійне та автоматизоване виконання політик у ваших середовищах Kubernetes.

Використовуючи Kyverno, організації можуть спростити управління Kubernetes, покращити управління ресурсами та зміцнити безпеку, зменшуючи складність ручного керування Admission Controllers.

Додаткові політики Kyverno https://github.com/kyverno/policies/tree/main/best-practices

Дякую за прочитану статтю.

Зв'язатися зі мною
LinkedIn https://www.linkedin.com/in/lasanthasilva
Twitter https://twitter.com/LasanthaSilva96

Перекладено з: Automated K8S Cluster Security using Kyverno

Leave a Reply

Your email address will not be published. Required fields are marked *