第 4 章 MutatingWebhookConfiguration [admissionregistration.k8s.io/v1]


描述
MutatingWebhookConfiguration 描述了接受或拒绝并更改对象的和准入 Webhook 的配置。
类型
对象

4.1. 规格

属性类型描述

apiVersion

字符串

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: 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

ObjectMeta

标准对象元数据;更多信息 :https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。

webhooks

array

Webhook 是 Webhook 以及受影响的资源和操作的列表。

webhooks[]

对象

mutatingwebhook 描述了准入 Webhook 以及它应用到的资源和操作。

4.1.1. .webhooks

描述
Webhook 是 Webhook 以及受影响的资源和操作的列表。
类型
array

4.1.2. .webhooks[]

描述
mutatingwebhook 描述了准入 Webhook 以及它应用到的资源和操作。
类型
object
必填
  • name
  • clientConfig
  • sideEffects
  • admissionReviewVersions
属性类型描述

admissionReviewVersions

数组(字符串)

admissionReviewVersions 是 Webhook 期望的首选 AdmissionReview 版本的顺序列表。API 服务器将尝试使用支持列表中的第一个版本。如果 API 服务器支持此列表中没有指定的版本,则此对象的验证会失败。如果持久的 webhook 配置指定了允许的版本,且不包含任何 API 服务器已知的版本,则对 Webhook 的调用将失败,并受失败策略的影响。

clientConfig

对象

WebhookClientConfig 包含与 webhook 进行 TLS 连接的信息

failurePolicy

字符串

failurePolicy 定义如何处理准入端点中未识别的错误 - 允许的值是 Ignore 或 Fail。默认为 Fail。

可能枚举值: - "Fail" 表示调用 Webhook 的错误会导致准入失败。- "Ignore" 表示调用 Webhook 的错误会被忽略。

matchConditions

数组

MatchConditions 是发送到此 webhook 的请求必须满足的条件列表。匹配条件过滤请求,它们已与 rules、namespaceSelector 和 objectSelector 匹配。空 matchConditions 列表与所有请求匹配。允许最多有 64 个匹配条件。

完全匹配逻辑为(按顺序):1。如果 ANY matchCondition 评估为 FALSE,则会跳过 Webhook。2.如果 ALL matchConditions 评估为 TRUE,则会调用 Webhook。3.如果任何 matchCondition 评估为错误(但没有是 FALSE):- 如果 failurePolicy=Fail,拒绝请求 - If failurePolicy=Ignore,则忽略错误,并跳过 Webhook

这是一个 beta 功能,由 AdmissionWebhookMatchConditions 功能门管理。

matchConditions[]

object

MatchCondition 代表一个条件,需要满足该条件才能将请求发送到 webhook。

matchPolicy

字符串

matchPolicy 定义如何使用 "rules" 列表来匹配传入的请求。允许的值是 "Exact" 或 "Equivalent"。

- exact :仅在与指定规则完全匹配时才匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但 "rules" 仅包含 apiGroups:["apps"], apiVersions:["v1"],resources: ["deployments"],对 apps/v1beta1 或 extensions/v1beta1 的请求不会发送到 webhook。

- equivalent :如果修改规则中列出的资源,即使通过另一个 API 组或版本来匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 和 "rules" 修改部署,则只有 apiGroups:["apps"], apiVersions:["v1"],resources: ["deployments"],请求 apps/v1beta1 或 extensions/v1beta1 将转换为 apps/v1beta1,并发送到 webhook。

默认为 "Equivalent"

可能枚举值:- "Equivalent" 表示如果请求通过另一个 API 组或版本修改规则中列出的资源,则应只将请求发送到 webhook。

名称

字符串

准入 Webhook 的名称。名称应该是完全限定的,如 imagepolicy.kubernetes.io,其中 "imagepolicy" 是 webhook 的名称,kubernetes.io 是机构的名称。必需。

namespaceSelector

LabelSelector

namespaceSelector 决定是否根据该对象的命名空间与选择器匹配而在对象上运行 Webhook。如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。如果对象是另一个集群范围的资源,则永远不会跳过 Webhook。

例如,要在命名空间没有与 "0" 或 "1" 的 "runlevel" 关联的对象上运行 webhook;您将设置选择器,如下所示: "namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }

如果您希望仅在任何命名空间与 "prod" 或 "staging" 关联的对象上运行 webhook;您将按如下方式设置选择器: "namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }

有关标签选择器的更多信息,请参阅 https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

默认为空 LabelSelector,它将匹配所有内容。

objectSelector

LabelSelector

objectSelector 决定是否根据对象是否匹配标签运行 webhook。将针对要发送到 webhook 的 oldObject 和 newObject 评估 objectSelector,并在其中一个对象与选择器匹配时被视为匹配。一个 null 对象(如果是 create, 或 newObject in the delete 时),或没有标签(如 DeploymentRollback 或 PodProxyOptions 对象)的对象不会被认为匹配。只有在 webhook 是 opt-in 时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它将匹配所有内容。

reinvocationPolicy

字符串

reinvocationPolicy 表示此 webhook 是否应该多次作为单个准入评估的一部分调用。允许的值是 "Never" 和 "IfNeeded"。

Never:在单个准入评估中不会多次调用 Webhook。

IfNeeded :如果对象在初始 webhook 调用后被其他准入插件修改,则 webhook 将至少被称为一个额外的时间作为准入评估的一部分。指定此选项的 Webhook 必须 是幂等的,能够处理之前接受的对象。注: 无法保证额外的调用数量完全匹配。* 如果额外的调用会对对象进行进一步修改,无法保证再次调用 Webhook。* 使用此选项的 Webhook 可以重新排序,以最小化额外调用的数量。* 要在所有变异完成后验证对象,请使用验证准入 Webhook。

默认为 "Never"。

可能枚举值:- "IfNeeded" 表示如果初始 webhook 调用后,webhook 可能至少被称为准入评估的一部分,而其他准入插件会修改被其他准入插件修改。- "Never" 表示,在单一准入评估中,webhook 不能多次被调用。

rules

array

规则描述了 webhook 对资源/子资源执行的操作。如果 webhook 匹配任何 规则,则 webhook 会小心操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于状态,在没有完全禁用插件的情况下,无法完全禁用插件,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 不会对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求调用。

rules[]

对象

RuleWithOperations 是 Operations 和 Resources 的元组。建议确保所有元组扩展都有效。

sideEffects

字符串

SideEffects 说明此 webhook 是否有副作用。可接受值为: None, NoneOnDryRun (通过 v1beta1 创建的webhook 也可能会指定 some 或 Unknown)。具有副作用的 Webhook 必须实施协调系统,因为准入链中的未来步骤可能会拒绝请求,因此需要撤销副作用。如果带有 dryRun 属性的请求与带有 sideEffects == Unknown 或 some 的 webhook 匹配,则会自动拒绝请求。

可能枚举值: - "None" 表示调用 Webhook 将没有副作用。- "NoneOnDryRun" 表示调用 Webhook 可能具有副作用,但如果检查的请求具有 dry-run 属性,则侧效果将会被禁止。"Some" 表示调用 Webhook 可能具有副作用。如果具有 dry-run 属性的请求会触发对此 webhook 的调用,则请求将失败。- "Unknown" 表示没有已知调用 webhook 的副作用的信息。如果具有 dry-run 属性的请求会触发对此 webhook 的调用,则请求将失败。

timeoutSeconds

整数

timeoutSeconds 指定此 webhook 的超时时间。在超时通过后,webhook 调用将被忽略,或者 API 调用将根据失败策略失败。超时值必须在 1 到 30 秒之间。默认值为 10 秒。

4.1.3. .webhooks[].clientConfig

描述
WebhookClientConfig 包含与 webhook 进行 TLS 连接的信息
类型
object
属性类型描述

caBundle

字符串

cabundle 是 PEM 编码的 CA 捆绑包,它将用于验证 webhook 的服务器证书。如果未指定,则使用 apiserver 上的系统信任 root。

service

对象

ServiceReference 包含对 Service.legacy.k8s.io 的引用

url

字符串

URL 以标准 URL 格式提供 webhook 的位置(scheme://host:port/path)。必须指定 url 或服务 中的一个。

主机 不应引用集群中运行的服务;使用 service 字段。在一些 apiservers 中,主机可以通过外部 DNS 解析(例如,kube-apiserver 无法解析集群内部 DNS,因为这将是一个分层违反情况)。主机 也可以是 IP 地址。

请注意,使用 localhost127.0.0.1 作为主机有风险,除非您特别注意在运行 apiserver 的主机上运行此 webhook,这可能需要对此 webhook 发出调用。此类安装可能不可移植,即无法在新集群中启动。

方案必须是 "https";URL 必须以 "https://" 开头。

路径是可选的,如果存在可以是 URL 中允许的字符串。您可以使用路径将任意字符串传递给 webhook,例如集群标识符。

不允许使用用户或基本身份验证,如 "user:password@"。不允许 slices ("""…​")和查询参数("?…​")。

4.1.4. .webhooks[].clientConfig.service

描述
ServiceReference 包含对 Service.legacy.k8s.io 的引用
类型
object
必填
  • namespace
  • name
属性类型描述

name

字符串

name 是服务的名称。必填

namespace

字符串

namespace 是服务的命名空间。必填

path

字符串

path 是一个可选的 URL 路径,将在此服务的任何请求中发送。

port

整数

如果指定,托管 Webhook 的服务上的端口。默认为 443,以便向后兼容。port 应该是有效的端口号(1-65535,含)。

4.1.5. .webhooks[].matchConditions

描述

MatchConditions 是发送到此 webhook 的请求必须满足的条件列表。匹配条件过滤请求,它们已与 rules、namespaceSelector 和 objectSelector 匹配。空 matchConditions 列表与所有请求匹配。允许最多有 64 个匹配条件。

完全匹配逻辑为(按顺序):1。如果 ANY matchCondition 评估为 FALSE,则会跳过 Webhook。2.如果 ALL matchConditions 评估为 TRUE,则会调用 Webhook。3.如果任何 matchCondition 评估为错误(但没有是 FALSE):- 如果 failurePolicy=Fail,拒绝请求 - If failurePolicy=Ignore,则忽略错误,并跳过 Webhook

这是一个 beta 功能,由 AdmissionWebhookMatchConditions 功能门管理。

类型
数组

4.1.6. .webhooks[].matchConditions[]

描述
MatchCondition 代表一个条件,需要满足该条件才能将请求发送到 webhook。
类型
object
必填
  • 名称
  • expression
属性类型描述

expression

string

expression 代表将由 CEL 评估的表达式。必须评估 bool。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,并组织成 CEL 变量:

'object' - 来自传入请求的对象。对于 DELETE 请求,值为 null。'oldObject' - 现有对象。CREATE 请求的值是 null。'request' - 准入请求的属性(/pkg/apis/admission/types.go:AdmissionRequest)'authorizer' - A CEL Authorizer。可用于对请求的主体(用户或服务帐户)执行授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' - 从 'authorizer' 构建并使用请求资源配置的 CEL ResourceCheck。有关 CEL 的文档 :https://kubernetes.io/docs/reference/using-api/cel/

必需。

名称

string

name 是此匹配条件的标识符,用于战略合并 MatchConditions,并提供用于日志记录目的的标识符。相关表达式的描述性应为一个好名称。name 必须是包括字母数字字符、'-'、'' 或 '.' 的合格名称,且必须以字母数字字符开头和结尾(例如。'MyName', 或 'my.name', 或 '123-abc', 用于验证的 regex 为 '([A-Za-z0-9][-A-Za-z0-9.]*)?[A-Za-z0-9]'),带有可选的 DNS 子域前缀和 '/'(如 'example.com/MyName')

必需。

4.1.7. .webhooks[].rules

描述
规则描述了 webhook 对资源/子资源执行的操作。如果 webhook 匹配任何 规则,则 webhook 会小心操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于状态,在没有完全禁用插件的情况下,无法完全禁用插件,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 不会对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求调用。
类型
array

4.1.8. .webhooks[].rules[]

描述
RuleWithOperations 是 Operations 和 Resources 的元组。建议确保所有元组扩展都有效。
类型
object
属性类型描述

apiGroups

数组(字符串)

apiGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则片段的长度必须是一。必需。

apiVersions

数组(字符串)

APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则片段的长度必须是一。必需。

操作

数组(字符串)

操作是准入 hook 为所有操作以及添加的任何准入操作( CREATE、UPDATE、DELETE、CONNECT 或 *)的操作。如果 '*' 存在,则片段的长度必须是一。必需。

资源

数组(字符串)

resources 是一组这个规则应用到的资源列表。

例如: 'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。' ' 表示所有资源,但不是子资源。'pods/' 表示所有 pod 子资源。'/scale' 表示所有 scale 子资源。'Suffix' 表示所有资源及其子资源。

如果存在通配符,验证规则将确保资源不会相互重叠。

根据封闭对象,可能无法允许子资源。必需。

scope

字符串

scope 指定此规则的范围。有效值为 "Cluster", "Namespaced", 和 "" "Cluster" 表示只有集群范围的资源与此规则匹配。命名空间 API 对象是集群范围的。"namespaced" 表示只有命名空间的资源将与此规则匹配。"" 表示没有范围限制。子资源与其父资源的范围匹配。默认为 "*"。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.