ValidatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingWebhookConfiguration
ValidatingWebhookConfiguration 描述了接受或拒绝对象(不进行更改)的准入 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)
修补策略:在键
name
上合并Webhooks 是 Webhook 列表,以及受影响的资源和操作。
ValidatingWebhook 描述了准入 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 的 apiserver 的主机上,否则使用
localhost
或127.0.0.1
作为host
是有风险的。此类安装可能不可移植,即不易在新集群中启动。该方案必须为“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 相匹配,则该请求将被自动拒绝。
webhooks.failurePolicy (string)
FailurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值为 Ignore 或 Fail。默认为 Fail。
webhooks.matchConditions ([]MatchCondition)
修补策略:在键
name
上合并映射:在合并期间,将保留键 name 上的唯一值
MatchConditions 是一个条件列表,必须满足这些条件才能将请求发送到此 Webhook。MatchConditions 过滤掉已由规则、namespaceSelector 和 objectSelector 匹配的请求。空 MatchConditions 列表匹配所有请求。最多允许 64 个匹配条件。
确切的匹配逻辑(按顺序)为
- 如果任何 matchCondition 评估为 FALSE,则跳过 Webhook。
- 如果所有 matchCondition 评估为 TRUE,则调用 Webhook。
- 如果任何 matchCondition 评估为错误(但没有评估为 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则忽略错误,并跳过 Webhook
这是一个 beta 功能,由 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 授权者。可用于对请求的委托人(用户或服务帐户)执行授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz 'authorizer.requestResource' - 从 'authorizer' 构造的 CEL 资源检查,并使用请求资源配置。有关 CEL 的文档:https://kubernetes.ac.cn/docs/reference/using-api/cel/
必填。
webhooks.matchConditions.name (string), required
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。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 是 opt-in 时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它匹配所有内容。
webhooks.rules ([]RuleWithOperations)
规则描述了 webhook 关注的资源/子资源上的哪些操作。如果操作与 *任何* 规则匹配,则 webhook 会关注该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于无法恢复的状态(除非完全禁用插件),ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在针对 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求上被调用。
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 (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*" "Cluster" 表示只有集群范围的资源将匹配此规则。命名空间 API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源将匹配此规则。"*" 表示没有范围限制。子资源与父资源的范围匹配。默认值为 "*”。
webhooks.timeoutSeconds (int32)
TimeoutSeconds 指定此 webhook 的超时时间。超时时间过后,webhook 调用将被忽略或 API 调用将根据失败策略失败。超时值必须介于 1 到 30 秒之间。默认值为 10 秒。
ValidatingWebhookConfigurationList
ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfigurationList
metadata (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]ValidatingWebhookConfiguration), required
ValidatingWebhookConfiguration 列表。
Operations
get
读取指定的 ValidatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (in path): string, required
ValidatingWebhookConfiguration 的名称
pretty (in query): string
响应
200 (ValidatingWebhookConfiguration): OK
401: Unauthorized
list
列出或监视 ValidatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
响应
200 (ValidatingWebhookConfigurationList): OK
401: Unauthorized
create
创建 ValidatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
body: ValidatingWebhookConfiguration, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in 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 (in path): string, required
ValidatingWebhookConfiguration 的名称
body: ValidatingWebhookConfiguration, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
patch
部分更新指定的 ValidatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (in path): string, required
ValidatingWebhookConfiguration 的名称
body: Patch, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
响应
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
delete
删除 ValidatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (in path): string, required
ValidatingWebhookConfiguration 的名称
body: DeleteOptions
dryRun (in query): string
gracePeriodSeconds (in query): integer
pretty (in query): string
propagationPolicy (in query): string
响应
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
删除 ValidatingWebhookConfiguration 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
body: DeleteOptions
continue (in query): string
dryRun (in query): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
响应
200 (Status): OK
401: Unauthorized
此页面是自动生成的。
如果您要报告此页面的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。