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)
修补策略:在键
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,包含)。
webhooks.clientConfig.url (string)
url给出了 Webhook 的位置,以标准 URL 形式(scheme://host:port/path)。必须指定url或service之一。host不应引用在集群中运行的服务;请改用service字段。主机可能通过某些 apiserver 中的外部 DNS 解析(例如,kube-apiserver无法解析集群内 DNS,因为这将是分层违规)。host也可能是一个 IP 地址。请注意,除非您非常小心地在此 Webhook 运行的所有主机上运行此 Webhook,否则将
localhost或127.0.0.1用作host是有风险的,这些主机可能会需要对该 Webhook 进行调用。此类安装可能不可移植,即不容易在新的集群中启动。方案必须为“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 必须实现一个协调系统,因为请求可能会被准入链中未来的步骤拒绝,因此副作用需要被撤消。如果请求与具有 sideEffects == Unknown 或 Some 的 Webhook 匹配,则具有 dryRun 属性的请求将自动被拒绝。
webhooks.failurePolicy (string)
FailurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值为 Ignore 或 Fail。默认为 Fail。
webhooks.matchConditions ([]MatchCondition)
修补策略:在键
name上合并Map:在合并期间,键名称上的唯一值将被保留
MatchConditions 是必须满足才能将请求发送到此 Webhook 的条件列表。匹配条件过滤掉已通过规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。允许的最大匹配条件数为 64。
精确匹配逻辑(按顺序)为
- 如果任何 matchCondition 评估为 FALSE,则跳过 Webhook。
- 如果所有 matchCondition 评估为 TRUE,则调用 Webhook。
- 如果任何 matchCondition 评估为错误(但没有一个为 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则忽略错误并跳过 Webhook
这是一个测试版功能,由 AdmissionWebhookMatchConditions 功能网关管理。
MatchCondition 表示必须满足才能将请求发送到 Webhook 的条件。
webhooks.matchConditions.expression (string), required
Expression 表示将由 CEL 评估的表达式。必须评估为 bool。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/
必需。
webhooks.matchConditions.name (string), required
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.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:如果请求修改了 rules 中列出的资源,即使通过其他 API 组或版本,也会匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但“rules”仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为“Equivalent”
webhooks.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,它匹配所有内容。
webhooks.objectSelector (LabelSelector)
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 在哪些资源/子资源上关心哪些操作。如果 Webhook 匹配任何规则,则它关心某个操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 使集群进入无法恢复的状态(除非完全禁用插件),ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 从未在针对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上调用。
RuleWithOperations 是 Operations 和 Resources 的元组。建议确保所有元组扩展都是有效的。
webhooks.rules.apiGroups ([]字符串)
Atomic:在合并期间将被替换
APIGroups 是资源所属的 API 组。“*”表示所有组。如果存在“*”,切片的长度必须为 1。必需的。
webhooks.rules.apiVersions ([]字符串)
Atomic:在合并期间将被替换
APIVersions 是资源所属的 API 版本。“*”表示所有版本。如果存在“*”,切片的长度必须为 1。必需的。
webhooks.rules.operations ([]字符串)
Atomic:在合并期间将被替换
Operations 是准入 Hook 关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及任何将来添加的准入操作。如果存在“*”,切片的长度必须为 1。必需的。
webhooks.rules.resources ([]字符串)
Atomic:在合并期间将被替换
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), required
MutatingWebhookConfiguration 列表。
Operations
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, required
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, required
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, required
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 项目的其他地方进行。