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)
Стратегия патчинга: слияние по ключу
nameКарта: уникальные значения по ключу name будут сохранены при слиянии
Webhooks — это список вебхуков и затронутых ресурсов и операций.
MutatingWebhook описывает вебхук для внесения изменений и ресурсы и операции, к которым он применяется.
-
webhooks.admissionReviewVersions ([]string), required
Атомарно: будет заменено во время слияния
AdmissionReviewVersions — упорядоченный список предпочитаемых
AdmissionReviewверсий, ожидаемых веб-хуком. Сервер API попытается использовать первую версию в списке, которую он поддерживает. Если ни одна из версий, указанных в этом списке, не поддерживается сервером API, проверка этого объекта завершится ошибкой. Если в сохранённой конфигурации веб-хука указаны разрешённые версии, и среди них нет версий, известных серверу API, вызовы веб-хука завершатся ошибкой и будут обрабатываться согласно политике обработки ошибок. -
webhooks.clientConfig (WebhookClientConfig), required
ClientConfig определяет способ связи с хуком. Обязательно
WebhookClientConfig содержит информацию для создания TLS-соединения с веб-хуком
-
webhooks.clientConfig.caBundle ([]byte)
caBundle— закодированный в PEM набор сертификатов доверенных центров сертификации, который будет использоваться для проверки сертификата сервера веб-хука. Если не указано, используются системные корневые сертификаты доверенных центров сертификации на apiserвере. -
webhooks.clientConfig.service (ServiceReference)
service— ссылка на службу для этого веб-хука. Должен быть указан либоservice, либоurl.Если веб-хук работает внутри кластера, то следует использовать
service.ServiceReference содержит ссылку на Service.legacy.k8s.io
-
webhooks.clientConfig.service.name (string), required
name— имя службы. Обязательно -
webhooks.clientConfig.service.namespace (string), required
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 в некоторых apiserверах (например,kube-apiserverне может разрешить DNS внутри кластера, так как это будет нарушение слоёв).hostтакже может быть IP-адресом.Обратите внимание, что использование
localhostили127.0.0.1в качествеhostнебезопасно, если вы не позаботитесь о запуске этого веб-хука на всех узлах, на которых может потребоваться запуск apiserвера для обращений к данному веб-хуку. Такие установки, скорее всего, будут непереносимыми, то есть нелегко развернуть в новом кластере.Схема должна быть "https"; URL должен начинаться с "https://".
Путь необязателен и, если присутствует, может быть любой строкой, разрешённой в URL. Вы можете использовать путь для передачи произвольной строки веб-хуку, например, идентификатора кластера.
Использование аутентификации по пользователю или базовой аутентификации, например "user:password@", запрещено. Фрагменты ("#...") и параметры запроса ("?...") также запрещены.
-
-
webhooks.name (string), required
Имя веб-хука проверки доступа. Имя должно быть полностью квалифицированным, например, imagepolicy.kubernetes.io, где "imagepolicy" — имя веб-хука, а kubernetes.io — имя организации. Обязательно
-
webhooks.sideEffects (string), required
SideEffects указывает, имеет ли этот веб-хук побочные эффекты. Допустимые значения: None, NoneOnDryRun (веб-хуки, созданные через v1beta1, могут также указать Some или Unknown). Веб-хуки с побочными эффектами ОБЯЗАТЕЛЬНО должны реализовывать систему согласования, так как запрос может быть отклонен последующим этапом в цепочке проверки доступа, и поэтому побочные эффекты должны быть отменены. Запросы с атрибутом dryRun будут автоматически отклонены, если они соответствуют веб-хуку с sideEffects == Unknown или Some.
-
webhooks.failurePolicy (string)
FailurePolicy определяет, как обрабатываются нераспознанные ошибки из конечной точки проверки доступа — допустимые значения: Ignore или Fail. По умолчанию Fail.
-
webhooks.matchConditions ([]MatchCondition)
Стратегия патчинга: слияние по ключу
nameКарта: уникальные значения по ключу name будут сохранены во время слияния
MatchConditions — список условий, которые должны быть выполнены для отправки запроса на этот веб-хук. Условия соответствия фильтруют запросы, которые уже соответствуют правилам, selector пространства имён и selector объекта. Пустой список matchConditions соответствует всем запросам. Максимальное количество допустимых условий соответствия — 64.
Точная логика соответствия (в порядке):
- Если ЛЮБОЕ условие matchCondition оценивается как FALSE, веб-хук пропускается.
- Если ВСЕ условия matchCondition оцениваются как TRUE, веб-хук вызывается.
- Если какое-либо условие matchCondition оценивается как ошибка (но ни одно из них не является FALSE):
- Если failurePolicy=Fail, отклонён запрос
- Если failurePolicy=Ignore, ошибка игнорируется, и веб-хук пропускается
MatchCondition представляет собой условие, которое должно быть выполнено для отправки запроса на веб-хук.
-
webhooks.matchConditions.expression (string), required
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), required
Name — идентификатор этого условия соответствия, используемый для стратегического слияния MatchConditions, а также для предоставления идентификатора для целей регистрации. Хорошее имя должно точно описывать связанное выражение. Имя должно быть квалифицированным именем, состоящим из буквенно-цифровых символов, '-', '_', или '.', и должно начинаться и заканчиваться буквенно-цифровым символом (например, 'MyName', или 'my.name', или '123-abc', используемый для проверки regex — '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]') с необязательным префиксом поддомена DNS и '/' (например, 'example.com/MyName')
Обязательно.
-
webhooks.matchPolicy (string)
matchPolicy определяет, как используется список "rules" для сопоставления входящих запросов. Допустимые значения — "Exact" или "Equivalent".
Exact: соответствие запросу только в том случае, если он точно соответствует указанному правилу. Например, если развертывания могут быть изменены через apps/v1, apps/v1beta1 и extensions/v1beta1, но "rules" содержат только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос на apps/v1beta1 или extensions/v1beta1 не будет отправлен на веб-хук.Equivalent: соответствие запросу, если он изменяет ресурс, перечисленный в правилах, даже через другую группу API или версию. Например, если развертывания могут быть изменены через apps/v1, apps/v1beta1 и extensions/v1beta1, а "rules" содержат только
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"], запрос на apps/v1beta1 или extensions/v1beta1 будет преобразован в apps/v1 и отправлен на веб-хук.
По умолчанию "Equivalent".
-
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector определяет, нужно ли запускать веб-хук на объекте, основываясь на том, соответствует ли пространство имен для этого объекта селектору. Если сам объект является пространством имён, соответствие выполняется по object.metadata.labels. Если объект является другим ресурсом кластера, веб-хук никогда не пропускается.
Например, чтобы запустить веб-хук на всех объектах, пространство имен которых не связано с "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), не считается соответствующим. Используйте селектор объектов только в том случае, если веб-хук является выборочным, потому что конечные пользователи могут пропустить веб-хук проверки доступа, задав метки. По умолчанию пустой LabelSelector, который соответствует всему.
-
webhooks.reinvocationPolicy (string)
reinvocationPolicy указывает, должен ли веб-хук вызываться несколько раз в рамках одного оценивания проверки доступа. Допустимые значения — "Never" и "IfNeeded".
Never: веб-хук не будет вызываться более одного раза в рамках одного оценивания проверки доступа.
IfNeeded: веб-хук будет вызываться как минимум один дополнительный раз в рамках оценивания проверки доступа, если объект, который добавляется, изменяется другими плагинами проверки доступа после первоначального вызова веб-хука. Веб-хуки, которые указывают этот параметр, ДОЛЖНЫ быть идемпотентными, способными обрабатывать объекты, которые они ранее допустили. Примечание: * количество дополнительных вызовов не гарантируется, что будет ровно один. * если дополнительные вызовы приведут к дальнейшим изменениям объекта, веб-хуки не гарантируются, что будут вызваны снова. * веб-хуки, использующие этот параметр, могут быть переупорядочены для минимизации числа дополнительных вызовов. * чтобы проверить объект после того, как все изменения будут гарантированно завершены, используйте веб-хук проверки доступа вместо этого.
По умолчанию "Never".
-
-
webhooks.rules ([]RuleWithOperations)
Атомарно: будет заменено во время слияния
Правила описывают, какие операции с какими ресурсами/подресурсами затрагивает вебхук. Вебхук учитывает операцию, если она соответствует любому правилу. Однако, чтобы предотвратить попадание кластера в состояние, из которого невозможно восстановиться без полного отключения плагина, ValidatingAdmissionWebhooks и MutatingAdmissionWebhooks никогда не вызываются для запросов на прием ValidatingWebhookConfiguration и MutatingWebhookConfiguration объектов.
RuleWithOperations — это кортеж операций и ресурсов. Рекомендуется убедиться, что все расширения кортежа допустимы.
-
webhooks.rules.apiGroups ([]string)
Атомарно: будет заменено во время слияния
API группы, к которым относятся ресурсы. '' — все группы. Если присутствует '', длина среза должна быть равна единице. Обязательно.
-
webhooks.rules.apiVersions ([]string)
Атомарно: будет заменено во время слияния
API версии, к которым относятся ресурсы. '' — все версии. Если присутствует '', длина среза должна быть равна единице. Обязательно.
-
webhooks.rules.operations ([]string)
Атомарно: будет заменено во время слияния
Операции, которые интересуют механизм приема — CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и любых будущих операций приема, которые будут добавлены. Если присутствует '*', длина среза должна быть равна единице. Обязательно.
-
webhooks.rules.resources ([]string)
Атомарно: будет заменено во время слияния
Список ресурсов, к которым применяется это правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс журнала pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '/scale' означает все подресурсы scale. '/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации гарантирует, что ресурсы не перекрывают друг друга.
В зависимости от содержащего объекта, подресурсы могут быть недоступны. Обязательно.
-
webhooks.rules.scope (string)
scope указывает область действия этого правила. Допустимые значения — "Cluster", "Namespaced" и "". "Cluster" означает, что только ресурсы уровня кластера будут соответствовать этому правилу. Объекты API пространства имён являются ресурсами уровня кластера. "Namespaced" означает, что только ресурсы пространства имён будут соответствовать этому правилу. "" означает, что ограничений по области действия нет. Подресурсы соответствуют области действия своего родительского ресурса. По умолчанию — "*".
-
-
webhooks.timeoutSeconds (int32)
TimeoutSeconds указывает время ожидания для этого вебхука. После истечения времени ожидания вызов вебхука будет проигнорирован или вызов API завершится ошибкой в соответствии с политикой обработки ошибок. Значение времени ожидания должно быть от 1 до 30 секунд. По умолчанию 10 секунд.
-
СписокMutatingWebhookConfiguration
MutatingWebhookConfigurationList — это список MutatingWebhookConfiguration.
apiVersion: admissionregistration.k8s.io/v1
kind: СписокMutatingWebhookConfiguration
-
metadata (ListMeta)
Стандартные метаданные списка. Дополнительная информация: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
items ([]MutatingWebhookConfiguration), required
Список MutatingWebhookConfiguration.
© 2024 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2024 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/extend-resources/mutating-webhook-configuration-v1/