MutatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
MutatingWebhookConfiguration 描述了准入 Webhook 的配置,该 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)
补丁策略:在键
name
上合并映射:在合并期间将保留键 name 上的唯一值
Webhooks 是 Webhook 列表以及受影响的资源和操作。
MutatingWebhook 描述一个准入 Webhook 及其应用的资源和操作。
webhooks.admissionReviewVersions ([]string),必需
原子操作:将在合并期间被替换
AdmissionReviewVersions 是 Webhook 期望的
AdmissionReview
首选版本排序列表。 API 服务器将尝试使用它支持的列表中第一个版本。如果 API 服务器不支持此列表中指定的任何版本,则此对象的验证将失败。如果持久化的 Webhook 配置指定了允许的版本,但不包括 API 服务器已知的任何版本,则对 Webhook 的调用将失败,并受失败策略的约束。webhooks.clientConfig (WebhookClientConfig),必需
ClientConfig 定义如何与 Webhook 通信。必需
WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息
webhooks.clientConfig.caBundle ([]byte)
caBundle
是 PEM 编码的 CA 包,将用于验证 Webhook 的服务器证书。如果未指定,则使用 apiserver 上的系统信任根。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
以标准 URL 格式(scheme://host:port/path
)给出 Webhook 的位置。必须指定url
或service
中的一个。host
不应引用集群中运行的服务;请改用service
字段。主机可能会通过一些 apiserver 中的外部 DNS 解析(例如,kube-apiserver
无法解析集群内 DNS,因为这会违反分层)。host
也可能是 IP 地址。请注意,除非您非常小心地在所有运行可能需要调用此 Webhook 的 apiserver 的主机上运行此 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 必须实现协调系统,因为请求可能会被准入链中的后续步骤拒绝,因此需要撤消副作用。如果具有 dryRun 属性的请求与 sideEffects == Unknown 或 Some 的 Webhook 匹配,则会自动拒绝该请求。
webhooks.failurePolicy (string)
FailurePolicy 定义如何处理来自准入端点的无法识别的错误 - 允许的值为 Ignore 或 Fail。默认为 Fail。
webhooks.matchConditions ([]MatchCondition)
补丁策略:在键
name
上合并映射:在合并期间将保留键 name 上的唯一值
MatchConditions 是必须满足的条件列表,才能将请求发送到此 Webhook。匹配条件会过滤已通过规则、namespaceSelector 和 objectSelector 匹配的请求。空匹配条件列表匹配所有请求。最多允许 64 个匹配条件。
确切的匹配逻辑是(按顺序):
- 如果任何 matchCondition 的计算结果为 FALSE,则会跳过 Webhook。
- 如果所有 matchCondition 的计算结果都为 TRUE,则会调用 Webhook。
- 如果任何 matchCondition 的计算结果为错误(但没有一个是 FALSE):
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则忽略该错误并跳过 Webhook
MatchCondition 表示将请求发送到 Webhook 必须满足的条件。
webhooks.matchConditions.expression (string),必需
Expression 表示将由 CEL 计算的表达式。必须计算为 bool。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,并组织为 CEL 变量
“object” - 来自传入请求的对象。对于 DELETE 请求,该值为空。“oldObject” - 现有对象。对于 CREATE 请求,该值为空。“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.top/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:仅当请求与指定的规则完全匹配时才匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但“rules”仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则不会将对 apps/v1beta1 或 extensions/v1beta1 的请求发送到 Webhook。等效:如果请求修改了规则中列出的资源,即使是通过另一个 API 组或版本,也会匹配该请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,而 "rules" 仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为 "Equivalent"
webhooks.namespaceSelector (标签选择器)
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.top/docs/concepts/overview/working-with-objects/labels/。
默认为空 LabelSelector,它匹配所有内容。
webhooks.objectSelector (标签选择器)
ObjectSelector 决定是否基于对象是否具有匹配的标签来运行 Webhook。objectSelector 会针对将要发送到 Webhook 的 oldObject 和 newObject 进行评估,如果任何一个对象匹配选择器,则认为匹配。空对象(创建时的 oldObject 或删除时的 newObject)或不能拥有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 Webhook 是可选时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它匹配所有内容。
webhooks.reinvocationPolicy (字符串)
reinvocationPolicy 指示是否应在单个准入评估中多次调用此 Webhook。允许的值为 "Never" 和 "IfNeeded"。
Never:在单个准入评估中,Webhook 将不会被多次调用。
IfNeeded:如果被准入的对象在初始 Webhook 调用之后被其他准入插件修改,则作为准入评估的一部分,Webhook 将至少被额外调用一次。指定此选项的 Webhook *必须* 是幂等的,能够处理它们之前准入的对象。注意:* 不保证额外调用的次数正好是一次。* 如果额外的调用导致对对象的进一步修改,则不保证再次调用 Webhook。* 使用此选项的 Webhook 可能会被重新排序,以最大限度地减少额外的调用次数。* 要在保证所有更改都完成后验证对象,请改用验证准入 Webhook。
默认为 "Never"。
webhooks.rules ([]RuleWithOperations)
原子操作:将在合并期间被替换
Rules 描述了 Webhook 关心哪些资源/子资源上的哪些操作。如果操作匹配*任何* Rule,则 Webhook 关心该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于无法在不完全禁用插件的情况下恢复的状态,永远不会在 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上调用 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks。
RuleWithOperations 是 Operations 和 Resources 的元组。建议确保所有元组扩展都是有效的。
webhooks.rules.apiGroups ([]string)
原子操作:将在合并期间被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
webhooks.rules.apiVersions ([]string)
原子操作:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
webhooks.rules.operations ([]string)
原子操作:将在合并期间被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 代表所有这些操作和任何未来添加的准入操作。如果存在 '*',则切片的长度必须为 1。必需。
webhooks.rules.resources ([]string)
原子操作:将在合并期间被替换
Resources 是此规则应用到的资源列表。
例如:'pods' 表示 pods。'pods/log' 表示 pods 的 log 子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 pods 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源彼此不重叠。
根据封闭对象,可能不允许使用子资源。必需。
webhooks.rules.scope (字符串)
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), 必需
MutatingWebhookConfiguration 的列表。
操作
get
读取指定的 MutatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (在路径中): 字符串, 必需
MutatingWebhookConfiguration 的名称
pretty (在查询中): 字符串
响应
200 (MutatingWebhookConfiguration): OK
401: 未授权
list
列出或监视 MutatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
allowWatchBookmarks (在查询中): 布尔值
continue (在查询中): 字符串
fieldSelector (在查询中): 字符串
labelSelector (在查询中): 字符串
limit (在查询中): 整数
pretty (在查询中): 字符串
resourceVersion (在查询中): 字符串
resourceVersionMatch (在查询中): 字符串
sendInitialEvents (在查询中): 布尔值
timeoutSeconds (在查询中): 整数
watch (在查询中): 布尔值
响应
200 (MutatingWebhookConfigurationList): OK
401: 未授权
create
创建一个 MutatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
body: MutatingWebhookConfiguration, 必需
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
pretty (在查询中): 字符串
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
202 (MutatingWebhookConfiguration): 已接受
401: 未授权
update
替换指定的 MutatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (在路径中): 字符串, 必需
MutatingWebhookConfiguration 的名称
body: MutatingWebhookConfiguration, 必需
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
pretty (在查询中): 字符串
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
401: 未授权
patch
部分更新指定的 MutatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (在路径中): 字符串, 必需
MutatingWebhookConfiguration 的名称
body: Patch, 必需
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
force (在查询中): 布尔值
pretty (在查询中): 字符串
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): 已创建
401: 未授权
delete
删除一个 MutatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (在路径中): 字符串, 必需
MutatingWebhookConfiguration 的名称
body: DeleteOptions
dryRun (在查询中): 字符串
gracePeriodSeconds (在查询中): 整数
pretty (在查询中): 字符串
propagationPolicy (在查询中): 字符串
响应
200 (Status): OK
202 (Status): 已接受
401: 未授权
deletecollection
删除 MutatingWebhookConfiguration 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
body: DeleteOptions
continue (在查询中): 字符串
dryRun (在查询中): 字符串
fieldSelector (在查询中): 字符串
gracePeriodSeconds (在查询中): 整数
labelSelector (在查询中): 字符串
limit (在查询中): 整数
pretty (在查询中): 字符串
propagationPolicy (在查询中): 字符串
resourceVersion (在查询中): 字符串
resourceVersionMatch (在查询中): 字符串
sendInitialEvents (在查询中): 布尔值
timeoutSeconds (在查询中): 整数
响应
200 (Status): OK
401: 未授权
此页面是自动生成的。
如果您计划报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。