apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration 描述了准入 Webhook 的配置,它可以接受或拒绝对象,并可能对其进行修改。
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata (ObjectMeta)
标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
webhooks ([]MutatingWebhook)
补丁策略:在 key name 上合并
映射:在合并期间将保留 key name 上的唯一值
Webhooks 是一个 Webhook 列表,包括受影响的资源和操作。
MutatingWebhook 描述了一个准入 Webhook 以及它所应用的资源和操作。
webhooks.admissionReviewVersions ([]string),必需
原子:将在合并期间被替换
AdmissionReviewVersions 是 Webhook 期望的首选 AdmissionReview 版本列表(按优先级排序)。API 服务器将尝试使用列表中其支持的第一个版本。如果此列表中指定的任何版本都不被 API 服务器支持,则该对象的校验将失败。如果已持久化的 Webhook 配置指定了允许的版本,但不包含 API 服务器已知的任何版本,则对 Webhook 的调用将失败,并受失效策略的影响。
webhooks.clientConfig (WebhookClientConfig),必需
ClientConfig 定义了如何与 Hook 进行通信。必需
WebhookClientConfig 包含建立与 Webhook 的 TLS 连接所需的信息
webhooks.clientConfig.caBundle ([]byte)
caBundle 是一个 PEM 编码的 CA 证书包,用于校验 Webhook 的服务器证书。如果未指定,则使用 API 服务器上的系统信任根。
webhooks.clientConfig.service (ServiceReference)
service 是对此 Webhook 服务的引用。必须指定 service 或 url 其中之一。
如果 webhook 在集群内运行,则应使用 service。
ServiceReference 引用 Service.legacy.k8s.io
webhooks.clientConfig.service.name (string),必需
name 是服务的名称。必需
webhooks.clientConfig.service.namespace (string),必需
namespace 是服务的命名空间。必需
webhooks.clientConfig.service.path (string)
path 是一个可选的 URL 路径,将随请求一起发送到该服务。
webhooks.clientConfig.service.port (int32)
如果指定,则为托管 webhook 的服务上的端口。默认值为 443,以实现向后兼容性。port 应该是一个有效的端口号(1-65535,包括 1 和 65535)。
webhooks.clientConfig.url (string)
url 给出了 Webhook 的位置,采用标准 URL 格式 (scheme://host:port/path)。必须指定 url 或 service 中的确切一个。
host 不应指向集群内运行的服务;请改用 service 字段。某些 API 服务器可能会通过外部 DNS 解析该主机(例如,kube-apiserver 无法解析集群内 DNS,因为这会违反分层原则)。host 也可以是 IP 地址。
请注意,除非你非常小心地在所有可能需要调用此 Webhook 的 API 服务器所在的主机上运行此 Webhook,否则将 localhost 或 127.0.0.1 用作 host 是有风险的。此类安装很可能不可移植,即在新的集群中难以快速部署。
scheme 必须是 "https";URL 必须以 "https://" 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。您可以使用路径将任意字符串传递给 webhook,例如,集群标识符。
尝试使用用户或基本身份验证(例如“user:password@”)是不允许的。片段(“#...”)和查询参数(“?...”)也不允许。
webhooks.name (string),必需
准入 Webhook 的名称。名称应该是完全限定的,例如 imagepolicy.kubernetes.io,其中 "imagepolicy" 是 Webhook 的名称,kubernetes.io 是组织的名称。必需。
webhooks.sideEffects (string),必需
SideEffects 指明此 Webhook 是否具有副作用。可接受的值为:None, NoneOnDryRun(通过 v1beta1 创建的 Webhook 也可能指定 Some 或 Unknown)。具有副作用的 Webhook 必须实现协调系统,因为请求可能会被准入链中的后续步骤拒绝,因此需要撤销副作用。如果请求匹配的 Webhook 的 sideEffects 为 Unknown 或 Some,则带有 dryRun 属性的请求将被自动拒绝。
可能的枚举值
"None" 表示调用 Webhook 不会有副作用。"NoneOnDryRun" 表示调用 Webhook 可能有副作用,但如果正在审查的请求带有 dry-run 属性,则副作用将被抑制。"Some" 表示调用 Webhook 可能有副作用。如果带有 dry-run 属性的请求触发了对该 Webhook 的调用,请求将失败。"Unknown" 表示关于调用 Webhook 的副作用没有任何信息。如果带有 dry-run 属性的请求触发了对该 Webhook 的调用,请求将失败。webhooks.failurePolicy (string)
FailurePolicy 定义了如何处理来自准入端点的无法识别的错误——允许的值为 Ignore 或 Fail。默认为 Fail。
可能的枚举值
"Fail" 表示调用 Webhook 时出错会导致准入失败。"Ignore" 表示忽略调用 Webhook 时发生的错误。webhooks.matchConditions ([]MatchCondition)
补丁策略:在 key name 上合并
映射:在合并期间将保留 key name 上的唯一值
MatchConditions 是发送请求给此 Webhook 必须满足的条件列表。匹配条件会过滤已经通过 rules、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。
确切的匹配逻辑是(按顺序)
MatchCondition 表示必须满足才能将请求发送到 webhook 的条件。
webhooks.matchConditions.expression (string),必需
Expression 表示将由 CEL 评估的表达式。必须评估为布尔值。CEL 表达式可以访问来自 AdmissionRequest 和 Authorizer 的内容,这些内容组织到 CEL 变量中
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。'oldObject' - 现有的对象。对于 CREATE 请求,该值为 null。'request' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - 一个 CEL 授权器。可用于为请求的主体(用户或服务账号)执行授权检查。参见 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/
必需。
webhooks.matchConditions.name (string),必需
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:仅当请求与指定规则完全匹配时才进行匹配。例如,如果 Deployment 可以通过 apps/v1, apps/v1beta1 和 extensions/v1beta1 修改,但 "rules" 仅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送给 Webhook。
Equivalent:如果请求修改了 rules 中列出的资源,即使通过其他 API 组或版本,也进行匹配。例如,如果 Deployment 可以通过 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。webhooks.namespaceSelector (LabelSelector)
NamespaceSelector 根据对象的命名空间是否匹配选择器来决定是否对对象运行 Webhook。如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。如果对象是其他集群作用域资源,则永远不会跳过 Webhook。
例如,要在命名空间不与 "runlevel" 为 "0" 或 "1" 相关联的任何对象上运行 Webhook;您可以按如下方式设置选择器:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果你只想在命名空间与 "prod" 或 "staging" 的 "environment" 关联的对象上运行 Webhook,可以按如下方式设置选择器:"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/。
默认值为空 LabelSelector,它匹配所有内容。
webhooks.objectSelector (LabelSelector)
ObjectSelector 根据对象是否具有匹配标签来决定是否运行 Webhook。objectSelector 会针对将发送给 Webhook 的 oldObject 和 newObject 进行评估,如果任一对象匹配选择器,则认为匹配。空对象(创建时的 oldObject,或删除时的 newObject)或无法拥有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 Webhook 是可选的时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,匹配所有内容。
webhooks.reinvocationPolicy (string)
reinvocationPolicy 指示在单次准入评估中是否应多次调用此 Webhook。允许的值为 "Never" 和 "IfNeeded"。
Never:在单次准入评估中,Webhook 不会被调用超过一次。
IfNeeded:如果在初始 Webhook 调用后,被准入的对象被其他准入插件修改,则该 Webhook 将在准入评估过程中至少再被调用一次。指定此选项的 Webhook 必须 是幂等的,能够处理之前已准入的对象。注意:* 不保证额外调用的次数恰好为一次。* 如果额外调用导致对象进一步修改,则不保证再次调用 Webhook。* 使用此选项的 Webhook 可能会被重新排序,以尽量减少额外调用的次数。* 要在所有变更确保完成后校验对象,请改用校验准入 Webhook。
默认为 "Never"。
可能的枚举值
"IfNeeded" 表示如果在初始变更调用后,被准入的对象被其他准入插件修改,变更 Webhook 可能在准入评估过程中至少再被调用一次。"Never" 表示变更 Webhook 不得在单次准入评估中调用超过一次。webhooks.rules ([]RuleWithOperations)
原子:将在合并期间被替换
Rules 描述了 Webhook 关心哪些资源/子资源上的哪些操作。如果操作匹配 任何 规则,则 Webhook 关心该操作。然而,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于在不完全禁用插件的情况下无法恢复的状态,在对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求中,永远不会调用 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks。
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' 表示 Pod。'pods/log' 表示 Pod 的 log 子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 Pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据包含对象,可能不允许子资源。必需。
webhooks.rules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群范围的资源才会匹配此规则。Namespace API 对象属于集群范围。"Namespaced" 表示只有命名空间范围的资源才会匹配此规则。"*" 表示没有范围限制。子资源匹配其父资源的范围。默认为 "*"。
可能的枚举值
"*" 表示包含所有作用域。"Cluster" 表示作用域仅限于集群作用域的对象。Namespace 对象属于集群作用域。"Namespaced" 表示作用域仅限于命名空间作用域的对象。webhooks.timeoutSeconds (int32)
TimeoutSeconds 指定此 Webhook 的超时时间。超时后,Webhook 调用将被忽略,或者 API 调用将根据失效策略失败。超时值必须在 1 到 30 秒之间。默认为 10 秒。
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),必需
MutatingWebhookConfiguration 的列表。
get 读取指定的 MutatingWebhookConfigurationGET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
pretty (在查询中): string
200 (MutatingWebhookConfiguration): OK
401: 未授权
list 列出或监视 MutatingWebhookConfiguration 类型的对象GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (在查询中): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
200 (MutatingWebhookConfigurationList): OK
401: 未授权
create 创建 MutatingWebhookConfigurationPOST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
body: MutatingWebhookConfiguration,必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
202 (MutatingWebhookConfiguration): 已接受
401: 未授权
update 替换指定的 MutatingWebhookConfigurationPUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
body: MutatingWebhookConfiguration,必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
401: 未授权
patch 部分更新指定的 MutatingWebhookConfigurationPATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
401: 未授权
delete 删除 MutatingWebhookConfigurationDELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (在查询中): string
propagationPolicy (in query): string
200 (Status): 确定
202 (Status): 已接受
401: 未授权
deletecollection 删除 MutatingWebhookConfiguration 集合DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
body: DeleteOptions
continue (in query): string
dryRun (在查询中): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
labelSelector (in query): string
limit (in query): integer
pretty (在查询中): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
200 (Status): 确定
401: 未授权
本页面是自动生成的。
如果您打算报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。