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 — это список условий, которые должны быть выполнены для отправки запроса на этот веб-хук. Условия сопоставления фильтруют запросы, которые уже были сопоставлены правилами, селектором пространства имён и селектором объекта. Пустой список matchConditions соответствует всем запросам. Максимальное количество matchConditions — 64.
Точная логика сопоставления (по порядку):
- Если ЛЮБОЕ условие сопоставления равно FALSE, веб-хук пропускается.
- Если ВСЕ условия сопоставления равны TRUE, веб-хук вызывается.
- Если какое-либо условие сопоставления равно ошибке (но ни одно не равно FALSE):
- Если failurePolicy=Fail, запрос отклоняется
- Если failurePolicy=Ignore, ошибка игнорируется, и веб-хук пропускается
Это функция alpha и управляется шлюзом функций AdmissionWebhookMatchConditions.
MatchCondition представляет условие, которое должно быть выполнено для отправки запроса на веб-хук.
-
webhooks.matchConditions.expression (string), required
Expression представляет выражение, которое будет вычислено CEL. Должно вычисляться до булевого значения. Выражения CEL имеют доступ к содержимому AdmissionRequest и Authorizer, организованные в переменные CEL:
'object' — объект из входящего запроса. Значение равно null для запросов DELETE. 'oldObject' — существующий объект. Значение равно null для запросов CREATE. 'request' — атрибуты запроса на авторизацию (/pkg/apis/admission/types.go#AdmissionRequest). 'authorizer' — аутентификатор CEL. Может быть использован для проверки авторизации принципала (пользователя или учетной записи службы) запроса. См. 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», используемый для проверки регулярное выражение — '([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 указывает, должно ли этот 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-27.docs.kubernetes.io/docs/reference/kubernetes-api/extend-resources/mutating-webhook-configuration-v1/