Це багатосторінковий друкований вигляд цього розділу. Натисність щоб друкувати.
Розширені ресурси
1 - CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition представляє ресурс, який повинен бути експонований на сервері API. Його імʼя повинно бути у форматі <.spec.name>.<.spec.group>.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata (ObjectMeta)
Стандартні метадані обʼєкта. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (CustomResourceDefinitionSpec), обовʼязково
spec описує, як користувач хоче, щоб ресурси виглядали.
status (CustomResourceDefinitionStatus)
status показує фактичний стан CustomResourceDefinition.
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec визначає, як користувач хоче, щоб їхні ресурси виглядали
group (string), обовʼязково
group — це API-група визначеного власного ресурсу. Власні ресурси обслуговуються як
/apis/<group>/...
. Повинно відповідати імені CustomResourceDefinition у форматі<names.plural>.<group>
.names (CustomResourceDefinitionNames), обовʼязково
names вказують імена ресурсу та виду для власного ресурсу.
CustomResourceDefinitionNames вказує імена для обслуговування цього CustomResourceDefinition
names.kind (string), обовʼязково
kind — серіалізована версія виду ресурсу. Зазвичай CamelCase та однина. Екземпляри власного ресурсу використовуватимуть це значення як атрибут
kind
у викликах API.names.plural (string), обовʼязково
plural — імʼя ресурсу в множині для обслуговування. Власні ресурси обслуговуються як
/apis/<group>/<version>/.../<plural>
. Повинно відповідати імені CustomResourceDefinition у форматі<names.plural>.<group>
. Всі літери мають бути у нижньому регістрі.names.categories ([]string)
Atomic: буде замінено під час злиття
categories — це список згрупованих ресурсів, до яких належить цей власний ресурс (наприклад, 'all'). Публікується в документах відкриття API та використовується клієнтами для підтримки викликів типу
kubectl get all
.names.listKind (string)
listKind — серіалізована версія списку для цього ресурсу. Стандартне значення "
kind
List".names.shortNames ([]string)
Atomic: буде замінено під час злиття
shortNames — короткі імена ресурсу, відображені в документах відкриття API та використовувані клієнтами для підтримки викликів типу
kubectl get <shortname>
. Всі літери мають бути у нижньому регістрі.names.singular (string)
singular — назва ресурсу в однині. Всі літери мають бути у нижньому регістрі. Стандартно, це значення є приведеним до нижнього регістру
kind
.
scope (string), обовʼязково
scope вказує, чи має визначений власний ресурс область застосування, спільну для кластера або простору імен. Допустимі значення:
Cluster
іNamespaced
.versions ([]CustomResourceDefinitionVersion), обовʼязково
Atomic: буде замінено під час злиття
versions — це список всіх API-версій визначеного власного ресурсу. Назви версій використовуються для визначення порядку в зазначених API-версіях. Якщо рядок версії є "kube-like", він буде вище не "kube-like" рядків версій, що упорядковуються лексикографічно. "Kube-like" версії починаються з "v", за яким слідує номер (головна версія), а потім необовʼязково рядок "alpha" або "beta" та інший номер (додаткова версія). Ці версії сортуються так: GA > beta > alpha (де GA - версія без суфікса, такого як beta або alpha), а потім порівнюються головна версія, а потім додаткова версія. Приклад відсортованого списку версій: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.
CustomResourceDefinitionVersion описує версію для CRD.
versions.name (string), обовʼязково
name — це імʼя версії, наприклад "v1", "v2beta1" і т.д. Власні ресурси обслуговуються під цією версією за адресою
/apis/<group>/<version>/...
, якщоserved
встановлено в true.versions.served (boolean), обовʼязково
served — це прапорець, що дозволяє включити/відключити цю версію для обслуговування через REST API.
versions.storage (boolean), обовʼязково
storage — вказує, що цю версію слід використовувати при збереженні власних ресурсів у сховищі. Повинна бути рівно одна версія з параметром
storage=true
.versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
Atomic: буде замінено під час злиття
additionalPrinterColumns визначає додаткові стовпці, що повертаються в таблицях. Див. https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables для деталей. Якщо стовпці не вказані, використовується один стовпець, що відображає вік власного ресурсу.
CustomResourceColumnDefinition вказує стовпець для друку на стороні сервера.
versions.additionalPrinterColumns.jsonPath (string), обовʼязково
jsonPath — простий шлях JSON (тобто з нотацією масиву), який оцінюється для кожного власного ресурсу для створення значення цього стовпця.
versions.additionalPrinterColumns.name (string), обовʼязково
name — імʼя для стовпця зрозуміле людині.
versions.additionalPrinterColumns.type (string), обовʼязково
type — визначення типу OpenAPI для цього стовпця. Див. https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types для деталей.
versions.additionalPrinterColumns.description (string)
description — опис цього стовпця зрозумілий людині.
versions.additionalPrinterColumns.format (string)
format - є необовʼязковим визначенням типу OpenAPI для цього стовпця. Формат 'name' застосовується до стовпця первинного ідентифікатора, щоб допомогти клієнтам ідентифікувати стовпець — це імʼя ресурсу. Дивіться https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types для більш детальної інформації.
versions.additionalPrinterColumns.priority (int32)
priority — ціле число, що визначає відносну важливість цього стовпчика порівняно з іншими. Менші числа вважаються більш пріоритетними. Стовпці, які можуть бути пропущені в сценаріях з обмеженим простором, повинні мати пріоритет, більший за 0.
versions.deprecated (boolean)
deprecated вказує, що ця версія API для власних ресурсів застаріла. Якщо встановлено значення true, запити API до цієї версії отримають заголовок попередження у відповіді сервера. Стандартне значення — false.
versions.deprecationWarning (string)
deprecationWarning перевизначає стандартне попередження, що повертається клієнтам API. Може бути встановлене лише тоді, коли
deprecated
встановлено в true. Стандартне попередження вказує на те, що ця версія застаріла і рекомендує використовувати останню доступну версію з рівною або більшою стабільністю, якщо така існує.versions.schema (CustomResourceValidation)
schema описує схему, яка використовується для валідації, обрізання та встановлення стандартних значень для цієї версії власного ресурсу.
CustomResourceValidation є переліком методів валідації для CustomResource.
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema визначає схему OpenAPI v3 для валідації та обрізання власного ресурсу.
versions.selectableFields ([]SelectableField)
Atomic: буде замінено під час злиття
selectableFields
визначає шляхи до полів, які можуть бути використані як селектори полів. Дозволяється використовувати максимум 8 вибіркових полів. https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectorsSelectableField вказує шлях JSON до поля, яке може бути використане з селекторами полів.
versions.selectableFields.jsonPath (string), required
jsonPath
— це простий шлях JSON, який оцінюється для кожного власного ресурсу, щоб отримати значення селектора поля. Дозволяються лише JSON-шляхи без нотації масивів. Повинен вказувати на поле типу string, boolean або integer. Дозволяються типи з enum-значеннями та рядки з форматами. ЯкщоjsonPath
посилається на відсутнє поле в ресурсі, він оцінюється як порожній рядок. Не повинен вказувати на поля метаданих. Обовʼязкове поле.
versions.subresources (CustomResourceSubresources)
subresources вказують, які додаткові ресурси цієї версії визначеного власного ресурсу доступні.
CustomResourceSubresources вказує, як оброляти мастшатабування субресурсів для CustomResource.
versions.subresources.scale.specReplicasPath (string), обовʼязково
specReplicasPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
spec.replicas
. Допускаються тільки JSON-шляхи без нотації масиву. Повинен бути JSON-шлях у форматі.spec
. Якщо у власному ресурсі немає значення за вказаним шляхом, субресурс/scale
поверне помилку при виконанні GET.versions.subresources.scale.statusReplicasPath (string), обовʼязково
statusReplicasPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
status.replicas
. Допускаються лише JSON-шляхи без нотації масиву. Повинен бути JSON-шлях під.status
. Якщо у власному ресурсі немає значення за вказаним шляхом, значенняstatus.replicas
у субресурсі/scale
буде стандартно дорівнювати 0.versions.subresources.scale.labelSelectorPath (string)
labelSelectorPath визначає шлях JSON всередині власного ресурсу, який відповідає Scale
status.selector
. Допускаються лише JSON-шляхи без нотації масиву. Повинен бути JSON-шлях під.status
або.spec
. Має бути налаштований на роботу з HorizontalPodAutoscaler. Поле, на яке вказує цей JSON-шлях, має бути рядковим полем (не складною структурою селектора), яке містить серіалізований селектор міток у рядковій формі. Детальніше: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource Якщо у власному ресурсі немає значення за вказаним шляхом, значенняstatus.selector
у субресурсі/scale
буде стандартно дорівнювати порожньому рядку.versions.subresources.status (CustomResourceSubresourceStatus)
status вказує, що власний ресурс має обслуговувати субресурс
/status
. Коли ввімкнено:- запити до первинної точки доступу власного ресурсу ігнорують зміни в розділі
status
обʼєкта. - Запити до субресурсу
/status
власного ресурсу ігнорують зміни будь-чого, окрім строфиstatus
обʼєкта.
CustomResourceSubresourceStatus визначає, як обслуговувати субресурс статусу для власних ресурсів. Статус представляється JSON-шляхом
.status
всередині власного ресурсу. Якщо встановлено,- відкриває субресурс /status для власного ресурсу
- PUT-запити до субресурсу /status отримують обʼєкт власного ресурсу та ігнорують зміни у всьому, окрім рядка статусу
- PUT/POST/PATCH запити до власного ресурсу ігнорують зміни у рядку стану
- запити до первинної точки доступу власного ресурсу ігнорують зміни в розділі
conversion (CustomResourceConversion)
conversion визначає налаштування конвертації для CRD.
CustomResourceConversion описує, як конвертувати різні версії CR.
conversion.strategy (string), обовʼязково
strategy визначає, як налаштовуються власні ресурси між версіями. Допустимі значення:
"None"
: Конвертер змінює тільки apiVersion і не торкається інших полів у власному ресурсі."Webhook"
: API Server викликає зовнішній webhook для виконання конвертації. Додаткова інформація потрібна для цього варіанту. Це вимагає, щоб spec.preserveUnknownFields було встановлено у false, а spec.conversion.webhook було налаштовано.
conversion.webhook (WebhookConversion)
webhook описує, як викликати конвертаційний webhook. Обовʼязково, якщо
strategy
встановлено на"Webhook"
.WebhookConversion описує, як викликати конвертаційний webhook
conversion.webhook.conversionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
conversionReviewVersions — впорядкований список пріоритетних версій
ConversionReview
, які очікує Webhook. API сервер використовує першу версію зі списку, яку він підтримує. Якщо жодна з версій, зазначених у цьому списку, не підтримується API сервером, конвертація для власного ресурсу не відбудеться. Якщо збережена конфігурація Webhook визначає дозволені версії та не включає жодної версії, відомої API серверу, виклики до webhook не будуть успішними.conversion.webhook.clientConfig (WebhookClientConfig)
clientConfig містить інструкції щодо виклику webhook, якщо strategy є
Webhook
.WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з webhook.
conversion.webhook.clientConfig.caBundle ([]byte)
caBundle — PEM-кодований CA пакет, який буде використовуватися для перевірки сертифіката сервера webhook. Якщо не вказано, використовуються системні корені довіри на apiserver.
conversion.webhook.clientConfig.service (ServiceReference)
service — це посилання на сервіс для цього webhook. Необхідно вказати або service, або url.
Якщо webhook працює в межах кластера, слід використовувати
service
.ServiceReference містить посилання на Service.legacy.k8s.io
conversion.webhook.clientConfig.service.name (string), обовʼязково
name — це імʼя сервісу. Обовʼязково
conversion.webhook.clientConfig.service.namespace (string), обовʼязково
namespace — це простір імен сервісу. Обовʼязково
conversion.webhook.clientConfig.service.path (string)
path — це необовʼязковий URL шлях, за яким буде контактуватися webhook.
conversion.webhook.clientConfig.service.port (int32)
port — це необовʼязковий порт сервісу, за яким буде контактуватися webhook.
port
повинен бути дійсним номером порту (1-65535, включно). Стандартно встановлено 443 для зворотної сумісності.
conversion.webhook.clientConfig.url (string)
url вказує місце розташування webhook у стандартній URL формі (
scheme://host:port/path
). Потрібно вказати точно один зurl
абоservice
.host
не повинен посилатися на сервіс, що працює в кластері; натомість використовуйте полеservice
.host
може бути знайдений через зовнішній DNS на деяких apiservers (наприклад,kube-apiserver
не може розвʼязати DNS у кластері, оскільки це було б порушенням рівнів).host
також може бути IP-адресою.Зверніть увагу, що використання
localhost
або127.0.0.1
якhost
ризиковано, якщо ви не вживаєте великої обережності, щоб запустити цей webhook на всіх хостах, які можуть потребувати викликів до цього webhook. Такі установки, ймовірно, будуть непереносними, тобто їх не легко переносити в новий кластер.Схема повинна бути "https"; URL повинен починатися з "https://".
Шлях є необовʼязковим, і якщо присутній, може бути будь-яким рядком, допустимим в URL. Ви можете використовувати шлях для передачі довільного рядка до webhook, наприклад, ідентифікатора кластера.
Спроба використати автентифікацію користувача або базову автентифікацію, наприклад, "user:password@" не дозволена. Фрагменти ("#...") та параметри запиту ("?...") також не дозволені.
preserveUnknownFields (boolean)
preserveUnknownFields вказує, що поля обʼєкта, які не зазначені в схемі OpenAPI, повинні зберігатися під час зберігання. apiVersion, kind, metadata та відомі поля всередині metadata завжди зберігаються. Це поле застаріле і замість нього слід встановлювати
x-preserve-unknown-fields
на true вspec.versions[*].schema.openAPIV3Schema
. Деталі дивіться на https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning.
JSONSchemaProps
JSONSchemaProps є JSON-схемою, яка відповідає Специфікації Draft 4 (http://json-schema.org/).
$ref (string)
$schema (string)
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляє JSONSchemaProps або булеве значення. Стандартно встановлюється у true для булевого значення.
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool представляє JSONSchemaProps або булеве значення. Стандартно встановлюється у true для булевого значення.
allOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
anyOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
default (JSON)
default є стандартним значенням для невизначених полів обʼєкта. Використання стандартних значень є бета-функцією у функціональних можливостей CustomResourceDefaulting. Використання стандартних значень вимагає, щоб spec.preserveUnknownFields було встановлено у false.
JSON представляє будь-яке допустиме значення JSON. Підтримуються такі типи: bool, int64, float64, string, []interface{}, map[string]interface{} та nil.
definitions (map[string]JSONSchemaProps)
dependencies (map[string]JSONSchemaPropsOrStringArray)
JSONSchemaPropsOrStringArray представляє JSONSchemaProps або масив рядків.
description (string)
enum ([]JSON)
Atomic: буде замінено під час злиття
JSON представляє будь-яке допустиме значення JSON. Підтримуються такі типи: bool, int64, float64, string, []interface{}, map[string]interface{} та nil.
example (JSON)
JSON представляє будь-яке допустиме значення JSON. Підтримуються такі типи: bool, int64, float64, string, []interface{}, map[string]interface{} та nil.
exclusiveMaximum (boolean)
exclusiveMinimum (boolean)
externalDocs (ExternalDocumentation)
ExternalDocumentation дозволяє посилатися на зовнішній ресурс для розширеної документації.
externalDocs.description (string)
externalDocs.url (string)
format (string)
format — це рядок формату OpenAPI v3. Невідомі формати ігноруються. Наступні формати перевіряються:
- bsonobjectid: BSON Object ID, тобто 24-символьний шістнадцятковий рядок
- uri: URI, який розбирається за допомогою Golang net/url.ParseRequestURI
- email: адреса електронної пошти, яка розбирається за допомогою Golang net/mail.ParseAddress
- hostname: дійсне представлення імені хоста в Інтернеті, визначене RFC 1034, розділ 3.1 [RFC1034]
- ipv4: IPv4 IP, який розбирається за допомогою Golang net.ParseIP
- ipv6: IPv6 IP, який розбирається за допомогою Golang net.ParseIP
- cidr: CIDR, який розбирається за допомогою Golang net.ParseCIDR
- Mac: MAC-адреса, яка розбирається за допомогою Golang net.ParseMAC
- uuid: UUID, який дозволяє великі літери та визначається регулярним виразом
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
- uuid3: UUID3, який дозволяє великі літери та визначається регулярним виразом
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
- uuid4: UUID4, який дозволяє великі літери та визначається регулярним виразом
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
- uuid5: UUID5, який дозволяє великі літери та визначається регулярним виразом
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
- isbn: номер ISBN10 або ISBN13, наприклад, "0321751043" або "978-0321751041"
- isbn10: номер ISBN10, наприклад, "0321751043"
- isbn13: номер ISBN13, наприклад, "978-0321751041"
- creditcard: номер кредитної картки, який визначається регулярним виразом
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$
з будь-якими нецифровими символами - ssn: номер соціального страхування США, який відповідає регулярному виразу
^\d{3}[- ]?\d{2}[- ]?\d{4}$
- hexcolor: шістнадцятковий код кольору, наприклад, "#FFFFFF", який відповідає регулярному виразу
^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
- rgbcolor: код кольору RGB, наприклад, "rgb(255,255,255)"
- byte: двійкові дані, закодовані в base64
- password: будь-який тип рядка
- date: рядок дати, наприклад, "2006-01-02", як визначено у full-date у RFC3339
- duration: рядок тривалості, наприклад, "22 ns", який розбирається за допомогою Golang time.ParseDuration або сумісний з форматом тривалості Scala
- datetime: рядок дати і часу, наприклад, "2014-12-15T19:30:20.000Z", як визначено у date-time у RFC3339
id (string)
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray представляє значення, яке може бути JSONSchemaProps або масивом JSONSchemaProps. Переважно використовується для цілей серіалізації.
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps)
nullable (boolean)
oneOf ([]JSONSchemaProps)
Atomic: буде замінено під час злиття
pattern (string)
patternProperties (map[string]JSONSchemaProps)
properties (map[string]JSONSchemaProps)
required ([]string)
Atomic: буде замінено під час злиття
title (string)
type (string)
uniqueItems (boolean)
x-kubernetes-embedded-resource (boolean)
x-kubernetes-embedded-resource визначає, що значення є вбудованим обʼєктом Kubernetes runtime.Object, з TypeMeta та ObjectMeta. Тип має бути object. Дозволяється подальше обмеження вбудованого обʼєкта. kind, apiVersion та metadata перевіряються автоматично. x-kubernetes-preserve-unknown-fields може бути true, але це не обовʼязково, якщо обʼєкт повністю вказаний (аж до kind, apiVersion, metadata).
x-kubernetes-int-or-string (boolean)
x-kubernetes-int-or-string вказує, що це значення є або цілим числом, або рядком. Якщо це true, дозволено порожній тип, а тип як нащадок anyOf дозволений, якщо дотримується один з наступних шаблонів:
- anyOf:
- type: integer
- type: string
- allOf:
- anyOf:
- type: integer
- type: string
- ... нуль або більше
- anyOf:
- anyOf:
x-kubernetes-list-map-keys ([]string)
Atomic: буде замінено під час злиття
x-kubernetes-list-map-keys анотує масив з типом списку x-kubernetes
map
, вказуючи ключі, які використовуються як індекс map.Цей теґ МАЄ використовуватися тільки для списків, які мають розширення "x-kubernetes-list-type" встановлене на "map". Також значення, вказані для цього атрибута, мають бути полем типу scalar структури нащадка (вкладення не підтримується).
Властивості, зазначені у цьому полі, повинні бути або обовʼязковими, або мати стандартне значення, щоб забезпечити наявність цих властивостей для всіх елементів списку.
x-kubernetes-list-type (string)
x-kubernetes-list-type анотує масив, щоб більш детально описати його топологію. Це розширення має використовуватися тільки для списків і може мати 3 можливі значення:
atomic
: список розглядається як єдине ціле, як скаляр. Списки atomic будуть повністю замінені при оновленні. Це розширення може використовуватися для будь-якого типу списків (структур, скалярів тощо).set
: Набори — це списки, які не повинні мати кілька елементів з однаковим значенням. Кожне значення повинно бути скаляром, обʼєктом з x-kubernetes-map-typeatomic
або масивом з x-kubernetes-list-typeatomic
.map
: Ці списки схожі на map тим, що їх елементи мають неіндексований ключ, який використовується для їх ідентифікації. Порядок зберігається при злитті. Теґ map має використовуватися тільки для списків з елементами типу object. Стандартне значення для масивів — atomic.
x-kubernetes-map-type (string)
x-kubernetes-map-type анотує обʼєкт, щоб більш детально описати його топологію. Це розширення має використовуватися тільки, коли тип обʼєкта є object і може мати 2 можливі значення:
granular
: Ці maps є справжніми map (пари ключ-значення) і кожне поле незалежне одне від одного (їх можна маніпулювати окремими акторами). Це стандартн поведінка для всіх map.atomic
: список розглядається як єдине ціле, як скаляр. Atomic maps будуть повністю замінені при оновленні.
x-kubernetes-preserve-unknown-fields (boolean)
x-kubernetes-preserve-unknown-fields зупиняє етап декодування на сервері API від видалення полів, які не вказані у схемі перевірки. Це впливає на поля рекурсивно, але повертається до нормальної поведінки видалення, якщо вкладені властивості або додаткові властивості вказані у схемі. Це може бути true або не визначено. Використання false заборонено.
x-kubernetes-validations
Patch strategy: злиття за ключем
rule
.Map: унікальні значення ключа rule будуть збережені під час злиття.
x-kubernetes-validations описує список правил валідації записаних мовою CEL.
ValidationRule описує правило валідації записане мовою CEL.
x-kubernetes-validations.rule (string), обовʼязково
Правило (rule) представляє вираз, який буде оцінюватися за допомогою CEL. Докладніше: https://github.com/google/cel-spec. Правило обмежується місцем розташування розширення x-kubernetes-validations у схемі. Змінна
self
у виразі CEL привʼязана до обмеженого значення. Приклад:- Правило обмежене коренем ресурсу з субресурсом status: {"rule": "self.status.actual <= self.spec.maxDesired"}
Якщо Правило обмежене обʼєктом з властивостями, доступні властивості обʼєкта вибираються через
self.field
, а наявність поля можна перевірити черезhas(self.field)
. Поля з нульовим значенням розглядаються як відсутні поля у виразах CEL. Якщо Правило обмежене обʼєктом з additionalProperties (тобто map), значення map доступні черезself[mapKey]
, наявність ключа в map можна перевірити черезmapKey in self
, а всі записи map доступні через макроси та функції CEL, такі якself.all(...)
. Якщо Правило обмежене масивом, елементи масиву доступні черезself[i]
, а також через макроси та функції. Якщо Правило обмежене скаляром,self
привʼязується до значення скаляра. Приклади:- Правило обмежене картою обʼєктів: {"rule": "self.components['Widget'].priority < 10"}
- Правило обмежене списком цілих чисел: {"rule": "self.values.all(value, value >= 0 && value < 100)"}
- Правило обмежене рядковим значенням: {"rule": "self.startsWith('kube')"}
apiVersion
,kind
,metadata.name
таmetadata.generateName
завжди доступні з кореня обʼєкта та з будь-яких обʼєктів, позначених як x-kubernetes-embedded-resource. Жодні інші властивості метаданих не доступні.Невідомі дані, збережені у власних ресурсах через x-kubernetes-preserve-unknown-fields, не доступні у виразах CEL. Це включає:
Невідомі значення полів, що зберігаються схемами обʼєктів з x-kubernetes-preserve-unknown-fields.
Властивості обʼєкта, де схема властивості має "невідомий тип". "Невідомий тип" рекурсивно визначається як:
Схема без типу і з x-kubernetes-preserve-unknown-fields встановленим у true
Масив, де схема елементів має "невідомий тип"
Обʼєкт, де схема additionalProperties має "невідомий тип"
Доступні лише імена властивостей формату
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
. Доступні імена властивостей екрануються за наступними правилами, коли до них звертаються у виразі:- '__' екранується як 'underscores'
- '.' екранується як 'dot'
- '-' екранується як 'dash'
- '/' екранується як 'slash'
- Імена властивостей, які точно збігаються з зарезервованими ключовими словами CEL, екрануються як '{keyword}'. Ключові слова: "true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", "import", "let", "loop", "package", "namespace", "return".
Приклади:
- Правило, яке звертається до властивості з імʼям "namespace": {"rule": "self.namespace > 0"}
- Правило, яке звертається до властивості з імʼям "x-prop": {"rule": "self.x__dash__prop > 0"}
- Правило, яке звертається до властивості з імʼям "redact__d": {"rule": "self.redact__underscores__d > 0"}
Рівність масивів з x-kubernetes-list-type 'set' або 'map' ігнорує порядок елементів, тобто [1, 2] == [2, 1]. Конкатенація масивів з x-kubernetes-list-type використовує семантику типу списку:
- 'set':
X + Y
виконує обʼєднання, де позиції масиву всіх елементів уX
зберігаються, а елементи вY
, що не перетинаються, додаються зі збереженням їх часткового порядку. - 'map':
X + Y
виконує злиття, де позиції масиву всіх ключів уX
зберігаються, але значення замінюються значеннями вY
, коли набори ключівX
таY
перетинаються. Елементи вY
з ключами, що не перетинаються з ключами, додаються зі збереженням їх часткового порядку.
Якщо в
rule
використовується зміннаoldSelf
, це неявно означає, що це "правило переходу" (transition rule).Стандартно, змінна
oldSelf
має той самий тип, що йself
. Коли параметрoptionalOldSelf
встановлено якtrue
, зміннаoldSelf
стає CEL-варіантом (optional), і її методvalue()
матиме той самий тип, що йself
. Деталі можна знайти в документації до поляoptionalOldSelf
.Правила переходу стандартно застосовуються лише до запитів UPDATE і пропускаються, якщо старе значення не було знайдено. Ви можете налаштувати безумовну оцінку правила переходу, встановивши
optionalOldSelf
якtrue
.x-kubernetes-validations.fieldPath (string)
fieldPath представляє шлях до поля, що повертається, коли перевірка не вдається. Він має бути відносним JSON шляхом (тобто з нотацією масиву), обмеженим місцем розташування цього розширення x-kubernetes-validations у схемі та посилатися на існуюче поле. Наприклад, коли перевірка перевіряє, чи існує певний атрибут
foo
в maptestMap
, fieldPath може бути встановлений як.testMap.foo
. Якщо перевірка перевіряє, що два списки повинні мати унікальні атрибути, fieldPath може бути встановлений як будь-який зі списків: наприклад,.testList
. Він не підтримує числовий індекс списку. Він підтримує операції з дочірніми елементами для посилання на існуюче поле. Для отримання додаткової інформації дивіться Підтримка JSONPath у Kubernetes. Числовий індекс масиву не підтримується. Для імені поля, що містить спеціальні символи, використовуйте['specialName']
для посилання на імʼя поля. Наприклад, для атрибутаfoo.34$
, що зʼявляється у спискуtestList
, fieldPath може бути встановлений як.testList['foo.34$']
.x-kubernetes-validations.message (string)
message представляє повідомлення, яке відображається, коли перевірка не вдається. Повідомлення є обовʼязковим, якщо у Правилі є розриви рядків. Повідомлення не повинно містити розривів рядків. Якщо не встановлено, повідомлення буде "failed rule: {Rule}". Наприклад, "must be a URL with the host matching spec.host".
x-kubernetes-validations.messageExpression (string)
messageExpression оголошує вираз CEL, який оцінюється як повідомлення про помилку перевірки, яке повертається, коли це правило не вдається. Оскільки messageExpression використовується як повідомлення про помилку, він повинен оцінюватися як рядок. Якщо і message, і messageExpression присутні у правилі, тоді messageExpression буде використаний у разі невдалої перевірки. Якщо messageExpression призводить до помилки під час виконання, ця помилка записується в лог, і повідомлення про помилку перевірки створюється так, ніби поле messageExpression не встановлено. Якщо messageExpression оцінюється як порожній рядок, рядок, що містить лише пробіли, або рядок, що містить розриви рядків, то повідомлення про помилку перевірки також створюється так, ніби поле messageExpression не встановлено, і факт того, що messageExpression створив порожній рядок/рядок з пробілами/рядок з розривами рядків, записується в лог. messageExpression має доступ до всіх тих же змінних, що й правило; єдина відмінність — тип значення, що повертається. Приклад: "x must be less than max ("+string(self.max)+")".
x-kubernetes-validations.optionalOldSelf (boolean)
optionalOldSelf
використовується для того, щоб активувати оцінку правила переходу навіть під час першого створення обʼєкта або коли старий обʼєкт не містить значення.Коли цей параметр увімкнено, змінна
oldSelf
стає CEL-варіантом (optional), значенням якого будеNone
, якщо старе значення відсутнє або обʼєкт створюється вперше.Ви можете перевірити наявність значення у
oldSelf
за допомогою методуoldSelf.hasValue()
і розпакувати його після перевірки за допомогоюoldSelf.value()
. Більше інформації можна знайти в документації CEL щодо типівOptional
: https://pkg.go.dev/github.com/google/cel-go/cel#OptionalTypesЦей параметр не може бути встановлений, якщо
oldSelf
не використовується вrule
.
x-kubernetes-validations.reason (string)
reason забезпечує машинозчитувану причину невдачі перевірки, яка повертається до абонента, коли запит не проходить це правило перевірки. Код стану HTTP, що повертається до абонента, буде відповідати причині першого невдалого правила перевірки. Поточні підтримувані причини: "FieldValueInvalid", "FieldValueForbidden", "FieldValueобовʼязково", "FieldValueDuplicate". Якщо не встановлено, стандартно використовується "FieldValueInvalid". Усі майбутні додані причини повинні прийматися клієнтами при читанні цього значення, а невідомі причини повинні оброблятися як FieldValueInvalid.
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus вказує стан CustomResourceDefinition.
acceptedNames (CustomResourceDefinitionNames)
acceptedNames — це імена, які фактично використовуються для обслуговування виявлення ресурсів. Вони можуть відрізнятися від імен у специфікації.
CustomResourceDefinitionNames вказує імена для обслуговування цього CustomResourceDefinition
acceptedNames.kind (string), обовʼязково
kind — серіалізоване імʼя типу ресурсу. Зазвичай CamelCase в однині. Екземпляри спеціальних ресурсів будуть використовувати це значення як атрибут
kind
у викликах API.acceptedNames.plural (string), обовʼязково
plural — імʼя ресурсу для обслуговування в множині. Спеціальні ресурси обслуговуються як
/apis/\<group>/\<version>/.../\<plural>
. Має відповідати імені CustomResourceDefinition (у формі\<names.plural>.\<group>
). Має бути в нижньому регістрі.acceptedNames.categories ([]string)
Atomic: буде замінено під час злиття
categories — це список згрупованих ресурсів, до яких належить цей власний ресурс (наприклад, 'all'). Публікується у документах виявлення API і використовується клієнтами для підтримки викликів типу
kubectl get all
.acceptedNames.listKind (string)
listKind — серіалізоване імʼя списку для цього ресурсу. Стандартне значення — "
kind
List".acceptedNames.shortNames ([]string)
Atomic: буде замінено під час злиття
shortNames — короткі імена для ресурсу, які відображаються в документах виявлення API і використовуються клієнтами для підтримки викликів типу
kubectl get \<shortname>
. Мають бути в нижньому регістрі.acceptedNames.singular (string)
singular — імʼя ресурсу в однині. Має бути в нижньому регістрі. Стандартно використовується нижній регістр
kind
.
conditions ([]CustomResourceDefinitionCondition)
Map: унікальні значення за типом ключа будуть збережені під час злиття
conditions — вказують стан для окремих аспектів CustomResourceDefinition
CustomResourceDefinitionCondition містить деталі поточного стану цього CustomResourceDefinition.
conditions.status (string), обовʼязково
status — статус стану. Може бути True, False або Unknown.
conditions.type (string), обовʼязково
type — тип стану. Типи включають Established, NamesAccepted і Terminating.
conditions.lastTransitionTime (Time)
lastTransitionTime — час останньої зміни стану з одного статусу в інший.
Time — це обгортка навколо time.Time, яка підтримує коректне перетворення у YAML та JSON. Для багатьох з функцій, які пропонує пакет time, надаються обгортки.
conditions.message (string)
message — текст, зрощумілий людині, що вказує деталі останньої зміни стану.
conditions.reason (string)
reason — унікальна однозначна причина в CamelCase для останньої зміни стану.
storedVersions ([]string)
Atomic: буде замінено під час злиття
storedVersions перераховує всі версії CustomResources, які коли-небудь зберігалися. Відстеження цих версій дозволяє визначити шлях міграції для збережених версій в etcd. Поле є змінним, тому контролер міграції може завершити міграцію до іншої версії (переконавшись, що у сховищі не залишилося старих обʼєктів), а потім видалити решту версій з цього списку. Версії не можна видаляти з
spec.versions
, доки вони існують у цьому списку.
CustomResourceDefinitionList
CustomResourceDefinitionList є списком обʼєктів CustomResourceDefinition.
items ([]CustomResourceDefinition), обовʼязково
items - список окремих обʼєктів CustomResourceDefinition
apiVersion (рядок)
APIVersion визначає версійну схему цього представлення обʼєкта. Сервери повинні конвертувати визнані схеми у останнє внутрішнє значення і можуть відхиляти невизнані значення. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (рядок)
Kind — рядкове значення, що представляє ресурс REST, який представляє цей обʼєкт. Сервери можуть виводити це значення з точки доступу, до якого клієнт надсилає запити. Не може бути оновлене. В CamelCase. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
metadata - стандартні метадані обʼєкта. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
Операції
get
отримати вказаний CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
401: Unauthorized
get
отримати статус вказаного CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу CustomResourceDefinition
HTTP запит
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (CustomResourceDefinitionList): OK
401: Unauthorized
create
створення CustomResourceDefinition
HTTP запит
POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
202 (CustomResourceDefinition): Accepted
401: Unauthorized
update
заміна вказаного CustomResourceDefinition
HTTP запит
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
update
заміна статусу вказаного CustomResourceDefinition
HTTP запит
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: CustomResourceDefinition, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch
часткове оновлення вказаного CustomResourceDefinition
HTTP запит
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch
часткове оновлення статусу вказаного CustomResourceDefinition
HTTP запит
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
delete
видалення CustomResourceDefinition
HTTP запит
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя CustomResourceDefinition
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції CustomResourceDefinition
HTTP запит
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
2 - DeviceClass v1alpha3
DeviceClass
— це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори.apiVersion: resource.k8s.io/v1alpha3
import "k8s.io/api/resource/v1alpha3"
DeviceClass
DeviceClass — це ресурс, наданий постачальником або адміністратором, який містить конфігурацію пристрою та селектори. На нього можна посилатися у запитах до пристрою, щоб застосувати ці пресети. Охоплює кластер.
Це альфа-тип і вимагає увімкнення функціональної можливості DynamicResourceAllocation.
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClass
metadata (ObjectMeta)
Стандартний обʼєкт метаданих
spec (DeviceClassSpec), обовʼязково
Spec визначає, що можна призначити і як це налаштувати.
Поле є змінюваним. Споживачі повинні бути готові до того, що класи можуть змінюватися в будь-який час, як через оновлення, так і через заміну. Розподілення заявок виконується один раз на основі того, що було встановлено в класах на момент виділення.
Зміна spec автоматично збільшує номер metadata.generation.
DeviceClassSpec
DeviceClassSpec використовується в [DeviceClass] для визначення того, що може бути призначено і як це налаштувати.
config ([]DeviceClassConfiguration)
Atomic: буде замінено під час злиття
Config визначає параметри конфігурації, які застосовуються до кожного пристрою, що описується у цьому класі. Деякі класи потенційно можуть задовольнятися кількома драйверами, тому кожен екземпляр конфігурації постачальника застосовується лише до одного драйвера.
Вони передаються драйверу, але не враховуються при розподілі заявки.
DeviceClassConfiguration використовується в DeviceClass.
config.opaque (OpaqueDeviceConfiguration)
Opaque надає специфічні для драйвера параметри конфігурації.
OpaqueDeviceConfiguration містить параметри конфігурації драйвера у форматі, визначеному постачальником драйвера.
config.opaque.driver (string), обовʼязково
Driver використовується для визначення, в який втулок kubelet потрібно передати ці параметри конфігурації.
Політика допуску, надана розробником драйвера, може використовувати це для прийняття рішення про те, чи потрібно перевіряти їх.
Повинен бути DNS піддоменом і закінчуватися на DNS домен, що належить постачальнику драйвера.
config.opaque.parameters (RawExtension), обовʼязково
Параметри можуть містити довільні дані. Відповідальність за перевірку та керування версіями покладається на розробника драйверів. Зазвичай це включає самоідентифікацію та версію ("kind" + "apiVersion" для типів Kubernetes), а також конвертацію між різними версіями.
RawExtension використовується для зберігання розширень у зовнішніх версіях.
Щоб використовувати це, створіть поле, яке має тип RawExtension у вашій зовнішній, версійованій структурі, і Object у вашій внутрішній структурі. Також потрібно зареєструвати ваші різні типи втулків.
// Внутрішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.Object `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }
// Зовнішній пакунок:
type MyAPIObject struct { runtime.TypeMeta `json:",inline"` MyPlugin runtime.RawExtension `json:"myPlugin"` } type PluginA struct { AOption string `json:"aOption"` }
// Готовий JSON буде виглядати приблизно так:
{ "kind":"MyAPIObject", "apiVersion":"v1", "myPlugin": { "kind":"PluginA", "aOption":"foo", }, }
Що відбувається? Спочатку декодування використовує json або yaml для десеріалізації даних у ваш зовнішній MyAPIObject. Це призводить до зберігання необробленого JSON, але без розпакування. Наступний крок — копіювання (за допомогою pkg/conversion) у внутрішню структуру. Функції перетворення, встановлені в DefaultScheme пакета runtime, розпаковують JSON, збережений у RawExtension, перетворюючи його в правильний тип обʼєкта і зберігаючи його в Object. (TODO: У випадку, коли обʼєкт має невідомий тип, буде створено і збережено обʼєкт runtime.Unknown.)
selectors ([]DeviceSelector)
Atomic: буде замінено під час злиття
Кожному селектору повинен відповідати пристрій, що заявляється в цьому класі.
DeviceSelector повинен мати рівно одне встановлене поле.
selectors.cel (CELDeviceSelector)
CEL містить вираз CEL для вибору пристрою.
CELDeviceSelector містить вираз CEL для вибору пристрою.
selectors.cel.expression (string), обовʼязковий
Вираз є виразом CEL, який оцінює один пристрій. Він має оцінюватися як true, коли пристрій відповідає бажаним критеріям, і як false, коли не відповідає. Будь-який інший результат є помилкою і призводить до зупинки надання пристроїв.
Вхідні дані виразу — це обʼєкт з назвою "device", який має наступні властивості:
- driver (рядок): імʼя драйвера, який визначає цей пристрій.
- attributes (map[string]object): атрибути пристрою, згруповані за префіксом (наприклад, device.attributes["dra.example.com"] оцінюється як обʼєкт з усіма атрибутами, які були префіксовані "dra.example.com").
- capacity (map[string]object): обсяги пристрою, згруповані за префіксом.
Приклад: Розглянемо пристрій з driver="dra.example.com", який надає два атрибути з назвою "model" та "ext.example.com/family" і один обсяг з назвою "modules". Вхідні дані для цього виразу будуть мати такі поля:
device.driver device.attributes["dra.example.com"].model device.attributes["ext.example.com"].family device.capacity["dra.example.com"].modules
Поле device.driver можна використовувати для перевірки конкретного драйвера, або як загальну попередню умову (тобто ви хочете розглядати лише пристрої від цього драйвера), або як частину виразу з кількома умовами, який призначений для розгляду пристроїв з різних драйверів.
Тип значення кожного атрибута визначається визначенням пристрою, і користувачі, які пишуть ці вирази, повинні звертатися до документації для своїх конкретних драйверів. Тип значення кожного обсягу — Quantity.
Якщо невідомий префікс використовується для запиту в device.attributes або device.capacity, буде повернено порожній map. Будь-яке посилання на невідоме поле спричинить помилку оцінки і зупинку виділення.
Робочий вираз має перевіряти наявність атрибутів перед їх використанням.
Для зручності використання доступна функція cel.bind(), яка може бути використана для спрощення виразів, що звертаються до кількох атрибутів з одного домену. Наприклад:
cel.bind(dra, device.attributes["dra.example.com"], dra.someBool && dra.anotherBool)
suitableNodes (NodeSelector)
Лише вузли, що відповідають селектору, будуть враховуватися планувальником при спробі знайти Вузол, що підходить для Podʼа, коли цей Pod використовує запит, який ще не був виділений і цей запит виділяється через контролер панелі управління. Він ігнорується, коли запит не використовує контролер панелі управління для виділення.
Налаштування цього поля є необовʼязковим. Якщо не задано, всі Вузли є кандидатами.
Це поле є альфа-версією і потребує увімкнення функціональної можливості DRAControlPlaneController.
Селектор вузлів представляє об'єднання результатів одного або кількох запитів міток над набором вузлів; тобто, він представляє OR (логічне "або") селекторів, що представлені термінами селектора вузлів.
suitableNodes.nodeSelectorTerms ([]NodeSelectorTerm), обов'язково
Atomic: буде замінено під час злиття
Обов'язковий параметр. Список термів селектора вузлів. Терми обʼєднуються оператором OR.
Null або порожній термін селектора вузла не відповідає жодному об'єкту. Вимоги до них складаються за принципом AND. Тип TopologySelectorTerm реалізує підмножину NodeSelectorTerm.
suitableNodes.nodeSelectorTerms.matchExpressions ([]NodeSelectorRequirement)
Atomic: буде замінено під час злиття
Список вимог до селектора вузлів за мітками вузлів.
suitableNodes.nodeSelectorTerms.matchFields ([]NodeSelectorRequirement)
Atomic: буде замінено під час злиття
Список вимог до селектора вузла за полями вузла.
DeviceClassList
DeviceClassList — це колекція класів.
apiVersion: resource.k8s.io/v1alpha3
kind: DeviceClassList
metadata (ListMeta)
Стандартні метадані списку
items ([]DeviceClass), обовʼязково
Items —список класів ресурсів.
Operations
get
отримати вказаний DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу DeviceClass
HTTP запит
GET /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (DeviceClassList): OK
401: Unauthorized
create
створення DeviceClass
HTTP запит
POST /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
202 (DeviceClass): Accepted
401: Unauthorized
update
заміна вказаного DeviceClass
HTTP запит
PUT /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: DeviceClass, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
patch
часткове оновлення вказаного DeviceClass
HTTP запит
PATCH /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (DeviceClass): OK
201 (DeviceClass): Created
401: Unauthorized
delete
видалення DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses/{name}
Параметри
name (в шляху): string, обовʼязково
імʼя DeviceClass
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (DeviceClass): OK
202 (DeviceClass): Accepted
401: Unauthorized
deletecollection
видалення колекції DeviceClass
HTTP запит
DELETE /apis/resource.k8s.io/v1alpha3/deviceclasses
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
3 - MutatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
MutatingWebhookConfiguration описує конфігурацію вебхука, який приймає або відхиляє і може змінювати обʼєкт.
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata (ObjectMeta)
Стандартний обʼєкт метаданих; Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
webhooks ([]MutatingWebhook)
Patch strategy: злиття за ключем
name
Map: унікальні значення ключа name будуть збережені під час злиття
Webhooks — це список вебхуків та відповідних ресурсів і операцій.
MutatingWebhook описує вебхук допуску та ресурси й операції, до яких він застосовується.
webhooks.admissionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
AdmissionReviewVersions — це впорядкований список версій
AdmissionReview
, які очікує вебхук. Сервер API спробує використати першу версію зі списку, яку він підтримує. Якщо жодна з вказаних версій не підтримується сервером API, перевірка цього обʼєкта зазнає невдачі. Якщо збережена конфігурація вебхука вказує дозволені версії, але не включає жодної версії, відомої серверу API, виклики до вебхука зазнають невдачі й підпадають під політику відмови.webhooks.clientConfig (WebhookClientConfig), обовʼязково
ClientConfig визначає, як спілкуватися з вебхуком. Обовʼязково.
WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з вебхуком.
webhooks.clientConfig.caBundle ([]byte)
caBundle
— це закодований у PEM набір сертифікатів CA, який використовуватиметься для перевірки сертифіката сервера вебхука. Якщо не вказано, використовуються системні корені довіри на сервері API.webhooks.clientConfig.service (ServiceReference)
service
— це посилання на сервіс для цього вебхука. Необхідно вказати абоservice
, абоurl
.Якщо вебхук працює в межах кластера, то слід використовувати
service
.ServiceReference містить посилання на Service.legacy.k8s.io.
webhooks.clientConfig.service.name (string), обовʼязково
name
— це імʼя сервісу. Обовʼязково.webhooks.clientConfig.service.namespace (string), обовʼязково
namespace
— це простір імен сервісу. Обовʼязково.webhooks.clientConfig.service.path (string)
path
— це необовʼязковий URL шлях, який буде надіслано в будь-якому запиті до цього сервісу.webhooks.clientConfig.service.port (int32)
Якщо вказано, то це порт на сервісі, який є хостом вебхуку. Типово 443 для зворотної сумісності.
port
має бути дійсним номером порту (1-65535, включно).
webhooks.clientConfig.url (string)
url
вказує місце розташування вебхука в стандартній формі URL (scheme://host:port/path
). Необхідно вказати абоurl
, абоservice
.host
не повинен посилатися на сервіс, що працює в кластері; використовуйте полеservice
натомість. Хост може бути знайдений через зовнішній DNS в деяких серверах API (наприклад,kube-apiserver
не може працювати з кластерним DNS, оскільки це було б порушенням розшарування).host
може також бути IP-адресою.Зверніть увагу, що використання
localhost
або127.0.0.1
якhost
є ризикованим, якщо ви не вживаєте великих заходів обережності, щоб запустити цей вебхук на всіх хостах, що запускають сервер API, який може потребувати викликів до цього вебхука. Такі встановлення, ймовірно, будуть непереносимими, тобто їх буде важко розгорнути в новому кластері.Схема має бути "https"; URL має починатися з "https://".
Шлях є необовʼязковим, і, якщо він присутній, може бути будь-яким рядком, допустимим в URL. Ви можете використовувати шлях для передачі довільного рядка до вебхука, наприклад, ідентифікатора кластера.
Спроба використання автентифікації користувача або базової автентифікації, наприклад, "user:password@", не дозволена. Також не дозволяються фрагменти ("#...") і параметри запиту ("?...").
webhooks.name (string), обовʼязково
Імʼя вебхуку допуску. Імʼя має бути повністю кваліфікованим, наприклад,
imagepolicy.kubernetes.io
, де "imagepolicy" є назвою вебхука, а kubernetes.io — назвою організації. Обовʼязково.webhooks.sideEffects (string), обовʼязково
SideEffects вказує, чи має цей вебхук побічні ефекти. Допустимі значення: None, NoneOnDryRun (вебхуки, створені у v1beta1, також можуть вказати Some або Unknown). Вебхуки з побічними ефектами МАЮТЬ реалізувати систему узгодження, оскільки запит може бути відхилено на наступному етапі ланцюжка допуску, і побічні ефекти потрібно буде скасувати. Запити з атрибутом dryRun автоматично відхиляються, якщо вони відповідають вебхуку з sideEffects == Unknown або Some.
webhooks.failurePolicy (string)
FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.
webhooks.matchConditions ([]MatchCondition)
Patch strategy: злиття за ключем
name
Map: унікальні значення за ключем name будуть збережені під час злиття
MatchConditions — це список умов, які мають бути виконані для надсилання запиту до цього вебхука. Умови відповідності фільтрують запити, які вже були підібрані за правилами, namespaceSelector і objectSelector. Порожній список matchConditions відповідає всім запитам. Максимальна кількість умов відповідності — 64.
Логіка точного збігу така (за порядком):
- Якщо БУДЬ-ЯКА умова відповідності оцінюється як FALSE, вебхук оминається.
- Якщо ВСІ умови відповідності оцінюються як TRUE, вебхук викликається.
- Якщо будь-яка умова відповідності оцінюється як помилка (але жодна не є FALSE):
- Якщо failurePolicy=Fail, запит відхиляється
- Якщо failurePolicy=Ignore, помилка ігнорується і вебхук оминається
MatchCondition представляє умову, яка має бути виконана для надсилання запиту до вебхука.
webhooks.matchConditions.expression (string), обовʼязково
Expression представляє вираз, який буде оцінено CEL. Результат обробки — bool. Вирази CEL мають доступ до вмісту AdmissionRequest і Authorizer, організованих у змінні CEL:
'object' — Обʼєкт із вхідного запиту. Значення null для запитів DELETE. 'oldObject' — Наявний обʼєкт. Значення null для запитів CREATE. 'request' — Атрибути запиту допуску (/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — CEL Authorizer. Може бути використано для виконання перевірок авторизації для виконавця (користувач або службового облікового запису) запиту. Див. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' — CEL ResourceCheck, створений з 'authorizer' і налаштований із ресурсом запиту. Документація щодо CEL: https://kubernetes.io/docs/reference/using-api/cel/
Обовʼязково.
webhooks.matchConditions.name (string), обовʼязково
Name — це ідентифікатор цієї умови відповідності, використовується для стратегії злиття умов відповідності, а також для надання ідентифікатора для цілей логування. Хороша назва має бути описовою для повʼязаного виразу. Назва має бути кваліфікованою назвою, що складається з алфавітно-цифрових символів, '-', '' або '.', і має починатися та закінчуватися алфавітно-цифровим символом (наприклад, 'MyName' або 'my.name' або '123-abc', регулярний вираз, що використовується для перевірки, — '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]') з необовʼязковим префіксом DNS субдомену та '/' (наприклад, 'example.com/MyName').
Обовʼязково.
webhooks.matchPolicy (string)
matchPolicy визначає, як використовується список "rules" для відповідності вхідним запитам. Допустимі значення — "Exact" або "Equivalent".
Exact: відповідність запиту тільки в тому випадку, якщо він точно відповідає зазначеному правилу. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, але "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
, запит до apps/v1beta1 або extensions/v1beta1 не буде надіслано до вебхука.Equivalent: відповідність запиту, якщо він змінює ресурс, вказаний у правилах, навіть через іншу групу API або версію. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, і "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
, запит до apps/v1beta1 або extensions/v1beta1 буде перетворений на apps/v1 і надісланий до вебхука.
Стандартне значення — "Equivalent".
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи збігається простір імен для цього обʼєкта з селектором. Якщо обʼєкт сам є простором імен, перевірка збігу виконується за метаданими обʼєкта. Якщо обʼєкт є іншим ресурсом на рівні кластера, він ніколи не оминає вебхук.
Наприклад, щоб запустити вебхук для будь-яких обʼєктів, чий простір імен не повʼязаний з "runlevel" 0 або 1, потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
Якщо замість цього ви хочете запустити вебхук для будь-яких обʼєктів, чий простір імен повʼязаний з "environment" "prod" або "staging", потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
Див. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для отримання додаткових прикладів селекторів міток.
Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.objectSelector (LabelSelector)
ObjectSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи має обʼєкт відповідні мітки. ObjectSelector оцінюється як для oldObject, так і для newObject, які будуть надіслані до вебхука, і вважається відповідним, якщо будь-який з обʼєктів відповідає селектору. Нульовий обʼєкт (oldObject у випадку створення або newObject у випадку видалення) або обʼєкт, який не може мати міток (наприклад, DeploymentRollback або PodProxyOptions обʼєкт), не вважається таким, що має збіг. Використовуйте objectSelector лише якщо вебхук є опціональним, оскільки кінцеві користувачі можуть оминути вебхук допуску, встановивши мітки. Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.reinvocationPolicy (string)
reinvocationPolicy вказує, чи має цей вебхук викликатися кілька разів у рамках однієї оцінки допуску. Допустимі значення — "Never" і "IfNeeded".
Never: вебхук не буде викликатися більше одного разу в рамках однієї оцінки допуску.
IfNeeded: вебхук буде викликаний щонайменше один додатковий раз у рамках оцінки допуску, якщо обʼєкт, який допускаєтсья, змінюється іншими втулками допуску після початкового виклику вебхука. Вебхуки, які вказують цю опцію, мають бути ідемпотентними, здатними обробляти обʼєкти, які вони попередньо прийняли. Зверніть увагу:
- не гарантується, що кількість додаткових викликів буде дорівнювати одному.
- якщо додаткові виклики призводять до подальших змін обʼєкта, вебхуки не гарантуються до повторного виклику.
- вебхуки, що використовують цю опцію, можуть бути впорядковані для мінімізації кількості додаткових викликів.
- для перевірки обʼєкта після завершення всіх змін, використовуйте вебхук для валідації допуску.
Стандартне значення — "Never".
webhooks.rules ([]RuleWithOperations)
Atomic: буде замінено під час злиття
Rules описує, які операції з якими ресурсами/субресурсами цікавлять вебхук. Вебхук цікавить операція, якщо вона відповідає будь-якому правилу. Однак, щоб запобігти тому, що ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks можуть привести кластер до стану, з якого неможливо відновитися без повного вимкнення втулка, ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks ніколи не викликаються на запити допуску для обʼєктів ValidatingWebhookConfiguration і MutatingWebhookConfiguration.
RuleWithOperations — це кортеж операцій і ресурсів. Рекомендується переконатися, що всі розширення кортежу є дійсними.
webhooks.rules.apiGroups ([]string)
Atomic: буде замінено під час злиття
APIGroups — це групи API, до яких належать ресурси. '*' означає всі групи. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.apiVersions ([]string)
Atomic: буде замінено під час злиття
APIVersions — це версії API, до яких належать ресурси. '*' означає всі версії. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.operations ([]string)
Atomic: буде замінено під час злиття
Operations — це операції, які цікавлять вебхук допуску — CREATE, UPDATE, DELETE, CONNECT або * для всіх цих операцій і будь-яких майбутніх операцій допуску, які будуть додані. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.resources ([]string)
Atomic: буде замінено під час злиття
Resources — це список ресурсів, до яких застосовується це правило.
Наприклад, 'pods' означає Podʼи, 'pods/log' означає субресурс логу Podʼів. '*' означає всі ресурси, але не субресурси. 'pods/*' означає всі субресурси Podʼів. '*/scale' означає всі субресурси масштабування. '*/*' означає всі ресурси та їх субресурси.
Якщо присутній універсальний символ, правило валідації забезпечить відсутність перекриття ресурсів.
Залежно від навколишнього обʼєкта, субресурси можуть бути недопустимими. Обовʼязково.
webhooks.rules.scope (string)
scope визначає область застосування цього правила. Допустимі значення — "Cluster", "Namespaced" та "*" "Cluster" означає, що правило буде застосовано тільки до ресурсів на рівні кластера. API обʼєкти простору імен є ресурсами на рівні кластера. "Namespaced" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".
webhooks.timeoutSeconds (int32)
TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.
MutatingWebhookConfigurationList
MutatingWebhookConfigurationList — це список MutatingWebhookConfiguration.
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfigurationList
metadata (ListMeta)
Стандартні метадані списку. Більше інформації: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]MutatingWebhookConfiguration), обовʼязково
Список MutatingWebhookConfiguration.
Операції
get
отримати вказану MutatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
401: Unauthorized
list
перелік або перегляд обʼєктів типу MutatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (MutatingWebhookConfigurationList): OK
401: Unauthorized
create
створення MutatingWebhookConfiguration
HTTP запит
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
body: MutatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
202 (MutatingWebhookConfiguration): Accepted
401: Unauthorized
update
заміна вказаної MutatingWebhookConfiguration
HTTP запит
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: MutatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
patch
часткове оновлення вказаної MutatingWebhookConfiguration
HTTP запит
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
delete
видалення MutatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
name of the MutatingWebhookConfiguration
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видалення колекції MutatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized
4 - ValidatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingWebhookConfiguration
ValidatingWebhookConfiguration описує конфігурацію вебхуку допуску, який приймає або відхиляє обʼєкт не змінюючи його.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata (ObjectMeta)
Стандартні метадані обʼєкта; Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
webhooks ([]ValidatingWebhook)
Patch strategy: обʼєднання за ключем
name
Map: унікальні значення ключа name будуть збережені під час злиття
Webhooks — це список вебхуків і ресурсів та операцій, які вони зачіпають.
ValidatingWebhook описує вебхук допуску та ресурси й операції, до яких він застосовується.
webhooks.admissionReviewVersions ([]string), обовʼязково
Atomic: буде замінено під час злиття
AdmissionReviewVersions — це впорядкований список бажаних версій
AdmissionReview
, які очікує вебхук. API сервер спробує використати першу версію у списку, яку він підтримує. Якщо жодна з версій, зазначених у цьому списку, не підтримується API сервером, валідація для цього обʼєкта зазнає невдачі. Якщо збережена конфігурація вебхука вказує дозволені версії та не включає жодних версій, відомих API серверу, виклики до вебхука зазнають невдачі і є предметом для застосування політики відмов.webhooks.clientConfig (WebhookClientConfig), обовʼязково
ClientConfig визначає, як спілкуватися з вебхуком. Обовʼязково
WebhookClientConfig містить інформацію для встановлення TLS-зʼєднання з вебхуком
webhooks.clientConfig.caBundle ([]byte)
caBundle
— це PEM-кодований набір сертифікатів CA, який буде використовуватися для перевірки сертифіката сервера вебхука. Якщо не вказано, використовуються системні корені довіри на API сервері.webhooks.clientConfig.service (ServiceReference)
service
— це посилання на сервіс для цього вебхука. Необхідно вказати абоservice
, абоurl
.Якщо вебхук працює в межах кластера, тоді слід використовувати
service
.ServiceReference містить посилання на Service.legacy.k8s.io
webhooks.clientConfig.service.name (string), обовʼязково
name
— це імʼя сервісу. Обовʼязковоwebhooks.clientConfig.service.namespace (string), обовʼязково
namespace
— це простір імен сервісу. Обовʼязковоwebhooks.clientConfig.service.path (string)
path
— це необовʼязковий URL-шлях, який буде надіслано в будь-якому запиті до цього сервісу.webhooks.clientConfig.service.port (int32)
Якщо вказано, то це порт на сервісі, який є хостом вебхуку. Типово 443 для зворотної сумісності.
port
має бути дійсним номером порту (1-65535, включно).webhooks.clientConfig.url (string)
url
вказує місце розташування вебхука в стандартній формі URL (scheme://host:port/path
). Необхідно вказати абоurl
, абоservice
.host
не повинен посилатися на сервіс, що працює в кластері; використовуйте полеservice
натомість. Хост може бути знайдений через зовнішній DNS в деяких серверах API (наприклад,kube-apiserver
не може працювати з кластерним DNS, оскільки це було б порушенням розшарування).host
може також бути IP-адресою.Зверніть увагу, що використання
localhost
або127.0.0.1
якhost
є ризикованим, якщо ви не вживаєте великих заходів обережності, щоб запустити цей вебхук на всіх хостах, що запускають сервер API, який може потребувати викликів до цього вебхука. Такі встановлення, ймовірно, будуть непереносимими, тобто їх буде важко розгорнути в новому кластері.Схема повинна бути "https"; URL повинен починатися з "https://".
Шлях є необовʼязковим, і, якщо він присутній, може бути будь-яким рядком, допустимим в URL. Ви можете використовувати шлях для передачі довільного рядка до вебхука, наприклад, ідентифікатора кластера.
Спроба використання автентифікації користувача або базової автентифікації, наприклад, "user:password@", не дозволена. Також не дозволяються фрагменти ("#...") і параметри запиту ("?...").
webhooks.name (string), обовʼязково
Імʼя вебхука допуску. Імʼя повинно бути повністю кваліфікованим, наприклад,
imagepolicy.kubernetes.io
, де "imagepolicy" — це імʼя вебхука, а kubernetes.io — це імʼя організації. Обовʼязково.webhooks.sideEffects (string), обовʼязково
SideEffects вказує, чи має цей вебхук побічні ефекти. Допустимі значення: None, NoneOnDryRun (вебхуки, створені у v1beta1, також можуть вказати Some або Unknown). Вебхуки з побічними ефектами МАЮТЬ реалізувати систему узгодження, оскільки запит може бути відхилено на наступному етапі ланцюжка допуску, і побічні ефекти потрібно буде скасувати. Запити з атрибутом dryRun автоматично відхиляються, якщо вони відповідають вебхуку з sideEffects == Unknown або Some.
webhooks.failurePolicy (string)
FailurePolicy визначає, як обробляються нерозпізнані помилки від точки доступу допуску — дозволені значення: Ignore або Fail. Стандартне значення — Fail.
webhooks.matchConditions ([]MatchCondition)
Patch strategy: обʼєднання за ключем
name
Map: під час обʼєднання будуть збережені унікальні значення за ключем name
MatchConditions — це список умов, які мають бути виконані для надсилання запиту до цього вебхука. Умови відповідності фільтрують запити, які вже були підібрані за правилами, namespaceSelector і objectSelector. Порожній список matchConditions відповідає всім запитам. Максимальна кількість умов відповідності — 64.
Логіка точного збігу така (за порядком): 1. Якщо БУДЬ-ЯКА умова відповідності оцінюється як FALSE, вебхук оминається. 2. Якщо ВСІ умови відповідності оцінюються як TRUE, вебхук викликається. 3. Якщо будь-яка умова відповідності оцінюється як помилка (але жодна не є FALSE): - Якщо failurePolicy=Fail, запит відхиляється - Якщо failurePolicy=Ignore, помилка ігнорується і вебхук оминається
MatchCondition представляє умову, яка повинна бути виконана для надсилання запиту до вебхука.
webhooks.matchConditions.expression (string), обовʼязково
Expression представляє вираз, який буде оцінено CEL. Результат обробки — bool. Вирази CEL мають доступ до вмісту AdmissionRequest і Authorizer, організованих у змінні CEL:
'object' — Обʼєкт із вхідного запиту. Значення null для запитів DELETE. 'oldObject' — Наявний обʼєкт. Значення null для запитів CREATE. 'request' — Атрибути запиту допуску (/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — CEL Authorizer. Може бути використано для виконання перевірок авторизації для виконавця (користувач або службового облікового запису) запиту. Див. https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' — CEL ResourceCheck, створений з 'authorizer' і налаштований із ресурсом запиту. Документація щодо CEL: https://kubernetes.io/docs/reference/using-api/cel/
Обовʼязково.
webhooks.matchConditions.name (string), обовʼязково
Name — це ідентифікатор цієї умови відповідності, використовується для стратегії злиття умов відповідності, а також для надання ідентифікатора для цілей логування. Хороша назва має бути описовою для повʼязаного виразу. Назва має бути кваліфікованою назвою, що складається з алфавітно-цифрових символів, '-', '' або '.', і має починатися та закінчуватися алфавітно-цифровим символом (наприклад, 'MyName' або 'my.name' або '123-abc', регулярний вираз, що використовується для перевірки, — '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]') з необовʼязковим префіксом DNS субдомену та '/' (наприклад, 'example.com/MyName').
Обовʼязково.
webhooks.matchPolicy (string)
matchPolicy визначає, як використовується список "rules" для відповідності вхідним запитам. Допустимі значення — "Exact" або "Equivalent".
Exact: відповідність запиту тільки в тому випадку, якщо він точно відповідає зазначеному правилу. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, але "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
, запит до apps/v1beta1 або extensions/v1beta1 не буде надіслано до вебхука.Equivalent: відповідність запиту, якщо він змінює ресурс, вказаний у правилах, навіть через іншу групу API або версію. Наприклад, якщо розгортання (deployments) можуть бути змінені через apps/v1, apps/v1beta1 і extensions/v1beta1, і "rules" включають тільки
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
, запит до apps/v1beta1 або extensions/v1beta1 буде перетворений на apps/v1 і надісланий до вебхука.
Стандартне значення — "Equivalent".
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи збігається простір імен для цього обʼєкта з селектором. Якщо обʼєкт сам є простором імен, перевірка збігу виконується за метаданими обʼєкта. Якщо обʼєкт є іншим ресурсом на рівні кластера, він ніколи не оминає вебхук.
Наприклад, щоб запустити вебхук для будь-яких обʼєктів, чий простір імен не повʼязаний з "runlevel" 0 або 1, потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
Якщо замість цього ви хочете запустити вебхук для будь-яких обʼєктів, чий простір імен повʼязаний з "environment" "prod" або "staging", потрібно налаштувати селектор наступним чином:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
Див. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ для отримання додаткових прикладів селекторів міток.
Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.objectSelector (LabelSelector)
ObjectSelector визначає, чи буде вебхук працювати з обʼєктом на основі того, чи має обʼєкт відповідні мітки. ObjectSelector оцінюється як для oldObject, так і для newObject, які будуть надіслані до вебхука, і вважається відповідним, якщо будь-який з обʼєктів відповідає селектору. Нульовий обʼєкт (oldObject у випадку створення або newObject у випадку видалення) або обʼєкт, який не може мати міток (наприклад, DeploymentRollback або PodProxyOptions обʼєкт), не вважається таким, що має збіг. Використовуйте objectSelector лише якщо вебхук є опціональним, оскільки кінцеві користувачі можуть оминути вебхук допуску, встановивши мітки. Типове значення — порожній LabelSelector, який має збіг зі всім.
webhooks.rules ([]RuleWithOperations)
Atomic: буде замінено під час злиття
Rules описують, які операції з якими ресурсами/субресурсами цікавлять вебхук. Вебхук цікавить операція, якщо вона збігаєтьсяз БУДЬ-ЯКИМ правилом. Однак, щоб запобігти ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks від приведення кластера в стан, з якого не можна вийти без повного відключення втулка, ValidatingAdmissionWebhooks і MutatingAdmissionWebhooks ніколи не викликаються для запитів на допуск для обʼєктів ValidatingWebhookConfiguration і MutatingWebhookConfiguration.
RuleWithOperations — це кортеж операцій і ресурсів. Рекомендується переконатися, що всі розширення кортежу є дійсними.
webhooks.rules.apiGroups ([]string)
Atomic: буде замінено під час обʼєднання
APIGroups — це групи API, до яких належать ресурси. '*' означає всі групи. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.apiVersions ([]string)
Atomic: буде замінено під час обʼєднання
APIVersions — це версії API, до яких належать ресурси. '*' означає всі версії. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.operations ([]string)
Atomic: буде замінено під час обʼєднання
Operations — це операції, які цікавлять вебхук допуску — CREATE, UPDATE, DELETE, CONNECT або * для всіх цих операцій і будь-яких майбутніх операцій допуску, які будуть додані. Якщо присутній символ '*', довжина списку має бути одиницею. Обовʼязково.
webhooks.rules.resources ([]string)
Atomic: буде замінено під час обʼєднання
Resources — це список ресурсів, до яких застосовується це правило.
Наприклад, 'pods' означає Podʼи, 'pods/log' означає субресурс логу Podʼів. '*' означає всі ресурси, але не субресурси. 'pods/*' означає всі субресурси Podʼів. '*/scale' означає всі субресурси масштабування. '*/*' означає всі ресурси та їх субресурси.
Якщо присутній універсальний символ, правило валідації забезпечить відсутність перекриття ресурсів.
Залежно від навколишнього обʼєкта, субресурси можуть бути недопустимими. Обовʼязково.
webhooks.rules.scope (string)
scope визначає область застосування цього правила. Допустимі значення — "Cluster", "Namespaced" та "*". "Cluster" означає, що правило буде застосовано тільки до ресурсів на рівні кластера. API обʼєкти простору імен є ресурсами на рівні кластера. "Namespaced" означає, що правило буде застосовано тільки до ресурсів простору імен. "*" означає, що немає обмежень на область застосування. Субресурси відповідають області застосування свого батьківського ресурсу. Стандартне значення — "*".
webhooks.timeoutSeconds (int32)
TimeoutSeconds визначає тайм-аут для цього вебхука. Після закінчення тайм-ауту виклик вебхука буде проігноровано або виклик API завершиться невдачею залежно від політики відмови. Значення тайм-ауту має бути від 1 до 30 секунд. Стандартне значення — 10 секунд.
ValidatingWebhookConfigurationList
ValidatingWebhookConfigurationList — це список ValidatingWebhookConfiguration.
items ([]ValidatingWebhookConfiguration), обовʼязково
Список ValidatingWebhookConfiguration.
apiVersion (string)
APIVersion визначає версію схеми цього представлення обʼєкта. Сервери повинні перетворювати визнані схеми на останнє внутрішнє значення та можуть відхиляти невизнані значення. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind є рядковим значенням, яке представляє REST-ресурс, який представляє цей обʼєкт. Сервери можуть виводити його з точки доступу, до якої клієнт надсилає запити. Не може бути оновлено. У форматі CamelCase. Додаткова інформація: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
Стандартні метадані списку. Докладніше: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
Операції
get
отримати вказану ValidatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
401: Unauthorized
list
перелік або перегляд обʼктів ValidatingWebhookConfiguration
HTTP запит
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
allowWatchBookmarks (в запиті): boolean
continue (в запиті): string
fieldSelector (в запиті): string
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
watch (в запиті): boolean
Відповідь
200 (ValidatingWebhookConfigurationList): OK
401: Unauthorized
create
створення ValidatingWebhookConfiguration
HTTP запит
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
body: ValidatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
202 (ValidatingWebhookConfiguration): Accepted
401: Unauthorized
update
заміна вказаної ValidatingWebhookConfiguration
HTTP запит
PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: ValidatingWebhookConfiguration, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
patch
часткове оновлення вказаної ValidatingWebhookConfiguration
HTTP запит
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: Patch, обовʼязково
dryRun (в запиті): string
fieldManager (в запиті): string
fieldValidation (в запиті): string
force (в запиті): boolean
pretty (в запиті): string
Відповідь
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
delete
видалення ValidatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
Параметри
name (в шляху): string, обовʼязково
назва ValidatingWebhookConfiguration
body: DeleteOptions
dryRun (в запиті): string
gracePeriodSeconds (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
Відповідь
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
видаленя колекції ValidatingWebhookConfiguration
HTTP запит
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
Параметри
body: DeleteOptions
continue (в запиті): string
dryRun (в запиті): string
fieldSelector (в запиті): string
gracePeriodSeconds (в запиті): integer
labelSelector (в запиті): string
limit (в запиті): integer
pretty (в запиті): string
propagationPolicy (в запиті): string
resourceVersion (в запиті): string
resourceVersionMatch (в запиті): string
sendInitialEvents (в запиті): boolean
timeoutSeconds (в запиті): integer
Відповідь
200 (Status): OK
401: Unauthorized