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)
Стратегия патчинга: слияние по ключу
nameWebhooks — это список веб-хуков и затронутых ресурсов и операций.
MutatingWebhook описывает веб-хук для изменения и ресурсы и операции, к которым он применяется.
-
webhooks.admissionReviewVersions ([]string), required
AdmissionReviewVersions — упорядоченный список предпочтительных
AdmissionReviewверсий, которые ожидает веб-хук. Сервер API попытается использовать первую версию в списке, которую он поддерживает. Если ни одна из версий, указанных в этом списке, не поддерживается сервером API, проверка этого объекта завершится ошибкой. Если в конфигурации сохраненного веб-хука указаны разрешенные версии, а ни одна из них не известна серверу API, вызовы веб-хука завершатся ошибкой и будут обрабатываться в соответствии с политикой обработки ошибок. -
webhooks.clientConfig (WebhookClientConfig), required
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), 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 в некоторых серверах API (например,kube-apiserverне может разрешать внутрикластерный DNS, так как это будет нарушение слоёв).hostтакже может быть IP-адресом.Обратите внимание, что использование
localhostили127.0.0.1в качествеhostрискованно, если вы не позаботитесь о запуске этого веб-хука на всех узлах, на которых работает сервер API, которому может потребоваться сделать вызовы этому веб-хуку. Такие установки, вероятно, не будут переносимыми, т. е. не будут легко развертываться в новом кластере.Схема должна быть "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 — список условий, которые должны быть выполнены для отправки запроса на этот веб-хук. Условия сопоставления отфильтровывают запросы, которые уже были сопоставлены правилами, namespaceSelector и objectSelector. Пустой список matchConditions соответствует всем запросам. Разрешено не более 64 условий сопоставления.
Точная логика сопоставления (в порядке):
- Если ЛЮБОЕ условие сопоставления оценивается как FALSE, веб-хук пропускается.
- Если ВСЕ условия сопоставления оцениваются как TRUE, веб-хук вызывается.
- Если какое-либо условие сопоставления оценивается как ошибка (но ни одно не равно FALSE):
- Если failurePolicy=Fail, отклоните запрос
- Если failurePolicy=Ignore, ошибка игнорируется, и веб-хук пропускается
Это бета-функция, управляемая шлюзом AdmissionWebhookMatchConditions.
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 определяет, следует ли запускать веб-хук на объекте в зависимости от того, соответствует ли пространство имен этого объекта селектору. Если сам объект является пространством имен, сопоставление выполняется с метками объекта.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, которые будут отправлены в веб-хук, и считается, что соответствует, если любой из объектов соответствует селектору. Объект null (oldObject в случае создания или newObject в случае удаления) или объект, который не может иметь метки (например, DeploymentRollback или PodProxyOptions), не считается соответствующим. Используйте селектор объекта только в том случае, если веб-хук является добровольным, поскольку конечные пользователи могут пропустить веб-хук для проверки доступа, задав метки. По умолчанию пустой LabelSelector, который соответствует всему.
-
-
webhooks.reinvocationPolicy (string)
reinvocationPolicy указывает, должно ли этот webhook вызываться несколько раз в рамках одной оценки принятия. Допустимые значения — «Never» и «IfNeeded».
Never: webhook не будет вызываться более одного раза в рамках одной оценки принятия.
IfNeeded: webhook будет вызываться как минимум один дополнительный раз в рамках оценки принятия, если объект, принимаемый к исполнению, изменяется другими плагинами принятия после первоначального вызова webhook. Webhook, указывающий этот параметр, должен быть идемпотентным, способным обрабатывать объекты, которые он ранее принял. Примечание: * количество дополнительных вызовов не гарантируется, что будет ровно одно. * если дополнительные вызовы приводят к дальнейшим изменениям объекта, webhooks не гарантируется, что будут вызваны снова. * webhooks, использующие этот параметр, могут быть переупорядочены для минимизации количества дополнительных вызовов. * для проверки объекта после того, как все изменения гарантированы, используйте validating admission webhook вместо этого.
По умолчанию «Never».
-
webhooks.rules ([]RuleWithOperations)
Rules описывает, какие операции с какими ресурсами/подресурсами интересуют webhook. Webhook интересуется операцией, если она соответствует любой Rule. Однако, чтобы предотвратить ValidatingAdmissionWebhooks и MutatingAdmissionWebhooks от введения кластера в состояние, из которого нельзя восстановиться без полного отключения плагина, ValidatingAdmissionWebhooks и MutatingAdmissionWebhooks никогда не вызываются при запросах принятия для объектов ValidatingWebhookConfiguration и MutatingWebhookConfiguration.
RuleWithOperations — это кортеж из Operations и Resources. Рекомендуется убедиться, что все расширения кортежа допустимы.
-
webhooks.rules.apiGroups ([]string)
Атомарно: будет заменено во время слияния
APIGroups — это группы API, к которым относятся ресурсы. '' — все группы. Если присутствует '', длина среза должна быть равна одному. Требуется.
-
webhooks.rules.apiVersions ([]string)
Атомарно: будет заменено во время слияния
APIVersions — это API-версии, к которым относятся ресурсы. '' — все версии. Если присутствует '', длина среза должна быть равна одному. Требуется.
-
webhooks.rules.operations ([]string)
Атомарно: будет заменено во время слияния
Operations — это операции, которые интересуют приемный хук: CREATE, UPDATE, DELETE, CONNECT или * для всех этих операций и для любых будущих операций принятия, которые будут добавлены. Если присутствует '*', длина среза должна быть равна одному. Требуется.
-
webhooks.rules.resources ([]string)
Атомарно: будет заменено во время слияния
Resources — это список ресурсов, к которым относится это правило.
Например: 'pods' означает pods. 'pods/log' означает подресурс log для pods. '' означает все ресурсы, но не подресурсы. 'pods/' означает все подресурсы pods. '/scale' означает все подресурсы scale. '/*' означает все ресурсы и их подресурсы.
Если присутствует символ подстановки, правило валидации гарантирует, что ресурсы не перекрываются друг с другом.
В зависимости от окружающего объекта, подресурсы могут быть недоступны. Требуется.
-
webhooks.rules.scope (string)
scope определяет область действия этого правила. Допустимые значения — «Cluster», «Namespaced» и «». «Cluster» означает, что этому правилу будут соответствовать только ресурсы кластерного уровня. Объекты API пространства имён являются ресурсами кластерного уровня. «Namespaced» означает, что этому правилу будут соответствовать только ресурсы в пространстве имён. «» означает, что ограничений по области действия нет. Подресурсы соответствуют области действия родительского ресурса. По умолчанию «*».
-
-
webhooks.timeoutSeconds (int32)
TimeoutSeconds задает тайм-аут для этого webhook. После истечения тайм-аута вызов webhook будет проигнорирован или вызов 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), required
Список MutatingWebhookConfiguration.
© 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2022 The Linux Foundation ®. All rights reserved.
https://v1-28.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/mutating-webhook-configuration-v1/