apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
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)
补丁策略:在 key name 上合并
映射:在合并期间将保留 key name 上的唯一值
Webhooks 是一个 Webhook 列表,包含受影响的资源和操作。
ValidatingWebhook 描述了一个准入 Webhook 及其适用的资源和操作。
webhooks.admissionReviewVersions ([]string), required
原子:将在合并期间被替换
AdmissionReviewVersions 是 Webhook 期望的首选 AdmissionReview 版本有序列表。API 服务器将尝试使用列表中其支持的第一个版本。如果 API 服务器不支持此列表中指定的任何版本,则此对象的验证将失败。如果持久化的 Webhook 配置指定了允许的版本,但未包含 API 服务器已知的任何版本,则对该 Webhook 的调用将失败,并受失败策略(failure policy)约束。
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 字段。在某些 apiserver 中,host 可能会通过外部 DNS 解析(例如,kube-apiserver 无法解析集群内 DNS,因为这将违反分层原则)。host 也可以是 IP 地址。
请注意,使用 localhost 或 127.0.0.1 作为 host 具有风险,除非您非常谨慎地确保此 Webhook 在所有可能需要调用此 Webhook 的 apiserver 所在主机上运行。此类安装通常不具有可移植性,即难以在新的集群中快速部署。
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 必须实现协调系统,因为请求可能会在准入链的后续步骤中被拒绝,因此需要撤销副作用。如果请求与 sideEffects 为 Unknown 或 Some 的 Webhook 匹配,则具有 dryRun 属性的请求将被自动拒绝。
可能的枚举值
"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 表示必须满足才能将请求发送到 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 授权器。可用于为请求的主体(用户或服务账号)执行授权检查。参见 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 的策略性合并以及为日志记录提供标识符。一个好的名称应该能够描述相关联的表达式。名称必须是合格的名称,由字母数字字符、'-'、'_' 或 '.' 组成,并且必须以字母数字字符开头和结尾(例如 '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 修改 Deployment,但 "rules" 仅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则发送到 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到该 Webhook。
Equivalent:如果请求修改了规则中列出的资源(即使通过另一个 API 组或版本),则匹配请求。例如,如果可以通过 apps/v1, apps/v1beta1 和 extensions/v1beta1 修改 Deployment,并且 "rules" 仅包含 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到该 Webhook。
默认值为“Equivalent”
可能的枚举值
"Equivalent" 表示如果请求通过其他 API 组或版本修改了 rules 中列出的资源,则应将该请求发送到该 Webhook。"Exact" 表示仅当请求完全匹配给定的规则时,才应将该请求发送到该 Webhook。webhooks.namespaceSelector (LabelSelector)
NamespaceSelector 根据对象的命名空间是否与选择器匹配来决定是否在该对象上运行 Webhook。如果对象本身是命名空间,则匹配是在 object.metadata.labels 上执行的。如果对象是其他集群范围的资源,则它永远不会跳过该 Webhook。
例如,要在命名空间不与 "runlevel" 为 "0" 或 "1" 相关联的任何对象上运行 Webhook;您可以按如下方式设置选择器:"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
如果您只想在命名空间关联的“环境”为“生产 (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)
原子:将在合并期间被替换
Rules 描述了 Webhook 关注哪些资源/子资源上的哪些操作。如果操作匹配 任何 规则,Webhook 就会关注该操作。但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于在不完全禁用插件的情况下无法恢复的状态,ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 从不被调用处理 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求。
RuleWithOperations 是操作和资源的元组。建议确保所有的元组展开都是有效的。
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' 表示 Pod。'pods/log' 表示 Pod 的 log 子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 Pod 的所有子资源。'*/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 秒。
ValidatingWebhookConfigurationList 是 ValidatingWebhookConfiguration 的列表。
items ([]ValidatingWebhookConfiguration), required
ValidatingWebhookConfiguration 列表。
apiVersion (string)
APIVersion 定义了此对象表示形式的版本化模式。服务器应将公认的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind 是一个字符串值,表示此对象代表的 REST 资源。服务器可能会从客户端提交请求的端点推断出这一点。无法更新。采用 CamelCase。更多信息: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 读取指定的 ValidatingWebhookConfigurationGET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
name (在路径中): string, 必需
ValidatingWebhookConfiguration 的名称
pretty (在查询中): string
200 (ValidatingWebhookConfiguration): 成功
401: 未授权
list 列出或监视 ValidatingWebhookConfiguration 类型的对象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 (在查询中): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
200 (ValidatingWebhookConfigurationList): 成功
401: 未授权
create 创建一个 ValidatingWebhookConfigurationPOST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
body: ValidatingWebhookConfiguration, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
200 (ValidatingWebhookConfiguration): 成功
201 (ValidatingWebhookConfiguration): 已创建
202 (ValidatingWebhookConfiguration): 已接受
401: 未授权
update 替换指定的 ValidatingWebhookConfigurationPUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
name (在路径中): string, 必需
ValidatingWebhookConfiguration 的名称
body: ValidatingWebhookConfiguration, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
200 (ValidatingWebhookConfiguration): 成功
201 (ValidatingWebhookConfiguration): 已创建
401: 未授权
patch 部分更新指定的 ValidatingWebhookConfigurationPATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
name (在路径中): string, 必需
ValidatingWebhookConfiguration 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
200 (ValidatingWebhookConfiguration): 成功
201 (ValidatingWebhookConfiguration): 已创建
401: 未授权
delete 删除一个 ValidatingWebhookConfigurationDELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
name (在路径中): string, 必需
ValidatingWebhookConfiguration 的名称
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (在查询中): string
propagationPolicy (in query): string
200 (Status): 确定
202 (Status): 已接受
401: 未授权
deletecollection 删除 ValidatingWebhookConfiguration 的集合DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
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 项目的其他地方进行。