Рекомендації щодо використання вебхуків допуску

Рекомендації щодо використання вебхуків допуску

Рекомендації щодо проєктування та розгортання вебхуків допуску в Kubernetes.

На цій сторінці наведено рекомендації та міркування щодо проєктування вебхуків допуску в Kubernetes. Ця інформація призначена для операторів кластерів, які запускають сервери вебхуків допуску або сторонні застосунки, що змінюють або перевіряють ваші API-запити.

Перед читанням цієї сторінки переконайтеся, що ви знайомі з такими поняттями:

Важливість якісного проєктування вебхуків

Контроль допуску відбувається, коли до API Kubernetes надсилається будь-який запит на створення, оновлення або видалення. Контролери допуску перехоплюють запити, що відповідають визначеним вами критеріям. Потім ці запити надсилаються до змінювальних або валідаційних вебхуків допуску. Такі вебхуки часто пишуть, щоб переконатися, що певні поля в специфікаціях обʼєктів існують або мають певні дозволені значення.

Вебхуки — це потужний механізм розширення API Kubernetes. Погано спроєктовані вебхуки часто спричиняють порушення роботи робочих навантажень, оскільки вебхуки мають великий контроль над обʼєктами в кластері. Як і інші механізми розширення API, вебхуки складно тестувати у великому масштабі на сумісність з усіма вашими робочими навантаженнями, іншими вебхуками, надбудовами та втулками.

Крім того, з кожним випуском Kubernetes додає або змінює API: зʼявляються нові можливості, можливості переходять на стадію бета чи стабільну, деякі застарівають. Навіть стабільні API Kubernetes можуть змінюватися. Наприклад, API Pod змінився у v1.29, щоб додати можливість sidecar-контейнерів. Хоча обʼєкт Kubernetes рідко стає несправним через новий API Kubernetes, вебхуки, які очікувано працювали з попередніми версіями API, можуть не впоратися з новішими змінами цього API. Це може призвести до неочікуваної поведінки після оновлення кластерів до новіших версій.

На цій сторінці описано поширені сценарії збоїв вебхуків і те, як уникнути їх завдяки обережному та продуманому проєктуванню й реалізації ваших вебхуків.

Перевірте, чи ви використовуєте вебхуки допуску

Навіть якщо ви не запускаєте власні вебхуки допуску, деякі сторонні застосунки, які ви запускаєте у своїх кластерах, можуть використовувати змінювальні або валідаційні вебхуки допуску.

Щоб перевірити, чи є у вашому кластері змінювальні вебхуки допуску, виконайте таку команду:

kubectl get mutatingwebhookconfigurations

У виводі буде перелічено всі змінювальні контролери допуску в кластері.

Щоб перевірити, чи є у вашому кластері валідаційні вебхуки допуску, виконайте таку команду:

kubectl get validatingwebhookconfigurations

У виводі буде перелічено всі валідаційні контролери допуску в кластері.

Вибір механізму контролю допуску

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

Змінювальний і валідаційний контроль допуску в Kubernetes
МеханізмОписСценарії використання
Змінювальний вебхук допускуПерехоплює API-запити перед допуском і за потреби змінює їх за допомогою власної логіки.
  • Виконуйте критичні зміни, які мають відбутися перед допуском ресурсу.
  • Виконуйте складні зміни, які потребують розширеної логіки, наприклад виклику зовнішніх API.
Змінювальна політика допускуПерехоплює API-запити перед допуском і за потреби змінює їх за допомогою виразів Common Expression Language (CEL).
  • Виконуйте критичні зміни, які мають відбутися перед допуском ресурсу.
  • Виконуйте прості зміни, такі як коригування міток або кількості реплік.
Валідаційний вебхук допускуПерехоплює API-запити перед допуском і перевіряє їх на відповідність складним визначенням політик.
  • Перевіряйте критичні конфігурації перед допуском ресурсу.
  • Забезпечуйте дотримання складної логіки політик перед допуском.
Валідаційна політика допускуПерехоплює API-запити перед допуском і перевіряє їх на відповідність виразам CEL.
  • Перевіряйте критичні конфігурації перед допуском ресурсу.
  • Забезпечуйте дотримання логіки політик за допомогою виразів CEL.

Загалом використовуйте контроль допуску на основі вебхуків, коли вам потрібен розширюваний спосіб оголошення або налаштування логіки. Використовуйте вбудований контроль допуску на основі CEL, коли потрібно оголосити простішу логіку без накладних витрат на роботу сервера вебхуків. Проєкт Kubernetes рекомендує за можливості використовувати контроль допуску на основі CEL.

Використовуйте вбудовану перевірку та стандартні значення для CustomResourceDefinitions

Якщо ви використовуєте CustomResourceDefinitions, не використовуйте вебхуки допуску для перевірки значень у специфікаціях CustomResource або для встановлення стандартних значень для полів. Kubernetes дозволяє вам визначати правила перевірки та стандартні значення полів під час створення CustomResourceDefinitions.

Щоб дізнатися більше, дивіться такі ресурси:

Продуктивність та затримка

У цьому розділі описано рекомендації щодо покращення продуктивності та зменшення затримки. Стисло вони такі:

  • Консолідуйте вебхуки та обмежте кількість API-викликів на вебхук.
  • Використовуйте логи аудиту, щоб виявляти вебхуки, які повторюють одну й ту саму дію.
  • Використовуйте балансування навантаження для забезпечення доступності вебхука.
  • Встановіть невелике значення тайм-ауту для кожного вебхука.
  • Враховуйте потреби в доступності кластера під час проєктування вебхуків.

Проєктування вебхуків допуску для низької затримки

Змінювальні вебхуки допуску викликаються послідовно. Залежно від налаштування змінювальних вебхуків деякі з них можуть викликатися кілька разів. Кожен виклик змінювального вебхука додає затримку до процесу допуску. На відміну від них, валідаційні вебхуки викликаються паралельно.

Під час проєктування змінювальних вебхуків враховуйте ваші вимоги до затримки та її допустимий рівень. Чим більше змінювальних вебхуків у вашому кластері, тим більша ймовірність зростання затримки.

Щоб зменшити затримку, зверніть увагу на таке:

  • Консолідуйте вебхуки, які виконують подібні зміни різних обʼєктів.
  • Зменшіть кількість API-викликів, зроблених у логіці сервера змінювальних вебхуків.
  • Обмежте умови зіставлення кожного змінювального вебхука, щоб зменшити кількість вебхуків, які спрацьовують на конкретний API-запит.
  • Консолідуйте невеликі вебхуки в один сервер і конфігурацію для полегшення впорядкування та організації.

Запобігання циклам, викликаним конкуруючими контролерами

Враховуйте будь-які інші компоненти у вашому кластері, які можуть конфліктувати зі змінами, що їх вносить ваш вебхук. Наприклад, якщо ваш вебхук додає мітку, яку видаляє інший контролер, ваш вебхук викликається знову. Це призводить до циклу.

Щоб виявити такі цикли, спробуйте таке:

  1. Оновіть політику аудиту вашого кластера, щоб записувати події аудиту. Використовуйте такі параметри:

    • level: RequestResponse
    • verbs: ["patch"]
    • omitStages: RequestReceived

    Налаштуйте правило аудиту так, щоб створювати події для конкретних ресурсів, які змінює ваш вебхук.

  2. Перевірте події аудиту: чи вебхуки повторно викликаються кілька разів із застосуванням того самого патча до того самого обʼєкта, чи поле обʼєкта кілька разів оновлюється й повертається назад.

Встановіть невелике значення тайм-ауту

Вебхуки допуску мають виконуватися якомога швидше (зазвичай за мілісекунди), оскільки вони збільшують затримку API-запитів. Використовуйте для вебхуків невеликий тайм-аут.

Докладніше дивіться в розділі Тайм-аути.

Використовуйте балансувальник навантаження для забезпечення доступності вебхука

Вебхуки допуску мають використовувати певну форму балансування навантаження для високої доступності та кращої продуктивності. Якщо вебхук працює всередині кластера, ви можете запустити кілька бекендів вебхука за Service типу ClusterIP.

Використовуйте модель розгортання з високою доступністю

Під час проєктування вебхука враховуйте вимоги до доступності вашого кластера. Наприклад, під час простою вузлів або збоїв у зонах Kubernetes позначає Podʼи як NotReady, щоб балансувальники навантаження могли перенаправити трафік до доступних зон і вузлів. Ці оновлення Podʼів можуть викликати ваші змінювальні вебхуки. Залежно від кількості задіяних Podʼів сервер змінювального вебхука може перевищити тайм-аут або спричинити затримки в обробці Podʼів. Унаслідок цього трафік не буде перенаправлено так швидко, як потрібно.

Враховуйте ситуації, подібні до наведеного прикладу, під час створення ваших вебхуків. Виключайте операції, які є результатом реакції Kubernetes на неминучі інциденти.

Фільтрація запитів

У цьому розділі наведено рекомендації щодо фільтрації запитів, які викликають конкретні вебхуки. Стисло вони такі:

  • Обмежте область дії вебхука, щоб уникати системних компонентів і запитів тільки для читання.
  • Обмежте вебхуки конкретними просторами імен.
  • Використовуйте умови зіставлення для точної фільтрації запитів.
  • Зіставляйте всі версії обʼєкта.

Обмежте область дії кожного вебхука

Вебхуки допуску викликаються лише тоді, коли API-запит відповідає конфігурації вебхука. Обмежте область дії кожного вебхука, щоб зменшити кількість непотрібних викликів до сервера вебхука. Зверніть увагу на такі обмеження області дії:

  • Уникайте зіставлення обʼєктів у просторі імен kube-system. Якщо ви запускаєте власні Podʼи в просторі імен kube-system, використовуйте objectSelector, щоб не змінити критичне робоче навантаження.
  • Не змінюйте Lease вузлів, які існують як обʼєкти Lease у системному просторі імен kube-node-lease. Зміна Lease вузлів може призвести до невдалих оновлень вузлів. Застосовуйте валідаційний контроль до обʼєктів Lease у цьому просторі імен, лише якщо ви впевнені, що він не поставить ваш кластер під загрозу.
  • Не зіставляйте TokenReview, SubjectAccessReview та інші віртуальні ресурси автентифікації та авторизації. Це завжди запити лише для читання, і їх перехоплення може порушити роботу вашого кластера. Починаючи з Kubernetes v1.37, вебхуки допуску стандартно не викликаються для цих ресурсів.
  • Обмежте кожен вебхук конкретним простором імен за допомогою namespaceSelector.

Фільтруйте конкретні запити за допомогою умов зіставлення

Контролери допуску підтримують кілька полів, за допомогою яких можна зіставляти запити, що відповідають певним критеріям. Наприклад, ви можете використовувати namespaceSelector, щоб відбирати запити, спрямовані на конкретний простір імен.

Для точнішої фільтрації запитів використовуйте поле matchConditions у конфігурації вебхука. Це поле дозволяє написати кілька виразів CEL, які мають повертати true, щоб запит викликав ваш вебхук допуску. Використання matchConditions може значно зменшити кількість викликів до вашого сервера вебхука.

Докладніше дивіться в розділі Зіставлення запитів: matchConditions.

Зіставляйте всі версії API

Стандартно вебхуки допуску працюють для будь-яких версій API, які стосуються вказаного ресурсу. Цією поведінкою керує поле matchPolicy у конфігурації вебхука. Вкажіть значення Equivalent у полі matchPolicy або пропустіть це поле, щоб вебхук працював для будь-якої версії API.

Докладніше дивіться в розділі Зіставлення запитів: matchPolicy.

Область дії змін і особливості полів

У цьому розділі наведено рекомендації щодо області дії змін та особливостей полів обʼєктів. Стисло вони такі:

  • Застосовуйте патчі лише до тих полів, які цього потребують.
  • Не перезаписуйте значення масивів.
  • Уникайте побічних ефектів у змінах, коли це можливо.
  • Уникайте самозмін.
  • Дозволяйте запити в разі збою (fail open) і перевіряйте кінцевий стан.
  • Плануйте майбутні оновлення полів у наступних версіях.
  • Запобігайте самовиклику вебхуків.
  • Не змінюйте незмінні обʼєкти.

Застосовуйте патчі лише до потрібних полів

Сервери вебхуків допуску надсилають HTTP-відповіді, які вказують, що робити з конкретним запитом до API Kubernetes. Така відповідь є обʼєктом AdmissionReview. Змінювальний вебхук може додати конкретні поля для зміни перед дозволом допуску за допомогою полів patchType та patch у відповіді. Переконайтеся, що ви змінюєте лише ті поля, які потребують змін.

Наприклад, розгляньмо змінювальний вебхук, налаштований так, щоб Deployments web-server мали щонайменше три репліки. Коли запит на створення обʼєкта Deployment відповідає конфігурації вашого вебхука, вебхук має оновити лише значення поля spec.replicas.

Не перезаписуйте значення масивів

Поля у специфікаціях обʼєктів Kubernetes можуть містити масиви. Деякі масиви містять пари ключ:значення (наприклад, поле envVar у специфікації контейнера), тоді як інші масиви не мають ключів (наприклад, поле readinessGates у специфікації Pod). Порядок значень у полі масиву може бути важливим в деяких ситуаціях. Наприклад, порядок аргументів у полі args специфікації контейнера може впливати на контейнер.

Під час зміни масивів враховуйте таке:

  • За можливості використовуйте операцію JSONPatch add замість replace, щоб випадково не замінити потрібне значення.
  • Ставтеся до масивів, які не використовують пари ключ:значення, як до множин.
  • Переконайтеся, що значення в полі, яке ви змінюєте, не обовʼязково мають бути в певному порядку.
  • Не перезаписуйте наявні пари ключ:значення без крайньої потреби.
  • Будьте обережні під час зміни полів міток. Випадкова зміна може призвести до порушення селекторів міток, що призведе до непередбачуваної поведінки.

Уникайте побічних ефектів

Переконайтеся, що ваші вебхуки працюють лише з вмістом надісланого їм AdmissionReview і не вносять сторонніх змін. Такі додаткові зміни, які називають побічними ефектами, можуть спричинити конфлікти під час допуску, якщо їх належним чином не узгодити. Якщо вебхук не має побічних ефектів, поле .webhooks[].sideEffects слід встановити в None.

Якщо побічні ефекти потрібні під час оцінювання допуску, їх слід придушувати під час обробки обʼєкта AdmissionReview, у якому dryRun має значення true, а поле .webhooks[].sideEffects слід встановити в NoneOnDryRun.

Докладніше дивіться в розділі Побічні ефекти.

Уникайте самозмін

Вебхук, що працює всередині кластера, може спричинити взаємоблокування власного розгортання, якщо його налаштовано перехоплювати ресурси, потрібні для запуску його власних Podʼів.

Наприклад, змінювальний вебхук допуску налаштовано так, щоб допускати запити create для Pod, лише якщо в Pod встановлено певну мітку (наприклад, env: prod). Сервер вебхука працює в Deployment, який не встановлює мітку env.

Коли вузол, на якому працюють Podʼи сервера вебхука, стає несправним, Deployment вебхука намагається перепланувати Podʼи на інший вузол. Однак наявний сервер вебхука відхиляє запити, оскільки мітку env не встановлено. Унаслідок цього міграція не може відбутися.

Виключіть простір імен, де працює ваш вебхук, за допомогою namespaceSelector.

Уникайте циклічних залежностей

Цикли залежностей можуть виникати у таких сценаріях:

  • Два вебхуки перевіряють Podʼи один одного. Якщо обидва вебхуки стають недоступними одночасно, жоден з них не може запуститися.
  • Ваш вебхук перехоплює компоненти надбудов кластера, такі як мережеві втулки або втулки сховища, від яких він залежить. Якщо і вебхук, і залежна надбудова стають недоступними, жоден із компонентів не може працювати.

Щоб уникнути таких циклів залежностей, спробуйте таке:

Дозволяйте запити в разі збою (fail open) і перевіряйте кінцевий стан

Змінювальні вебхуки допуску підтримують поле конфігурації failurePolicy. Це поле вказує, чи повинен API-сервер допустити або відхилити запит у разі збою вебхука. Збої вебхука можуть статися через тайм-аути або помилки у логіці сервера.

Стандартно вебхуки допуску встановлюють поле failurePolicy у Fail. API-сервер відхиляє запит, якщо вебхук зазнає збою. Однак таке стандартне відхилення може призвести до відхилення запитів, що відповідають вимогам, під час простою вебхука.

Дозвольте вашим змінювальним вебхукам «fail open», встановивши поле failurePolicy в Ignore. Використовуйте валідаційний контролер, щоб перевіряти стан запитів і переконуватися, що вони відповідають вашим політикам.

Цей підхід має такі переваги:

  • Простій змінювальних вебхуків не заважає розгортанню ресурсів, що відповідають вимогам.
  • Застосування політик відбувається під час валідаційного контролю допуску.
  • Змінювальні вебхуки не заважають іншим контролерам в кластері.

Плануйте майбутні оновлення полів

Загалом проєктуйте свої вебхуки з припущенням, що API Kubernetes можуть змінитися в наступній версії. Не пишіть сервер, який вважає стабільність API чимось гарантованим. Наприклад, випуск sidecar-контейнерів у Kubernetes додав поле restartPolicy до API Pod.

Запобігайте самовиклику вашого вебхука

Змінювальні вебхуки, які реагують на широкий спектр API-запитів, можуть ненавмисно викликати самі себе. Наприклад, розгляньмо вебхук, який реагує на всі запити в кластері. Якщо налаштувати вебхук на створення обʼєктів Event для кожної зміни, він реагуватиме на власні запити на створення обʼєктів Event.

Щоб уникнути цього, встановлюйте унікальну мітку на всі ресурси, які створює ваш вебхук. Виключіть цю мітку з умов зіставлення вашого вебхука.

Не змінюйте незмінні обʼєкти

Деякі обʼєкти Kubernetes в API-сервері не можуть змінюватися. Наприклад, коли ви розгортаєте статичний Pod, kubelet на вузлі створює в API-сервері дзеркальний Pod для відстеження статичного Podʼа. Однак зміни дзеркального Podʼа не поширюються на статичний Pod.

Не намагайтеся змінювати ці обʼєкти під час допуску. Усі дзеркальні Podʼи мають анотацію kubernetes.io/config.mirror. Щоб виключити дзеркальні Podʼи й водночас зменшити ризик безпеки від ігнорування анотації, дозволяйте статичним Podʼам працювати лише в конкретних просторах імен.

Порядок виклику змінювальних вебхуків та ідемпотентність

У цьому розділі наведено рекомендації щодо порядку виклику вебхуків і проєктування ідемпотентних вебхуків. Стисло вони такі:

  • Не покладайтеся на конкретний порядок виконання.
  • Перевіряйте зміни перед допуском.
  • Перевіряйте, чи зміни не перезаписуються іншими контролерами.
  • Переконайтеся, що набір змінювальних вебхуків є ідемпотентним, а не тільки окремі вебхуки.

Не покладайтеся на порядок виклику змінювальних вебхуків

Змінювальні вебхуки допуску не виконуються в стабільному порядку. Момент виклику конкретного вебхука може залежати від різних чинників. Не покладайтеся на те, що ваш вебхук виконається в певний момент процесу допуску. Інші вебхуки все ще можуть змінити ваш змінений обʼєкт.

Наведені нижче рекомендації можуть допомогти мінімізувати ризик ненавмисних змін:

Переконайтеся, що змінювальні вебхуки у вашому кластері є ідемпотентними

Кожен змінювальний вебхук допуску має бути ідемпотентним. Вебхук має бути здатним працювати з обʼєктом, який він уже змінив, не вносячи додаткових змін, окрім початкової.

Крім того, усі змінювальні вебхуки у вашому кластері мають бути ідемпотентними як сукупність. Після завершення фази змін контролю допуску кожен окремий змінювальний вебхук має бути здатним працювати з обʼєктом, не вносячи до нього додаткових змін.

Залежно від вашого середовища забезпечити ідемпотентність у великому масштабі може бути складно. Можуть допомогти такі рекомендації:

  • Використовуйте валідаційні контролери допуску, щоб перевіряти кінцевий стан критичних робочих навантажень.
  • Тестуйте свої розгортання в тестовому кластері, щоб побачити, чи не змінює той самий вебхук певні обʼєкти кілька разів.
  • Переконайтеся, що область дії кожного змінювального вебхука є конкретною та обмеженою.

У наведених нижче прикладах показано ідемпотентну логіку змін:

  1. Для запиту create Pod встановіть поле .spec.securityContext.runAsNonRoot Pod у true.

  2. Для запиту create Pod, якщо поле .spec.containers[].resources.limits контейнера не встановлено, встановіть стандартні обмеження ресурсів.

  3. Для запиту create Pod додайте sidecar-контейнер із назвою foo-sidecar, якщо контейнера з назвою foo-sidecar ще немає.

У цих випадках вебхук можна безпечно викликати повторно, і він може допустити обʼєкт, у якому ці поля вже встановлено.

У наведених нижче прикладах показано неідемпотентну логіку змін:

  1. Для запиту create Pod додайте sidecar-контейнер із назвою foo-sidecar і суфіксом із поточною позначкою часу (наприклад, foo-sidecar-19700101-000000).

    Повторний виклик вебхука може призвести до того, що той самий sidecar буде додано до Podʼа кілька разів, щоразу з іншою назвою контейнера. Так само вебхук може додати дубльовані контейнери, якщо sidecar уже є в Podʼі, наданому користувачем.

  2. Для запиту create/update Pod відхиліть запит, якщо Pod має мітку env, інакше додайте до Pod мітку env: prod.

    Повторний виклик вебхука призведе до того, що вебхук завершиться збоєм на власному результаті.

  3. Для запиту create Pod додайте sidecar-контейнер із назвою foo-sidecar без перевірки, чи існує контейнер foo-sidecar.

    Повторний виклик вебхука призведе до дублювання контейнерів у Pod, через що запит стане недійсним і API-сервер його відхилить.

Тестування та перевірка змін

У цьому розділі наведено рекомендації щодо тестування змінювальних вебхуків і перевірки змінених обʼєктів. Стисло вони такі:

  • Тестуйте вебхуки в тестових середовищах.
  • Уникайте змін, які порушують перевірки.
  • Тестуйте оновлення мінорних версій на предмет регресій та конфліктів.
  • Перевіряйте змінені обʼєкти перед допуском.

Тестуйте вебхуки у тестових середовищах

Ретельне тестування має бути основною частиною вашого циклу випуску нових або оновлених вебхуків. За можливості тестуйте будь-які зміни вебхуків кластера в тестовому середовищі, яке максимально нагадує ваші промислові кластери. Принаймні використовуйте інструмент на кшталт minikube або kind, щоб створити невеликий тестовий кластер для змін вебхуків.

Переконайтеся, що зміни не порушують перевірки

Ваші змінювальні вебхуки не повинні порушувати жодні перевірки, що застосовуються до обʼєкта перед допуском. Наприклад, розгляньмо змінювальний вебхук, який встановлює стандартний запит CPU Podʼа на певне значення. Якщо обмеження CPU цього Podʼа нижче за змінений запит, Pod не пройде допуск.

Тестуйте кожен змінювальний вебхук на відповідність перевіркам, що працюють у вашому кластері.

Тестуйте оновлення мінорних версій для забезпечення послідовної поведінки

Перед оновленням промислових кластерів до нової мінорної версії протестуйте свої вебхуки та робочі навантаження в тестовому середовищі. Порівняйте результати, щоб переконатися, що ваші вебхуки й далі працюють очікувано після оновлення.

Крім того, використовуйте такі ресурси, щоб стежити за змінами API:

Перевіряйте зміни перед допуском

Змінювальні вебхуки виконуються до завершення перед запуском будь-яких валідаційних вебхуків. Стабільного порядку застосування змін до обʼєктів немає. Унаслідок цього ваші зміни може перезаписати змінювальний вебхук, який виконується пізніше.

Додайте до свого кластера валідаційний контролер допуску, такий як ValidatingAdmissionWebhook або ValidatingAdmissionPolicy, щоб переконатися, що ваші зміни збереглися. Наприклад, розгляньмо змінювальний вебхук, який додає поле restartPolicy: Always до певних init-контейнерів, щоб вони працювали як sidecar-контейнери. Ви можете запустити валідаційний вебхук, щоб переконатися, що ці init-контейнери зберегли конфігурацію restartPolicy: Always після завершення всіх змін.

Докладніше дивіться в таких ресурсах:

Розгортання змінювального вебхука

У цьому розділі наведено рекомендації щодо розгортання змінювальних вебхуків допуску. Стисло вони такі:

  • Поступово розгортайте конфігурацію вебхука й відстежуйте проблеми за просторами імен.
  • Обмежте доступ до редагування ресурсів конфігурації вебхука.
  • Обмежте доступ до простору імен, де працює сервер вебхука, якщо сервер розташований у кластері.

Встановлення та увімкнення змінювального вебхука

Коли ви будете готові розгорнути змінювальний вебхук у кластері, виконайте дії в такому порядку:

  1. Встановіть сервер вебхука та запустіть його.
  2. Встановіть поле failurePolicy у маніфесті MutatingWebhookConfiguration в Ignore. Це допоможе уникнути порушень через неправильно налаштовані вебхуки.
  3. Встановіть поле namespaceSelector у маніфесті MutatingWebhookConfiguration на тестовий простір імен.
  4. Розгорніть MutatingWebhookConfiguration у вашому кластері.

Стежте за вебхуком у тестовому просторі імен, щоб виявити проблеми, а потім розгорніть вебхук в інших просторах імен. Якщо вебхук перехоплює API-запит, який не мав перехоплювати, призупиніть розгортання та скоригуйте область дії конфігурації вебхука.

Обмежте доступ до редагування змінювальних вебхуків

Змінювальні вебхуки — це потужні контролери Kubernetes. Використовуйте RBAC або інший механізм авторизації, щоб обмежити доступ до конфігурацій і серверів ваших вебхуків. Для RBAC переконайтеся, що такий доступ мають лише довірені субʼєкти:

  • Дієслова: create, update, patch, delete, deletecollection
  • Група API: admissionregistration.k8s.io/v1
  • Вид API: MutatingWebhookConfigurations

Якщо сервер вашого змінювального вебхука працює у кластері, обмежте доступ до створення або зміни будь-яких ресурсів у цьому просторі імен.

Приклади якісних реалізацій

Примітка: Цей розділ містить посилання на проєкти сторонніх розробників, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Проєкти вказано в алфавітному порядку. Щоб додати проєкт до цього списку, ознайомтеся з посібником з контенту перед надсиланням змін. Докладніше.

Наведені нижче проєкти є прикладами «якісних» реалізацій власних серверів вебхуків. Ви можете використовувати їх як відправну точку під час проєктування власних вебхуків. Не використовуйте ці приклади як є; беріть їх за відправну точку й проєктуйте свої вебхуки так, щоб вони добре працювали у вашому конкретному середовищі.

Що далі

Елементи на цій сторінці відносяться до сторонніх продуктів чи проєктів, які надають функціонал, необхідний для Kubernetes. Автори проєкту Kubernetes не несуть відповідальності за ці проєкти. Ознайомтесь з настановами на вебсайті CNCF для отримання докладної інформації.

Ознайомтесь з посібником з контенту перед тим, як пропонувати додавання посилання на стороні компоненти.