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 项目的其他地方进行。