×

规范

属性 类型 描述

apiVersion

字符串

APIVersion 定义了此对象表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

字符串

Kind 是一个字符串值,表示此对象表示的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。无法更新。使用驼峰式命名法。更多信息: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

数组

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

webhooks[]

对象

MutatingWebhook 描述了一个准入 Webhook 及其应用到的资源和操作。

.webhooks

描述

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

类型

数组

.webhooks[]

描述

MutatingWebhook 描述了一个准入 Webhook 及其应用到的资源和操作。

类型

对象

必需
  • 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 的条件列表。匹配条件过滤掉已经通过规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。

精确匹配逻辑(按顺序):1. 如果任何 matchCondition 计算结果为 FALSE,则跳过 Webhook。2. 如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。3. 如果任何 matchCondition 计算结果为错误(但没有为 FALSE):- 如果 failurePolicy=Fail,则拒绝请求 - 如果 failurePolicy=Ignore,则忽略错误并跳过 Webhook

matchConditions[]

对象

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:如果修改了 rules 中列出的资源,即使通过另一个 API 组或版本,也匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,并且“rules”只包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则会将对 apps/v1beta1 或 extensions/v1beta1 的请求转换为 apps/v1 并发送到 Webhook。

默认为“Equivalent”。

可能的枚举值:- "Equivalent" 表示如果请求通过另一个 API 组或版本修改了 rules 中列出的资源,则应将请求发送到 Webhook。- "Exact" 表示只有当请求与给定规则完全匹配时,才应将请求发送到 Webhook。

name

字符串

准入 Webhook 的名称。名称应为完全限定名,例如 imagepolicy.kubernetes.io,其中“imagepolicy”是 Webhook 的名称,“kubernetes.io”是组织的名称。必需。

namespaceSelector

LabelSelector

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

例如,要在命名空间未关联“runlevel”为“0”或“1”的任何对象上运行 Webhook;您将如下设置选择器:“namespaceSelector”:{“matchExpressions”:[ {“key”:“runlevel”,“operator”:“NotIn”,“values”:[“0”,“1”] } ] }

如果您只想在命名空间关联“environment”为“prod”或“staging”的任何对象上运行 Webhook;您将如下设置选择器:“namespaceSelector”:{“matchExpressions”:[ {“key”:“environment”,“operator”:“In”,“values”:[“prod”,“staging”] } ] }

有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/

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

objectSelector

LabelSelector

ObjectSelector 根据对象是否具有匹配的标签来决定是否运行 Webhook。objectSelector 会针对将发送到 Webhook 的 oldObject 和 newObject 进行评估,如果任一对象匹配选择器,则认为匹配。空对象(在创建情况下为 oldObject,在删除情况下为 newObject)或无法拥有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被认为匹配。仅当 Webhook 是选择加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空的 LabelSelector,匹配所有内容。

reinvocationPolicy

字符串

reinvocationPolicy 指示此 Webhook 是否应在单个准入评估中多次调用。允许的值为“Never”和“IfNeeded”。

Never:Webhook 在单个准入评估中不会被调用超过一次。

IfNeeded:如果在初始 Webhook 调用后,其他准入插件修改了正在接纳的对象,则 Webhook 将在准入评估中至少额外调用一次。指定此选项的 Webhook **必须** 是幂等的,能够处理它们先前接纳的对象。注意:* 额外调用的次数并非保证正好为一次。* 如果额外调用导致对对象的进一步修改,则不保证会再次调用 Webhook。* 使用此选项的 Webhook 可能会被重新排序以最大限度地减少额外调用的次数。* 要在保证所有变异完成后验证对象,请改用验证准入 Webhook。

默认为“Never”。

可能的枚举值:- "IfNeeded" 表示如果在初始 Webhook 调用后,其他准入插件修改了正在接纳的对象,则 Webhook 可能会在准入评估中至少额外调用一次。- "Never" 表示 Webhook 在单个准入评估中不得被调用超过一次。

rules

数组

Rules 描述了 Webhook 关注哪些资源/子资源上的哪些操作。如果 Webhook 匹配 *任何* Rule,则它关注该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于无法在不完全禁用插件的情况下恢复的状态,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上调用。

rules[]

对象

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

sideEffects

字符串

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

可能的枚举值:- `“None”` 表示调用 Webhook 不会产生任何副作用。- `“NoneOnDryRun”` 表示调用 Webhook 可能会有副作用,但是如果正在审核的请求具有 dry-run 属性,则副作用会被抑制。- `“Some”` 表示调用 Webhook 可能会有副作用。如果具有 dry-run 属性的请求会触发对该 Webhook 的调用,则该请求将失败。- `“Unknown”` 表示不知道调用 Webhook 的副作用。如果具有 dry-run 属性的请求会触发对该 Webhook 的调用,则该请求将失败。

timeoutSeconds

整数

TimeoutSeconds 指定此 Webhook 的超时时间。超时后,将忽略 Webhook 调用或根据失败策略使 API 调用失败。超时值必须介于 1 到 30 秒之间。默认为 10 秒。

.webhooks[].clientConfig

描述

WebhookClientConfig 包含与 Webhook 建立 TLS 连接所需的信息。

类型

对象

属性 类型 描述

caBundle

字符串

caBundle 是一个 PEM 编码的 CA 证书捆绑包,将用于验证 Webhook 的服务器证书。如果未指定,则使用 apiserver 上的系统信任根证书。

service

对象

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

url

字符串

url 提供 Webhook 的位置,采用标准 URL 格式 (scheme://host:port/path)。必须且只能指定 urlservice 中的一个。

host 不应引用在集群中运行的服务;请改用 service 字段。在某些 apiserver 中,主机可能会通过外部 DNS 解析(例如,kube-apiserver 无法解析集群内 DNS,因为那将是层次违规)。host 也可能是 IP 地址。

请注意,除非您非常小心地在所有运行可能需要调用此 Webhook 的 apiserver 的主机上运行此 Webhook,否则使用 localhost127.0.0.1 作为 host 是很危险的。此类安装可能不可移植,即不容易在新集群中启动。

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

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

不允许尝试使用用户名或基本身份验证,例如“user:password@”。片段 (“#…​”) 和查询参数 (“?…​”) 也不允许。

.webhooks[].clientConfig.service

描述

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

类型

对象

必需
  • namespace

  • name

属性 类型 描述

name

字符串

name 是服务的名称。必填

namespace

字符串

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

path

字符串

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

port

整数

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

.webhooks[].matchConditions

描述

MatchConditions 是必须满足才能将请求发送到此 Webhook 的条件列表。匹配条件过滤掉已经通过规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。

精确匹配逻辑(按顺序):1. 如果任何 matchCondition 计算结果为 FALSE,则跳过 Webhook。2. 如果所有 matchConditions 计算结果为 TRUE,则调用 Webhook。3. 如果任何 matchCondition 计算结果为错误(但没有为 FALSE):- 如果 failurePolicy=Fail,则拒绝请求 - 如果 failurePolicy=Ignore,则忽略错误并跳过 Webhook

类型

数组

.webhooks[].matchConditions[]

描述

MatchCondition 表示必须满足才能将请求发送到 Webhook 的条件。

类型

对象

必需
  • name

  • expression

属性 类型 描述

expression

字符串

Expression 表示将由 CEL 评估的表达式。必须评估为布尔值。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,这些内容被组织到 CEL 变量中。

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

必填。

name

字符串

Name 是此匹配条件的标识符,用于 MatchConditions 的策略性合并,以及提供日志记录目的的标识符。一个好的名称应该对相关的表达式进行描述。Name 必须是由字母数字字符、'-'、'_' 或 '.' 组成的限定名称,并且必须以字母数字字符开头和结尾(例如 'MyName',或 'my.name',或 '123-abc',用于验证的正则表达式为 '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]'), 可选的 DNS 子域名前缀和 '/' (例如 'example.com/MyName')

必填。

.webhooks[].rules

描述

Rules 描述了 Webhook 关注哪些资源/子资源上的哪些操作。如果 Webhook 匹配 *任何* Rule,则它关注该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于无法在不完全禁用插件的情况下恢复的状态,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上调用。

类型

数组

.webhooks[].rules[]

描述

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

类型

对象

属性 类型 描述

apiGroups

数组 (字符串)

APIGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则切片的长度必须为一。必填。

apiVersions

数组 (字符串)

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

operations

数组 (字符串)

Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及将来添加的任何其他准入操作。如果存在 '*',则切片的长度必须为一。必填。

resources

数组 (字符串)

Resources 是此规则适用的资源列表。

例如:'pods' 表示 pods。'pods/log' 表示 pods 的 log 子资源。'' 表示所有资源,但不包括子资源。'pods/' 表示 pods 的所有子资源。'/scale' 表示所有 scale 子资源。'/*' 表示所有资源及其子资源。

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

根据封闭对象的不同,可能不允许使用子资源。必填。

scope

字符串

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

API 端点

提供以下 API 端点

  • /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations

    • DELETE:删除 MutatingWebhookConfiguration 的集合

    • GET:列出或监视 MutatingWebhookConfiguration 对象

    • POST:创建 MutatingWebhookConfiguration

  • /apis/admissionregistration.k8s.io/v1/watch/mutatingwebhookconfigurations

    • GET:监视 MutatingWebhookConfiguration 列表的单个更改。已弃用:请改用列表操作中的“watch”参数。

  • /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}

    • DELETE:删除 MutatingWebhookConfiguration

    • GET:读取指定的 MutatingWebhookConfiguration

    • PATCH:部分更新指定的 MutatingWebhookConfiguration

    • PUT:替换指定的 MutatingWebhookConfiguration

  • /apis/admissionregistration.k8s.io/v1/watch/mutatingwebhookconfigurations/{name}

    • GET:监听 MutatingWebhookConfiguration 对象的更改。已弃用:请改用列表操作中的“watch”参数,并使用“fieldSelector”参数将其过滤为单个项目。

/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations

HTTP 方法

DELETE

描述

删除 MutatingWebhookConfiguration 集合

表 1. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 2. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

401 - 未授权

HTTP 方法

GET

描述

列出或监听 MutatingWebhookConfiguration 对象

表 3. HTTP 响应
HTTP 代码 响应体

200 - OK

MutatingWebhookConfigurationList 模式

401 - 未授权

HTTP 方法

POST

描述

创建一个 MutatingWebhookConfiguration

表 4. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的所有重复字段(仅保留最后一个)。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段和遇到的每个重复字段,这都将通过标准警告响应标头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 5. 请求体参数
参数 类型 描述

body

MutatingWebhookConfiguration 模式

表 6. HTTP 响应
HTTP 代码 响应体

200 - OK

MutatingWebhookConfiguration 模式

201 - 已创建

MutatingWebhookConfiguration 模式

202 - 已接受

MutatingWebhookConfiguration 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/watch/mutatingwebhookconfigurations

HTTP 方法

GET

描述

监听 MutatingWebhookConfiguration 列表的单个更改。已弃用:请改用列表操作中的“watch”参数。

表 7. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}

表 8. 全局路径参数
参数 类型 描述

name

字符串

MutatingWebhookConfiguration 的名称

HTTP 方法

DELETE

描述

删除一个 MutatingWebhookConfiguration

表 9. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 10. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

202 - 已接受

Status 模式

401 - 未授权

HTTP 方法

GET

描述

读取指定的 MutatingWebhookConfiguration

表 11. HTTP 响应
HTTP 代码 响应体

200 - OK

MutatingWebhookConfiguration 模式

401 - 未授权

HTTP 方法

PATCH

描述

部分更新指定的 MutatingWebhookConfiguration

表 12. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的所有重复字段(仅保留最后一个)。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段和遇到的每个重复字段,这都将通过标准警告响应标头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 13. HTTP 响应
HTTP 代码 响应体

200 - OK

MutatingWebhookConfiguration 模式

201 - 已创建

MutatingWebhookConfiguration 模式

401 - 未授权

HTTP 方法

PUT

描述

替换指定的 MutatingWebhookConfiguration

表 14. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何从对象中静默删除的未知字段,并将忽略解码器遇到的所有重复字段(仅保留最后一个)。这是 v1.23 之前的默认行为。- Warn:对于从对象中删除的每个未知字段和遇到的每个重复字段,这都将通过标准警告响应标头发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将使请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 15. 请求体参数
参数 类型 描述

body

MutatingWebhookConfiguration 模式

表 16. HTTP 响应
HTTP 代码 响应体

200 - OK

MutatingWebhookConfiguration 模式

201 - 已创建

MutatingWebhookConfiguration 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/watch/mutatingwebhookconfigurations/{name}

表 17. 全局路径参数
参数 类型 描述

name

字符串

MutatingWebhookConfiguration 的名称

HTTP 方法

GET

描述

监听 MutatingWebhookConfiguration 对象的更改。已弃用:请改用列表操作中的“watch”参数,并使用“fieldSelector”参数将其过滤为单个项目。

表 18. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - 未授权