MutatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
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), required
原子:将在合并期间被替换
AdmissionReviewVersions 是 webhook 期望的
AdmissionReview版本的有序列表。API 服务器将尝试使用列表中它支持的第一个版本。如果 API 服务器不支持列表中指定的任何版本,则此对象的验证将失败。如果持久化的 webhook 配置指定了允许的版本,并且不包含 API 服务器所知的任何版本,则对 webhook 的调用将失败并受到失败策略的影响。webhooks.clientConfig (WebhookClientConfig), required
ClientConfig 定义了与 hook 通信的方式。必需
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), required
name是服务的名称。必需webhooks.clientConfig.service.namespace (string), required
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字段。host可能会通过外部 DNS 解析,在某些 apiserver 中(例如,kube-apiserver无法解析集群内 DNS,因为这违反了分层)。host也可能是 IP 地址。请注意,除非您非常小心地将此 webhook 运行在可能需要调用此 webhook 的所有主机上,否则使用
localhost或127.0.0.1作为host存在风险。此类安装可能不易移植,即不易在新集群中启动。scheme 必须是 "https";URL 必须以 "https://" 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。您可以使用路径将任意字符串传递给 webhook,例如,集群标识符。
尝试使用用户或基本身份验证(例如“user:password@”)是不允许的。片段(“#...”)和查询参数(“?...”)也不允许。
webhooks.name (string), required
准入 webhook 的名称。名称应完全限定,例如 imagepolicy.kubernetes.io,其中“imagepolicy”是 webhook 的名称,kubernetes.io 是组织的名称。必需。
webhooks.sideEffects (string), required
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 的调用,则请求将改为失败。
webhooks.failurePolicy (string)
FailurePolicy 定义了如何处理来自准入端点的未识别错误 - 允许的值为 Ignore 或 Fail。默认值为 Fail。
可能的枚举值
"Fail"表示调用 webhook 发生错误会导致准入失败。"Ignore"表示调用 webhook 发生错误会被忽略。
webhooks.matchConditions ([]MatchCondition)
补丁策略:在 key
name上合并映射:在合并期间将保留 key name 上的唯一值
MatchConditions 是一个条件列表,必须满足这些条件才能将请求发送到此 webhook。匹配条件过滤掉已经由规则、namespaceSelector 和 objectSelector 匹配的请求。空列表的 matchConditions 匹配所有请求。允许的最大匹配条件数量为 64。
确切的匹配逻辑是(按顺序)
- 如果任何 matchCondition 评估为 FALSE,则跳过 webhook。
- 如果所有 matchCondition 评估为 TRUE,则调用 webhook。
- 如果任何 matchCondition 评估为错误(但没有一个是 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则忽略错误并跳过 webhook
MatchCondition 表示必须满足才能将请求发送到 webhook 的条件。
webhooks.matchConditions.expression (string), required
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 文档:https://kubernetes.ac.cn/docs/reference/using-api/cel/
必需。
webhooks.matchConditions.name (string), required
Name 是此匹配条件的标识符,用于匹配条件的策略合并,以及为日志记录目的提供标识符。一个好的名称应该描述相关的表达式。名称必须是一个合格的名称,由字母数字字符、'-'、'' 或 '.' 组成,并且必须以字母数字字符开头和结尾(例如 '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。Equivalent:即使通过另一个 API 组或版本修改了规则中列出的资源,也匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但“rules”仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 webhook。
默认值为“Equivalent”
可能的枚举值
"Equivalent"表示如果请求修改了规则中列出的资源,则应将请求发送到 webhook,即使是通过另一个 API 组或版本。"Exact"表示仅当请求完全匹配给定的规则时,才应将请求发送到 webhook。
webhooks.namespaceSelector (LabelSelector)
NamespaceSelector 决定是否根据对象的命名空间是否与选择器匹配来运行 webhook。如果对象本身是一个命名空间,则匹配在 object.metadata.labels 上执行。如果对象是另一个集群范围的资源,则永远不会跳过 webhook。
例如,要运行 webhook,针对任何不与“runlevel”关联为“0”或“1”的对象的命名空间;您将按如下方式设置选择器:“namespaceSelector”:{“matchExpressions”:[{“key”:“runlevel”,“operator”:“NotIn”,“values”:[“0”,“1”]}]}
如果您只想运行 webhook,针对与“environment”关联为“prod”或“staging”的任何对象的命名空间;您将按如下方式设置选择器:“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 进行评估,如果任一对象匹配选择器,则认为匹配。空对象(CREATE 案例中的 oldObject,或 DELETE 案例中的 newObject)或无法具有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被认为匹配。仅当 webhook 是选择加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。默认值为空 LabelSelector,它匹配所有内容。
webhooks.reinvocationPolicy (string)
reinvocationPolicy 指示此 webhook 是否应作为单个准入评估的一部分多次调用。允许的值为“Never”和“IfNeeded”。
Never:webhook 在单个准入评估中不会被调用超过一次。
IfNeeded:如果被准入的对象在初始 webhook 调用后被其他准入插件修改,webhook 将作为准入评估的一部分至少被调用一次。指定此选项的 webhook 必须是幂等的,能够处理先前已准入的对象。注意:* 额外调用的次数不保证正好为一次。* 如果额外的调用导致对对象的进一步修改,则不保证再次调用 webhook。* 使用此选项的 webhook 可能会被重新排序,以尽量减少额外调用的次数。* 要在所有修改完成后验证对象,请使用验证准入 webhook。
默认值为“Never”。
可能的枚举值
"IfNeeded"指示如果被准入的对象在初始变异调用后被其他准入插件修改,则变异可能会作为准入评估的一部分至少被调用一次。"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' 表示 pods 的 log 子资源。'' 表示所有资源,但不包括子资源。'pods/' 表示 pods 的所有子资源。'/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
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 列表。
操作
get 读取指定的 MutatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Parameters
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
pretty (在查询中): string
响应
200 (MutatingWebhookConfiguration): OK
401: 未授权
list 列出或监视 MutatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Parameters
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 创建一个 MutatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Parameters
body: MutatingWebhookConfiguration, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
202 (MutatingWebhookConfiguration): Accepted
401: 未授权
update 替换指定的 MutatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Parameters
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
body: MutatingWebhookConfiguration, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: 未授权
patch 部分更新指定的 MutatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Parameters
name (在路径中): string, 必需
MutatingWebhookConfiguration 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: 未授权
delete 删除一个 MutatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
Parameters
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 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
Parameters
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 项目的其他地方进行。