ValidatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingWebhookConfiguration
ValidatingWebhookConfiguration 描述了验证性准入 Webhook 的配置,该 Webhook 接收或拒绝对象但不修改它。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata (ObjectMeta)
标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
webhooks ([]ValidatingWebhook)
Patch 策略:在 key
name上合并Map:合并时将保留 key name 的唯一值
Webhooks 是 Webhook 及其适用的资源和操作列表。
ValidatingWebhook 描述了一个准入 Webhook 及其适用的资源和操作。
webhooks.admissionReviewVersions ([]string),必需
Atomic:合并时将被替换
AdmissionReviewVersions 是 Webhook 所期望的
AdmissionReview优先版本的有序列表。API 服务器将尝试使用它支持的列表中第一个版本。如果 API 服务器不支持列表中指定的任何版本,则此对象的校验将失败。如果持久化的 Webhook 配置指定了允许的版本并且不包含 API 服务器已知的任何版本,则对 Webhook 的调用将失败,并受失败策略的约束。webhooks.clientConfig (WebhookClientConfig),必需
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),必需
name是服务的名称。必需。webhooks.clientConfig.service.namespace (string),必需
namespace是服务的命名空间。必需。webhooks.clientConfig.service.path (string)
path是一个可选的 URL 路径,将在发送给该服务的所有请求中包含该路径。webhooks.clientConfig.service.port (int32)
如果指定,则表示承载 Webhook 的 Service 上的端口。为了向后兼容,默认为 443。
port必须是一个有效的端口号(包括 1-65535)。
webhooks.clientConfig.url (string)
url给出了 Webhook 的位置,采用标准 URL 形式(scheme://host:port/path)。url或service必须且只能指定一个。host不应引用在集群中运行的服务;请改为使用service字段。某些 apiserver(例如kube-apiserver)可能通过外部 DNS 解析 host,因为它无法解析集群内 DNS,否则会违反分层原则。host也可以是 IP 地址。请注意,使用
localhost或127.0.0.1作为host存在风险,除非你非常小心地在所有可能需要调用此 Webhook 的 apiserver 运行主机上运行此 Webhook。此类安装很可能不具备可移植性,即不易在新集群中启动。协议必须是 "https";URL 必须以 "https://" 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。你可以使用路径向 Webhook 传递任意字符串,例如集群标识符。
不允许尝试使用用户或基本身份认证,例如 "user:password@"。Fragments ("#...") 和查询参数 ("?...") 也不允许。
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)
Patch 策略:在 key
name上合并Map:合并时将保留 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),必需
Expression 表示将由 CEL 求值的表达式。必须求值为 bool 类型。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,这些内容被组织到 CEL 变量中:
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。'request' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - 一个 CEL Authorizer。可用于对请求主体(用户或 ServiceAccount)执行授权检查。参见 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"
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 上都会被求值,并且如果任一对象与选择器匹配,则被视为匹配。空对象(CREATE 时的 oldObject,或 DELETE 时的 newObject)或不能具有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 Webhook 是可选加入(opt-in)时才使用对象选择器,因为终端用户可能通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它匹配所有内容。
webhooks.rules ([]RuleWithOperations)
Atomic:合并时将被替换
Rules 描述了 Webhook 关心哪些资源/子资源的哪些操作。如果 Webhook 匹配 任何 规则,则它关心该操作。然而,为了防止 ValidatingAdmissionWebhook 和 MutatingAdmissionWebhook 将集群置于无法恢复的状态(除非完全禁用插件),ValidatingAdmissionWebhook 和 MutatingAdmissionWebhook 绝不会在 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上被调用。
RuleWithOperations 是 Operations 和 Resources 的一个元组。建议确保所有元组扩展都有效。
webhooks.rules.apiGroups ([]string)
Atomic:合并时将被替换
APIGroups 是资源所属的 API 组。'' 表示所有组。如果存在 '',则切片的长度必须为 1。必需。
webhooks.rules.apiVersions ([]string)
Atomic:合并时将被替换
APIVersions 是资源所属的 API 版本。'' 表示所有版本。如果存在 '',则切片的长度必须为 1。必需。
webhooks.rules.operations ([]string)
Atomic:合并时将被替换
Operations 是准入 Hook 关心的操作 - CREATE, UPDATE, DELETE, CONNECT 或 * 表示所有这些操作以及将来可能添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
webhooks.rules.resources ([]string)
Atomic:合并时将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 表示 Pods。'pods/log' 表示 Pods 的 log 子资源。'' 表示所有资源,但不包括子资源。'pods/' 表示 Pods 的所有子资源。'/scale' 表示所有 scale 子资源。'/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不重叠。
根据包含对象,子资源可能不被允许。必需。
webhooks.rules.scope (string)
scope 指定此规则的作用域。有效值为 "Cluster"、"Namespaced" 和 ""。"Cluster" 表示只有集群范围的资源将匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源将匹配此规则。"" 表示没有作用域限制。子资源匹配其父资源的作用域。默认为 "*"。
webhooks.timeoutSeconds (int32)
TimeoutSeconds 指定此 Webhook 的超时时间。超时后,Webhook 调用将被忽略或 API 调用将根据失败策略失败。超时值必须在 1 到 30 秒之间。默认为 10 秒。
ValidatingWebhookConfigurationList
ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。
items ([]ValidatingWebhookConfiguration),必需
ValidatingWebhookConfiguration 列表。
apiVersion (string)
APIVersion 定义了此对象表示的版本化模式。服务器应将可识别的模式转换为最新的内部值,并可能拒绝不可识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind 是一个字符串值,表示此对象所代表的 REST 资源。服务器可以从客户端提交请求的端点推断此值。不可更新。采用驼峰命名法。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
操作
get 读取指定的 ValidatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (在 path 中):string,必需
ValidatingWebhookConfiguration 的名称
pretty (在 query 中):string
响应
200 (ValidatingWebhookConfiguration):OK
401:Unauthorized
list 列出或监听 ValidatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
allowWatchBookmarks (在 query 中):boolean
continue (在 query 中):string
fieldSelector (在 query 中):string
labelSelector (在 query 中):string
limit (在 query 中):integer
pretty (在 query 中):string
resourceVersion (在 query 中):string
resourceVersionMatch (在 query 中):string
sendInitialEvents (在 query 中):boolean
timeoutSeconds (在 query 中):integer
watch (在 query 中):boolean
响应
200 (ValidatingWebhookConfigurationList):OK
401:Unauthorized
create 创建 ValidatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
body:ValidatingWebhookConfiguration,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
pretty (在 query 中):string
响应
200 (ValidatingWebhookConfiguration):OK
201 (ValidatingWebhookConfiguration):Created
202 (ValidatingWebhookConfiguration):Accepted
401:Unauthorized
update 替换指定的 ValidatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (在 path 中):string,必需
ValidatingWebhookConfiguration 的名称
body:ValidatingWebhookConfiguration,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
pretty (在 query 中):string
响应
200 (ValidatingWebhookConfiguration):OK
201 (ValidatingWebhookConfiguration):Created
401:Unauthorized
patch 部分更新指定的 ValidatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (在 path 中):string,必需
ValidatingWebhookConfiguration 的名称
body:Patch,必需
dryRun (在 query 中):string
fieldManager (在 query 中):string
fieldValidation (在 query 中):string
force (在 query 中):boolean
pretty (在 query 中):string
响应
200 (ValidatingWebhookConfiguration):OK
201 (ValidatingWebhookConfiguration):Created
401:Unauthorized
delete 删除 ValidatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (在 path 中):string,必需
ValidatingWebhookConfiguration 的名称
body:DeleteOptions
dryRun (在 query 中):string
gracePeriodSeconds (在 query 中):integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中):boolean
pretty (在 query 中):string
propagationPolicy (在 query 中):string
响应
200 (Status):OK
202 (Status):Accepted
401:Unauthorized
deletecollection 删除 ValidatingWebhookConfiguration 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
body:DeleteOptions
continue (在 query 中):string
dryRun (在 query 中):string
fieldSelector (在 query 中):string
gracePeriodSeconds (在 query 中):integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中):boolean
labelSelector (在 query 中):string
limit (在 query 中):integer
pretty (在 query 中):string
propagationPolicy (在 query 中):string
resourceVersion (在 query 中):string
resourceVersionMatch (在 query 中):string
sendInitialEvents (在 query 中):boolean
timeoutSeconds (在 query 中):integer
响应
200 (Status):OK
401:Unauthorized
本页面为自动生成。
如果你打算报告此页面的问题,请在你的问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。