扩展资源
1 - CustomResourceDefinition
apiVersion: apiextensions.k8s.io/v1
import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
CustomResourceDefinition
CustomResourceDefinition 表示应在 API 服务器上公开的资源。其名称必须采用 <.spec.name>.<.spec.group>
格式。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata (ObjectMeta)
标准的对象元数据,更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (CustomResourceDefinitionSpec), 必需
spec 描述了用户希望资源的呈现方式。
status (CustomResourceDefinitionStatus)
status 表示 CustomResourceDefinition 的实际状态。
CustomResourceDefinitionSpec
CustomResourceDefinitionSpec 描述了用户希望资源的呈现方式。
group (string),必需
group 是自定义资源的 API 组。自定义资源在
/apis/<group>/...
下提供。 必须与 CustomResourceDefinition 的名称匹配(格式为<names.plural>.<group>
)。
names (CustomResourceDefinitionNames),必需
names 表示自定义资源的资源和种类名称。
CustomResourceDefinitionNames 表示提供此 CustomResourceDefinition 资源的名称。
names.kind (string),必需
kind 是资源的序列化类型。它通常是驼峰命名的单数形式。自定义资源实例将使用此值作为 API 调用中的
kind
属性。
names.plural (string),必需
plural 是所提供的资源的复数名称,自定义资源在
/apis/<group>/<version>/.../<plural>
下提供。 必须与 CustomResourceDefinition 的名称匹配(格式为<names.plural>.<group>
)。必须全部小写。names.categories ([]string)
categories 是自定义资源所属的分组资源列表(例如 'all')。 它在 API 发现文档中发布,并支持客户端像
kubectl get all
这样的调用。names.listKind (string)
listKind 是此资源列表的序列化类型。默认为 "
kind
List"。names.shortNames ([]string)
shortNames 是资源的短名称,在 API 发现文档中公开,并支持客户端调用,如
kubectl get <shortname>
。必须全部小写。names.singular (string)
singular 是资源的单数名称。必须全部小写。默认为小写
kind
。
scope (string),必需
scope 表示自定义资源是集群作用域还是命名空间作用域。允许的值为
Cluster
和Namespaced
。
versions ([]CustomResourceDefinitionVersion),必需
versions 是自定义资源的所有 API 版本的列表。版本名称用于计算服务版本在 API 发现中列出的顺序。 如果版本字符串与 Kubernetes 的版本号形式类似,则它将被排序在非 Kubernetes 形式版本字符串之前。 Kubernetes 的版本号字符串按字典顺序排列。Kubernetes 版本号以 “v” 字符开头, 后面是一个数字(主版本),然后是可选字符串 “alpha” 或 “beta” 和另一个数字(次要版本)。 它们首先按 GA > beta > alpha 排序(其中 GA 是没有 beta 或 alpha 等后缀的版本),然后比较主要版本, 最后是比较次要版本。版本排序列表示例:v10、v2、v1、v11beta2、v10beta3、v3beta1、v12alpha1、v11alpha2、foo1、foo10。
CustomResourceDefinitionVersion 描述 CRD 的一个版本。
versions.name (string),必需
name 是版本名称,例如 “v1”、“v2beta1” 等。如果
served
是 true,自定义资源在/apis/<group>/<version>/...
版本下提供。
versions.served (boolean),必需
served 是用于启用/禁用该版本通过 REST API 提供服务的标志。
versions.storage (boolean),必需
storage 表示在将自定义资源持久保存到存储时,应使用此版本。有且仅有一个版本的 storage=true。
versions.additionalPrinterColumns ([]CustomResourceColumnDefinition)
additionalPrinterColumns 表示在表输出中返回的附加列。 有关详细信息,请参阅 https://kubernetes.io/zh-cn/docs/reference/using-api/api-concepts/#receiving-resources-as-tables。 如果没有指定列,则显示自定义资源存活时间(AGE)列。
CustomResourceColumnDefinition 指定用于服务器端打印的列。
versions.additionalPrinterColumns.jsonPath (string),必需
jsonPath 是一个简单的 JSON 路径(使用数组表示法),它对每个自定义资源进行评估,以生成该列的值。
versions.additionalPrinterColumns.name (string),必需
name 是便于阅读的列名称。
versions.additionalPrinterColumns.type (string),必需
type 是此列的 OpenAPI 类型定义。有关详细信息, 请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types
versions.additionalPrinterColumns.description (string)
description 是该列的可读性描述。
versions.additionalPrinterColumns.format (string)
format 是这个列的可选 OpenAPI 类型定义。'name' 格式应用于主标识符列,以帮助客户端识别列是资源名称。 有关详细信息,请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types。
versions.additionalPrinterColumns.priority (int32)
priority 是一个定义此列相对于其他列的相对重要性的整数。数字越低,优先级越高。 在空间有限的情况下,可以省略的列的优先级应大于 0。
versions.deprecated (boolean)
deprecated 表示此版本的自定义资源 API 已弃用。设置为 true 时,对此版本的 API 请求会在服务器响应头信息中带有警告(warning)信息。此值默认为 false。
versions.deprecationWarning (string)
deprecationWarning 会覆盖返回给 API 客户端的默认警告。只能在
deprecated
为 true 时设置。 默认警告表示此版本已弃用,建议使用最新的同等或更高稳定性版本(如果存在)。versions.schema (CustomResourceValidation)
schema 描述了用于验证、精简和默认此版本的自定义资源的模式。
CustomResourceValidation 是 CustomResources 的验证方法列表。
versions.schema.openAPIV3Schema (JSONSchemaProps)
openAPIV3Schema 是用于验证和精简的 OpenAPI v3 模式。
versions.subresources (CustomResourceSubresources)
subresources 指定此版本已定义的自定义资源具有哪些子资源。
CustomResourceSubresources 定义了 CustomResources 子资源的状态和规模。
versions.subresources.scale (CustomResourceSubresourceScale)
scale 表示自定义资源应该提供一个
/scale
子资源,该子资源返回一个autoscaling/v1
Scale 对象。CustomResourceSubresourceScale 定义了如何为 CustomResources 的 scale 子资源提供服务。
versions.subresources.scale.specReplicasPath (string),必需
specReplicasPath 定义对应于 Scale 的自定义资源内的 JSON 路径
spec.replicas
。 只允许没有数组表示法的 JSON 路径。必须是.spec
下的 JSON 路径。 如果自定义资源中的给定路径下没有值,那么 GET/scale
子资源将返回错误。
versions.subresources.scale.statusReplicasPath (string),必需
statusReplicasPath 定义对应于 Scale 的自定义资源内的 JSON 路径
status.replicas
。 只允许不带数组表示法的 JSON 路径。必须是.status
下的 JSON 路径。 如果自定义资源中给定路径下没有值,则/scale
子资源中的status.replicas
值将默认为 0。versions.subresources.scale.labelSelectorPath (string)
labelSelectorPath 定义对应于 Scale 的自定义资源内的 JSON 路径
status.selector
。 只允许不带数组表示法的 JSON 路径。必须是.status
或.spec
下的路径。 必须设置为与 HorizontalPodAutoscaler 一起使用。 此 JSON 路径指向的字段必须是字符串字段(不是复杂的选择器结构),其中包含字符串形式的序列化标签选择器。 更多信息: https://kubernetes.io/zh-cn/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource。 如果自定义资源中给定路径下没有值,则/scale
子资源中的status.selector
默认值为空字符串。
versions.subresources.status (CustomResourceSubresourceStatus)
status 表示自定义资源应该为
/status
子资源服务。当启用时:- 对自定义资源主端点的请求会忽略对对象
status
节的改变; - 对自定义资源
/status
子资源的请求忽略对对象status
节以外的任何变化。
CustomResourceSubresourceStatus 定义了如何为自定义资源提供 status 子资源。 状态由 CustomResource 中的
.status
JSON 路径表示。设置后,- 为自定义资源提供一个
/status
子资源。 - 向
/status
子资源发出的 PUT 请求时,需要提供自定义资源对象,服务器端会忽略对 status 节以外的任何内容更改。 - 对自定义资源的 PUT/POST/PATCH 请求会忽略对 status 节的更改。
- 对自定义资源主端点的请求会忽略对对象
conversion (CustomResourceConversion)
conversion 定义了 CRD 的转换设置。
CustomResourceConversion 描述了如何转换不同版本的自定义资源。
conversion.strategy (string),必需
strategy 指定如何在版本之间转换自定义资源。允许的值为:
None
:转换器仅更改 apiVersion 并且不会触及自定义资源中的任何其他字段。Webhook
:API 服务器将调用外部 Webhook 进行转换。此选项需要其他信息。这要求 spec.preserveUnknownFields 为 false,并且设置 spec.conversion.webhook。
conversion.webhook (WebhookConversion)
webhook 描述了如何调用转换 Webhook。当
strategy
设置为Webhook
时有效。WebhookConversion 描述了如何调用转换 Webhook
conversion.webhook.conversionReviewVersions ([]string),必需
conversionReviewVersions 是 Webhook 期望的
ConversionReview
版本的有序列表。 API 服务器将使用它支持的列表中的第一个版本。如果 API 服务器不支持此列表中指定的版本,则自定义资源的转换将失败。 如果持久化的 Webhook 配置指定了允许的版本但其中不包括 API 服务器所了解的任何版本,则对 Webhook 的调用将失败。conversion.webhook.clientConfig (WebhookClientConfig)
如果 strategy 是
Webhook
, 那么 clientConfig 是关于如何调用 Webhook 的说明。WebhookClientConfig 包含与 Webhook 建立 TLS 连接的信息。
conversion.webhook.clientConfig.caBundle ([]byte)
caBundle 是一个 PEM 编码的 CA 包,用于验证 Webhook 服务器的服务证书。 如果未指定,则使用 API 服务器上的系统根证书。
conversion.webhook.clientConfig.service (ServiceReference)
service 是对此 Webhook 服务的引用。必须指定 service 或 url 字段之一。
如果在集群中运行 Webhook,那么你应该使用
service
。ServiceReference 保存对 Service.legacy.k8s.io 的一个引用。
conversion.webhook.clientConfig.service.name (string),必需
name 是服务的名称。必需。
conversion.webhook.clientConfig.service.namespace (string),必需
namespace 是服务的命名空间。必需。
conversion.webhook.clientConfig.service.path (string)
path 是一个可选的 URL 路径,Webhook 将通过该路径联系服务。
conversion.webhook.clientConfig.service.port (int32)
port 是 Webhook 联系的可选服务端口。
port
应该是一个有效的端口号(1-65535,包含)。 为实现向后兼容,默认端口号为 443。
conversion.webhook.clientConfig.url (string)
url 以标准 URL 的形式(
scheme://host:port/path
)给出 Webhook 的位置。url
或service
必须指定一个且只能指定一个。host
不应引用集群中运行的服务;若使用集群内服务应改为使用service
字段。 host 值可能会通过外部 DNS 解析(例如,kube-apiserver
无法解析集群内 DNS,因为这将违反分层规则)。host
也可能是 IP 地址。请注意,使用
localhost
或127.0.0.1
作为host
是有风险的, 除非你非常小心地在所有运行 API 服务器的主机上运行这个 Webhook,因为这些 API 服务器可能需要调用这个 Webhook。 这样的安装可能是不可移植的,也就是说,不容易在一个新的集群中复现。scheme 必须是 "https";URL 必须以 "https://" 开头。
路径(path)是可选的,如果存在,则可以是 URL 中允许的任何字符串。 你可以使用路径传递一个任意字符串给 Webhook,例如,一个集群标识符。
不允许使用用户或基本认证,例如 "user:password@",是不允许的。片段("#...")和查询参数("?...")也是不允许的。
preserveUnknownFields (boolean)
preserveUnknownFields 表示将对象写入持久性存储时应保留 OpenAPI 模式中未规定的对象字段。 apiVersion、kind、元数据(metadata)和元数据中的已知字段始终保留。不推荐使用此字段,而建议在
spec.versions[*].schema.openAPIV3Schema
中设置x-preserve-unknown-fields
为 true。 更多详细信息参见: https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#field-pruning
JSONSchemaProps
JSONSchemaProps 是JSON 模式(JSON-Schema),遵循其规范草案第 4 版(http://json-schema.org/)。
$ref (string)
$schema (string)
additionalItems (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。
additionalProperties (JSONSchemaPropsOrBool)
JSONSchemaPropsOrBool 表示 JSONSchemaProps 或布尔值。布尔属性默认为 true。
allOf ([]JSONSchemaProps)
anyOf ([]JSONSchemaProps)
default (JSON)
default 是未定义对象字段的默认值。设置默认值操作是 CustomResourceDefaulting 特性门控所控制的一个 Beta 特性。 应用默认值设置时要求 spec.preserveUnknownFields 为 false。
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
definitions (map[string]JSONSchemaProps)
dependencies (map[string]JSONSchemaPropsOrStringArray)
JSONSchemaPropsOrStringArray 表示 JSONSchemaProps 或字符串数组。
description (string)
enum ([]JSON)
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
example (JSON)
JSON 表示任何有效的 JSON 值。支持以下类型:bool、int64、float64、string、[]interface{}、map[string]interface{} 和 nil。
exclusiveMaximum (boolean)
exclusiveMinimum (boolean)
externalDocs (ExternalDocumentation)
ExternalDocumentation 允许引用外部资源作为扩展文档。
externalDocs.description (string)
externalDocs.url (string)
format (string)
format 是 OpenAPI v3 格式字符串。未知格式将被忽略。以下格式会被验证合法性:
- bsonobjectid:一个 bson 对象的 ID,即一个 24 个字符的十六进制字符串
- uri:由 Go 语言 net/url.ParseRequestURI 解析得到的 URI
- email:由 Go 语言 net/mail.ParseAddress 解析得到的电子邮件地址
- hostname:互联网主机名的有效表示,由 RFC 1034 第 3.1 节 [RFC1034] 定义
- ipv4:由 Go 语言 net.ParseIP 解析得到的 IPv4 协议的 IP
- ipv6:由 Go 语言 net.ParseIP 解析得到的 IPv6 协议的 IP
- cidr: 由 Go 语言 net.ParseCIDR 解析得到的 CIDR
- mac:由 Go 语言 net.ParseMAC 解析得到的一个 MAC 地址
- uuid:UUID,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
- uuid3:UUID3,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
- uuid4:UUID4,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
- uuid5:UUID5,允许大写字母,满足正则表达式 (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
- isbn:一个 ISBN10 或 ISBN13 数字字符串,如 "0321751043" 或 "978-0321751041"
- isbn10:一个 ISBN10 数字字符串,如 "0321751043"
- isbn13: 一个 ISBN13 号码字符串,如 "978-0321751041"
- creditcard:信用卡号码,满足正则表达式 ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$,其中混合任意非数字字符
- ssn:美国社会安全号码,满足正则表达式 ^\d{3}[- ]?\d{2}[- ]?\d{4}$
- hexcolor:一个十六进制的颜色编码,如 "#FFFFFF",满足正则表达式 ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
- rgbcolor:一个 RGB 颜色编码 例如 "rgb(255,255,255)"
- byte:base64 编码的二进制数据
- password: 任何类型的字符串
- date:类似 "2006-01-02" 的日期字符串,由 RFC3339 中的完整日期定义
- duration:由 Go 语言 time.ParseDuration 解析的持续时长字符串,如 "22 ns",或与 Scala 持续时间格式兼容。
- datetime:一个日期时间字符串,如 "2014-12-15T19:30:20.000Z",由 RFC3339 中的 date-time 定义。
id (string)
items (JSONSchemaPropsOrArray)
JSONSchemaPropsOrArray 表示可以是 JSONSchemaProps 或 JSONSchemaProps 数组的值。这里目的主要用于序列化。
maxItems (int64)
maxLength (int64)
maxProperties (int64)
maximum (double)
minItems (int64)
minLength (int64)
minProperties (int64)
minimum (double)
multipleOf (double)
not (JSONSchemaProps)
nullable (boolean)
oneOf ([]JSONSchemaProps)
pattern (string)
patternProperties (map[string]JSONSchemaProps)
properties (map[string]JSONSchemaProps)
required ([]string)
title (string)
type (string)
uniqueItems (boolean)
x-kubernetes-embedded-resource (boolean)
x-kubernetes-embedded-resource 定义该值是一个嵌入式 Kubernetes runtime.Object,具有 TypeMeta 和 ObjectMeta。 类型必须是对象。允许进一步限制嵌入对象。会自动验证 kind、apiVersion 和 metadata 等字段值。 x-kubernetes-preserve-unknown-fields 允许为 true,但如果对象已完全指定 (除 kind、apiVersion、metadata 之外),则不必为 true。
x-kubernetes-int-or-string (boolean)
x-kubernetes-int-or-string 指定此值是整数或字符串。如果为 true,则允许使用空类型, 并且如果遵循以下模式之一,则允许作为 anyOf 的子类型:
- anyOf:
- type: integer
- type: string
- allOf:
- anyOf:
- type: integer
- type: string
- (可以有选择地包含其他类型)
- anyOf:
- anyOf:
x-kubernetes-list-map-keys ([]string)
X-kubernetes-list-map-keys 通过指定用作 map 索引的键来使用 x-kubernetes-list-type
map
注解数组。这个标签必须只用于 "x-kubernetes-list-type" 扩展设置为 "map" 的列表。 而且,为这个属性指定的值必须是子结构的标量类型的字段(不支持嵌套)。
指定的属性必须是必需的或具有默认值,以确保所有列表项都存在这些属性。
x-kubernetes-list-type (string)
x-kubernetes-list-type 注解一个数组以进一步描述其拓扑。此扩展名只能用于列表,并且可能有 3 个可能的值:
atomic
: 列表被视为单个实体,就像标量一样。原子列表在更新时将被完全替换。这个扩展可以用于任何类型的列表(结构,标量,…)。set
: set 是不能有多个具有相同值的列表。每个值必须是标量、具有 x-kubernetes-map-typeatomic
的对象或具有 x-kubernetes-list-typeatomic
的数组。map
: 这些列表类似于映射表,因为它们的元素具有用于标识它们的非索引键。合并时保留顺序。 map 标记只能用于元数类型为 object 的列表。 数组默认为原子数组。
x-kubernetes-map-type (string)
x-kubernetes-map-type 注解一个对象以进一步描述其拓扑。此扩展只能在 type 为 object 时使用,并且可能有 2 个可能的值:
granular
: 这些 map 是真实的映射(键值对),每个字段都是相互独立的(它们都可以由不同的角色来操作)。 这是所有 map 的默认行为。atomic
:map 被视为单个实体,就像标量一样。原子 map 更新后将被完全替换。
x-kubernetes-preserve-unknown-fields (boolean)
x-kubernetes-preserve-unknown-fields 针对未在验证模式中指定的字段,禁止 API 服务器的解码步骤剪除这些字段。 这一设置对字段的影响是递归的,但在模式中指定了嵌套 properties 或 additionalProperties 时,会切换回正常的字段剪除行为。 该值可为 true 或 undefined,不能为 false。
x-kubernetes-validations ([]ValidationRule)
补丁策略:基于键
rule
合并Map:合并时将保留 rule 键的唯一值
x-kubernetes-validations 描述了用 CEL 表达式语言编写的验证规则列表。此字段是 Alpha 级别。 使用此字段需要启用
CustomResourceValidationExpressions
特性门控。ValidationRule 描述用 CEL 表达式语言编写的验证规则。
x-kubernetes-validations.rule (string),必需
rule 表示将由 CEL 评估的表达式。参考: https://github.com/google/cel-spec。 rule 的作用域为模式中的 x-kubernetes-validation 扩展所在的位置。CEL 表达式中的
self
与作用域值绑定。 例子:rule 的作用域是一个具有状态子资源的资源根:{"rule": "self.status.actual <= self.spec.maxDesired"}。如果 rule 的作用域是一个带有属性的对象,那么该对象的可访问属性是通过
self
进行字段选择的, 并且可以通过has(self.field)
来检查字段是否存在。在 CEL 表达式中,Null 字段被视为不存在的字段。 如果该 rule 的作用域是一个带有附加属性的对象(例如一个 map),那么该 map 的值可以通过self[mapKey]
来访问,map 是否包含某主键可以通过mapKey in self
来检查。 map 中的所有条目都可以通过 CEL 宏和函数(如self.all(...)
)访问。 如果 rule 的作用域是一个数组,数组的元素可以通过self[i]
访问,也可以通过宏和函数访问。 如果 rule 的作用域为标量,self
绑定到标量值。举例:- rule 作用域为对象映射:{"rule": "self.components['Widget'].priority < 10"}
- rule 作用域为整数列表:{"rule": "self.values.all(value, value >= 0 && value < 100)"}
- rule 作用域为字符串值:{"rule": "self.startsWith('kube')"}
apiVersion
,kind
,metadata.name
和metadata.generateName
总是可以从对象的根和任何带 x-kubernetes-embedded-resource 注解的对象访问。其他元数据属性都无法访问。在 CEL 表达式中无法访问通过 x-kubernetes-preserve-unknown-fields 保存在自定义资源中的未知数据。 这包括:
由包含 x-kubernetes-preserve-unknown-fields 的对象模式所保留的未知字段值;
属性模式为 "未知类型" 的对象属性。"未知类型" 递归定义为:
- 没有设置 type 但 x-kubernetes-preserve-unknown-fields 设置为 true 的模式。
- 条目模式为"未知类型"的数组。
- additionalProperties 模式为"未知类型"的对象。
只有名称符合正则表达式
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的属性才可被访问。 在表达式中访问属性时,可访问的属性名称根据以下规则进行转义:'__' 转义为 'underscores'
'.' 转义为 'dot'
'-' 转义为 'dash'
'/' 转义为 'slash'
恰好匹配 CEL 保留关键字的属性名称转义为 '{keyword}' 。这里的关键字具体包括: "true","false","null","in","as","break","const","continue","else","for","function","if", "import","let","loop","package","namespace","return"。 举例:
- 规则访问名为 "namespace" 的属性:
{"rule": "self.__namespace__ > 0"}
- 规则访问名为 "x-prop" 的属性:
{"rule": "self.x__dash__prop > 0"}
- 规则访问名为 "redact__d" 的属性:
{"rule": "self.redact__underscores__d > 0"}
- 规则访问名为 "namespace" 的属性:
对 x-kubernetes-list-type 为 'set' 或 'map' 的数组进行比较时忽略元素顺序,如:[1, 2] == [2, 1]。 使用 x-kubernetes-list-type 对数组进行串接使用下列类型的语义:
- 'set':
X + Y
执行合并,其中X
保留所有元素的数组位置,并附加不相交的元素Y
,保留其局部顺序。 - 'map':
X + Y
执行合并,保留X
中所有键的数组位置,但当X
和Y
的键集相交时,会被Y
中的值覆盖。 添加Y
中具有不相交键的元素,保持其局顺序。
x-kubernetes-validations.message (string)
message 表示验证失败时显示的消息。如果规则包含换行符,则需要该消息。消息不能包含换行符。 如果未设置,则消息为 "failed rule: {Rule}",如:"must be a URL with the host matching spec.host"
CustomResourceDefinitionStatus
CustomResourceDefinitionStatus 表示 CustomResourceDefinition 的状态。
acceptedNames (CustomResourceDefinitionNames)
acceptedNames 是实际用于服务发现的名称。它们可能与规约(spec)中的名称不同。
CustomResourceDefinitionNames 表示提供此 CustomResourceDefinition 资源的名称。
acceptedNames.kind (string),必需
kind 是资源的序列化类型。它通常是驼峰命名的单数形式。自定义资源实例将使用此值作为 API 调用中的
kind
属性。
acceptedNames.plural (string), required
plural 是所提供的资源的复数名称,自定义资源在
/apis/<group>/<version>/.../<plural>
下提供。 必须与 CustomResourceDefinition 的名称匹配(格式为<names.plural>.<group>
)。必须全部小写。acceptedNames.categories ([]string)
categories 是此自定义资源所属的分组资源列表(例如 'all')。 它在 API 发现文档中发布,并被客户端用于支持像
kubectl get all
这样的调用。acceptedNames.listKind (string)
listKind 是此资源列表的序列化类型。默认为 "
<kind>List
"。acceptedNames.shortNames ([]string)
shortNames 是资源的短名称,在 API 发现文档中公开,并支持客户端调用,如
kubectl get <shortname>
。必须全部小写。acceptedNames.singular (string)
singular 是资源的单数名称。必须全部小写。默认为小写形式的
kind
。
conditions ([]CustomResourceDefinitionCondition)
Map:合并时将保留 type 键的唯一值
conditions 表示 CustomResourceDefinition 特定方面的状态
CustomResourceDefinitionCondition 包含此 Pod 当前状况的详细信息。
conditions.status (string),必需
status 表示状况(Condition)的状态,取值为 True、False 或 Unknown 之一。
conditions.type (string),必需
type 是条件的类型。类型包括:Established、NamesAccepted 和 Terminating。
conditions.lastTransitionTime (Time)
lastTransitionTime 是上一次发生状况状态转换的时间。
Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。
conditions.message (string)
message 是有关上次转换的详细可读信息。
conditions.reason (string)
reason 表述状况上次转换原因的、驼峰格式命名的、唯一的一个词。
storedVersions ([]string)
storedVersions 列出了曾经被持久化的所有 CustomResources 版本。跟踪这些版本可以为 etcd 中的存储版本提供迁移路径。 该字段是可变的,因此迁移控制器可以完成到另一个版本的迁移(确保存储中没有遗留旧对象),然后从该列表中删除其余版本。 当版本在此列表中时,则不能从
spec.versions
中删除。
CustomResourceDefinitionList
CustomResourceDefinitionList 是 CustomResourceDefinition 对象的列表。
items ([]CustomResourceDefinition),必需
items 列出单个 CustomResourceDefinition 对象
apiVersion (string)
apiVersion 定义对象表示的版本化模式。服务器应将已识别的模式转换为最新的内部值,并可能拒绝未识别的值。 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
kind 是一个字符串值,表示该对象所表示的 REST 资源。服务器可以从客户端提交请求的端点推断出 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#metadata
Operations
get
读取指定的 CustomResourceDefinition
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
401: Unauthorized
get
读取指定 CustomResourceDefinition 的状态
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
401: Unauthorized
list
列出或观察 CustomResourceDefinition 类型的对象
HTTP 请求
GET /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
allowWatchBookmarks (查询参数):boolean
continue (查询参数):string
fieldSelector (查询参数):string
labelSelector (查询参数):string
limit (查询参数):integer
pretty (查询参数):string
resourceVersion (查询参数):string
resourceVersionMatch (查询参数):string
timeoutSeconds (查询参数):integer
watch (查询参数):boolean
响应
200 (CustomResourceDefinitionList): OK
401: Unauthorized
create
创建一个 CustomResourceDefinition
HTTP 请求
POST /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
body: CustomResourceDefinition,必需
dryRun (查询参数):string
fieldManager (查询参数):string
fieldValidation (查询参数):string
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
202 (CustomResourceDefinition): Accepted
401: Unauthorized
update
替换指定的 CustomResourceDefinition
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
body: CustomResourceDefinition,必需
dryRun (查询参数):string
fieldManager (查询参数):string
fieldValidation (查询参数):string
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
update
替换指定 CustomResourceDefinition 的状态
HTTP 请求
PUT /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
body: CustomResourceDefinition,必需
dryRun (查询参数):string
fieldManager (查询参数):string
fieldValidation (查询参数):string
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch
部分更新指定的 CustomResourceDefinition
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
body: Patch,必需
dryRun (查询参数):string
fieldManager (查询参数):string
fieldValidation (查询参数):string
force (查询参数):boolean
pretty(查询参数):string
响应
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
patch
部分更新指定 CustomResourceDefinition 的状态
HTTP 请求
PATCH /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}/status
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
body: Patch,必需
dryRun (查询参数):string
fieldManager (查询参数):string
fieldValidation (查询参数):string
force (查询参数):boolean
pretty (查询参数):string
响应
200 (CustomResourceDefinition): OK
201 (CustomResourceDefinition): Created
401: Unauthorized
delete
删除一个 CustomResourceDefinition
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions/{name}
参数
name (路径参数):string,必需
CustomResourceDefinition 的名称
body: DeleteOptions
dryRun (查询参数):string
gracePeriodSeconds (查询参数):integer
pretty (查询参数):string
propagationPolicy (查询参数):string
响应
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
删除 CustomResourceDefinition 的集合
HTTP 请求
DELETE /apis/apiextensions.k8s.io/v1/customresourcedefinitions
参数
body: DeleteOptions
continue (查询参数):string
dryRun (查询参数):string
fieldSelector (查询参数):string
gracePeriodSeconds (查询参数):integer
labelSelector (查询参数):string
limit (查询参数):integer
pretty (查询参数):string
propagationPolicy (查询参数):string
resourceVersion (查询参数):string
resourceVersionMatch (查询参数):string
timeoutSeconds (查询参数):integer
响应
200 (Status): OK
401: Unauthorized
2 - MutatingWebhookConfiguration
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
MutatingWebhookConfiguration
MutatingWebhookConfiguration 描述准入 Webhook 的配置,该 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), 必需
admissionReviewVersions 是 Webhook 期望的
AdmissionReview
版本的优选顺序列表。 API 服务器将尝试使用它所支持的版本列表中的第一个版本。如果 API 服务器不支持此列表中设置的任何版本,则此对象将验证失败。 如果持久化的 Webhook 配置指定了所允许的版本,但其中不包括 API 服务器所知道的任何版本, 则对 Webhook 的调用将失败并根据失败策略进行处理。
webhooks.clientConfig (WebhookClientConfig), 必需
clientConfig 定义了如何与 Webhook 通信。必需。
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 的服务上的端口。默认为 443 以实现向后兼容。
port
应该是一个有效的端口号(包括 1-65535)。
webhooks.clientConfig.url (string)
url
以标准 URL 形式(scheme://host:port/path
)给出了 Webhook 的位置。必须指定url
或service
中的一个。host
不能用来引用集群中运行的服务;这种情况应改用service
字段。在某些 API 服务器上,可能会通过外部 DNS 解析host
值。 (例如,kube-apiserver
无法解析集群内 DNS,因为这会违反分层原理)。host
也可以是 IP 地址。请注意,使用
localhost
或127.0.0.1
作为host
是有风险的,除非你非常小心地在运行 apiserver 的所有主机上运行此 Webhook, 而这些 API 服务器可能需要调用此 Webhook。此类部署可能是不可移植的,即不容易在新集群中重复安装。该方案必须是 “https”;URL 必须以 “https://” 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。你可以使用路径将任意字符串传递给 Webhook,例如集群标识符。
不允许使用用户或基本身份验证,例如不允许使用 “user:password@”。 不允许使用片段(“#...”)和查询参数(“?...”)。
webhooks.name (string), 必需
准入 Webhook 的名称。应该是完全限定的名称,例如 imagepolicy.kubernetes.io,其中 “imagepolicy” 是 Webhook 的名称, kubernetes.io 是组织的名称。必需。
webhooks.sideEffects (string), 必需
sideEffects 说明此 Webhook 是否有副作用。可接受的值为:None、NoneOnDryRun(通过 v1beta1 创建的 Webhook 也可以指定 Some 或 Unknown)。 具有副作用的 Webhook 必须实现协调系统,因为请求可能会被准入链中的未来步骤拒绝,因此需要能够撤消副作用。 如果请求与带有 sideEffects == Unknown 或 Some 的 Webhook 匹配,则带有 dryRun 属性的请求将被自动拒绝。
webhooks.failurePolicy (string)
failurePolicy 定义如何处理来自准入端点的无法识别的错误 - 允许的值是 Ignore 或 Fail。默认为 Fail。
webhooks.matchPolicy (string)
matchPolicy 定义了如何使用 “rules” 列表来匹配传入的请求。允许的值为 “Exact” 或 “Equivalent”。
Exact: 仅当请求与指定规则完全匹配时才匹配请求。 例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源, 但 “rules” 仅包含
apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments"]
, 对 apps/v1beta1 或 extensions/v1beta1 的请求不会被发送到 Webhook。Equivalent: 如果针对的资源包含在 “rules” 中,即使请求是通过另一个 API 组或版本提交,也会匹配。 例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源, 并且 “rules” 仅包含
apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
, 对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为 “Equivalent”。
webhooks.namespaceSelector (LabelSelector)
namespaceSelector 根据对象的命名空间是否与 selector 匹配来决定是否在该对象上运行 Webhook。 如果对象本身是 Namespace,则针对 object.metadata.labels 执行匹配。 如果对象是其他集群作用域资源,则永远不会跳过 Webhook 的匹配动作。
例如,为了针对 “runlevel” 不为 “0” 或 “1” 的名字空间中的所有对象运行 Webhook; 你可以按如下方式设置 selector :
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
相反,如果你只想针对 “environment” 为 “prod” 或 “staging” 的名字空间中的对象运行 Webhook; 你可以按如下方式设置 selector:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有关标签选择算符的更多示例,请参阅 https://kubernetes.io/zh-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 支持时才能使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。 默认为空的 LabelSelector,匹配所有内容。
webhooks.reinvocationPolicy (string)
reinvocationPolicy 表示这个 Webhook 是否可以被多次调用,作为一次准入评估的一部分。可取值有 “Never” 和 “IfNeeded”。
- Never: 在一次录取评估中,Webhook 被调用的次数不会超过一次。
- IfNeeded:如果被录取的对象在被最初的 Webhook 调用后又被其他录取插件修改, 那么该 Webhook 将至少被额外调用一次作为录取评估的一部分。 指定此选项的 Webhook 必须是幂等的,能够处理它们之前承认的对象。 注意:不保证额外调用的次数正好为1。 如果额外的调用导致对对象的进一步修改,Webhook 不保证会再次被调用。 使用该选项的 Webhook 可能会被重新排序,以最小化额外调用的数量。 在保证所有的变更都完成后验证一个对象,使用验证性质的准入 Webhook 代替。
默认值为 “Never” 。
webhooks.rules ([]RuleWithOperations)
rules 描述了 Webhook 关心的资源/子资源上有哪些操作。Webhook 关心操作是否匹配任何rules。 但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于只能完全禁用插件才能恢复的状态, ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在处理 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求时被调用。
RuleWithOperations 是操作和资源的元组。建议确保所有元组组合都是有效的。
webhooks.rules.apiGroups ([]string)
Atomic: 将在合并期间被替换
apiGroups 是资源所属的 API 组列表。
*
是所有组。 如果存在*
,则列表的长度必须为 1。必需。
webhooks.rules.apiVersions ([]string)
Atomic: 将在合并期间被替换
apiVersions 是资源所属的 API 版本列表。
*
是所有版本。 如果存在*
,则列表的长度必须为 1。必需。
webhooks.rules.operations ([]string)
Atomic: 将在合并期间被替换
operations 是准入 Webhook 所关心的操作 —— CREATE、UPDATE、DELETE、CONNECT 或用来指代所有已知操作以及将来可能添加的准入操作的
*
。 如果存在*
,则列表的长度必须为 1。必需。
webhooks.rules.resources ([]string)
Atomic: 将在合并期间被替换
resources 是此规则适用的资源列表。
pods
表示 pods,'pods/log' 表示 pods 的日志子资源。*
表示所有资源,但不是子资源。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 秒。
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), 必需
MutatingWebhookConfiguration 列表。
操作
get
读取指定的 MutatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
MutatingWebhookConfiguration 的名称。
pretty (查询参数): string
响应
200 (MutatingWebhookConfiguration): OK
401: Unauthorized
list
列出或观察 MutatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
allowWatchBookmarks (查询参数): boolean
continue (查询参数): string
fieldSelector (查询参数): string
fieldSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
timeoutSeconds (查询参数): integer
watch (查询参数): boolean
响应
200 (MutatingWebhookConfigurationList): OK
401: Unauthorized
create
创建一个 MutatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
- body: MutatingWebhookConfiguration, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
pretty (查询参数): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
202 (MutatingWebhookConfiguration): Accepted
401: Unauthorized
update
替换指定的 MutatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
MutatingWebhookConfiguration 的名称。
- body: MutatingWebhookConfiguration, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
pretty (查询参数): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
patch
部分更新指定的 MutatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
MutatingWebhookConfiguration 的名称。
- body: Patch, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
force (查询参数): boolean
pretty (查询参数): string
响应
200 (MutatingWebhookConfiguration): OK
201 (MutatingWebhookConfiguration): Created
401: Unauthorized
delete
删除 MutatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
MutatingWebhookConfiguration 的名称。
body: DeleteOptions
dryRun (查询参数): string
gracePeriodSeconds (查询参数): integer
pretty (查询参数): string
propagationPolicy (查询参数): string
响应
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
删除 MutatingWebhookConfiguration 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations
参数
- body: DeleteOptions
continue (查询参数): string
dryRun (查询参数): string
fieldSelector (查询参数): string
gracePeriodSeconds (查询参数): integer
labelSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
propagationPolicy (查询参数): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
timeoutSeconds (查询参数): integer
响应
200 (Status): OK
401: Unauthorized
3 - 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)
补丁策略:根据
name
键执行合并操作webhooks 是 Webhook 以及受影响的资源和操作的列表。
ValidatingWebhook 描述了一个准入 Webhook 及其适用的资源和操作。
webhooks.admissionReviewVersions ([]string), 必需
admissionReviewVersions 是 Webhook 期望的首选
AdmissionReview
版本的有序列表。 API 服务器将尝试使用它支持的列表中的第一个版本。如果 API 服务器不支持此列表中指定的版本,则此对象将验证失败。 如果持久化的 Webhook 配置指定了允许的版本,并且不包括 API 服务器已知的任何版本,则对 Webhook 的调用将失败并受失败策略的约束。
webhooks.clientConfig (WebhookClientConfig), 必需
clientConfig 定义了如何与 Webhook 通信。必需。
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 的服务上的端口。默认为 443 以实现向后兼容性。
port
应该是一个有效的端口号(包括 1-65535)。
webhooks.clientConfig.url (string)
url
以标准 URL 形式(scheme://host:port/path
)给出了 Webhook 的位置。必须指定url
或service
中的一个。host
不应指代在集群中运行的服务;请改用service
字段。在某些 apiserver 中,可能会通过外部 DNS 解析host
。 (例如,kube-apiserver
无法解析集群内 DNS,因为这会违反分层原理)。host
也可以是 IP 地址。请注意,使用
localhost
或127.0.0.1
作为host
是有风险的,除非你非常小心地在运行 apiserver 的所有主机上运行此 Webhook, 而这些 API 服务器可能需要调用此 Webhook。此类部署可能是不可移植的,即不容易在新集群中重复安装。该方案必须是 “https”;URL 必须以 “https://” 开头。
路径是可选的,如果存在,可以是 URL 中允许的任何字符串。你可以使用路径将任意字符串传递给 Webhook,例如集群标识符。
不允许使用用户或基本身份验证,例如不允许使用 “user:password@”。 不允许使用片段(“#...”)和查询参数(“?...”)。
webhooks.name (string), 必需
准入 Webhook 的名称。应该是完全限定的名称,例如 imagepolicy.kubernetes.io,其中 “imagepolicy” 是 Webhook 的名称, kubernetes.io 是组织的名称。必需。
- webhooks.sideEffects (string), 必需
sideEffects 说明此 Webhook 是否有副作用。可接受的值为:None、NoneOnDryRun(通过 v1beta1 创建的 Webhook 也可以指定 Some 或 Unknown)。 具有副作用的 Webhook 必须实现协调系统,因为请求可能会被准入链中的未来步骤拒绝,因此需要能够撤消副作用。 如果请求与带有 sideEffects == Unknown 或 Some 的 Webhook 匹配,则带有 dryRun 属性的请求将被自动拒绝。
webhooks.failurePolicy (string)
failurePolicy 定义了如何处理来自准入端点的无法识别的错误 - 允许的值是 Ignore 或 Fail。默认为 Fail。
webhooks.matchPolicy (string)
matchPolicy 定义了如何使用 "rules" 列表来匹配传入的请求。允许的值为 "Exact" 或 "Equivalent"。
Exact: 仅当请求与指定规则完全匹配时才匹配请求。 例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源, 但 “rules” 仅包含
apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
, 对 apps/v1beta1 或 extensions/v1beta1 的请求不会被发送到 Webhook。Equivalent: 如果针对的资源包含在 “rules” 中,即使是通过另一个 API 组或版本,也视作匹配请求。 例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments 资源, 并且 “rules” 仅包含
apiGroups:["apps"]、apiVersions:["v1"]、resources:["deployments "]
, 对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 Webhook。
默认为 “Equivalent”。
webhooks.namespaceSelector (LabelSelector)
namespaceSelector 根据对象的命名空间是否与 selector 匹配来决定是否在该对象上运行 Webhook。
如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。 如果对象是另一个集群范围的资源,则永远不会跳过 Webhook 执行匹配。
例如,在命名空间与 “0” 或 “1” 的 “runlevel” 不关联的任何对象上运行 Webhook; 你可以按如下方式设置 selector :
"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }
相反,如果你只想在命名空间与 “prod” 或 “staging” 的 “environment” 相关联的对象上运行 Webhook;
你可以按如下方式设置 selector:
"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }
有关标签选择算符的更多示例,请参阅
https://kubernetes.io/zh-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 支持时才能使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。 默认为空的 LabelSelector,匹配所有内容。
webhooks.rules ([]RuleWithOperations)
rules 描述了 Webhook 关心的资源/子资源上有哪些操作。Webhook 关心操作是否匹配任何rules。 但是,为了防止 ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 将集群置于只能完全禁用插件才能恢复的状态, ValidatingAdmissionWebhooks 和 MutatingAdmissionWebhooks 永远不会在处理 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 对象的准入请求被调用。
RuleWithOperations 是操作和资源的元组。建议确保所有元组组合都是有效的。
webhooks.rules.apiGroups ([]string)
原子性: 合并期间会被替换
apiGroups 是资源所属的 API 组列表。'' 是所有组。 如果存在 '',则列表的长度必须为 1。必需。
webhooks.rules.apiVersions ([]string)
原子性: 合并期间会被替换
apiVersions 是资源所属的 API 版本列表。'' 是所有版本。 如果存在 '',则列表的长度必须为 1。必需。
webhooks.rules.operations ([]string)
原子性: 合并期间会被替换
operations 是准入 Webhook 所关心的操作 —— CREATE、UPDATE、DELETE、CONNECT 或用来指代所有已知操作以及将来可能添加的准入操作的
*
。 如果存在 '*',则列表的长度必须为 1。必需。
webhooks.rules.resources ([]string)
原子性: 合并期间会被替换
resources 是此规则适用的资源列表。
'pods' 表示 pods,'pods/log' 表示 pods 的日志子资源。'' 表示所有资源,但不是子资源。 '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 的列表。
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), 必需
ValidatingWebhookConfiguration 列表。
操作
get
读取指定的 ValidatingWebhookConfiguration
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
ValidatingWebhookConfiguration 的名称。
pretty (查询参数): string
响应
200 (ValidatingWebhookConfiguration): OK
401: Unauthorized
list
列出或观察 ValidatingWebhookConfiguration 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
allowWatchBookmarks (查询参数): boolean
continue (查询参数): string
fieldSelector (查询参数): string
fieldSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
timeoutSeconds (查询参数): integer
watch (查询参数): boolean
响应
200 (ValidatingWebhookConfigurationList): OK
401: Unauthorized
create
创建一个 ValidatingWebhookConfiguration
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
- body: ValidatingWebhookConfiguration, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
pretty (查询参数): string
响应
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
202 (ValidatingWebhookConfiguration): Accepted
401: Unauthorized
update
替换指定的 ValidatingWebhookConfiguration
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
ValidatingWebhookConfiguration 的名称。
- body: ValidatingWebhookConfiguration, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
pretty (查询参数): string
响应
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
patch
部分更新指定的 ValidatingWebhookConfiguration
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
ValidatingWebhookConfiguration 的名称。
- body: Patch, 必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
force (查询参数): boolean
pretty (查询参数): string
响应
200 (ValidatingWebhookConfiguration): OK
201 (ValidatingWebhookConfiguration): Created
401: Unauthorized
delete
删除 ValidatingWebhookConfiguration
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations/{name}
参数
name (路径参数): string, 必需
ValidatingWebhookConfiguration 的名称。
body: DeleteOptions
dryRun (查询参数): string
gracePeriodSeconds (查询参数): integer
pretty (查询参数): string
propagationPolicy (查询参数): string
响应
200 (Status): OK
202 (Status): Accepted
401: Unauthorized
deletecollection
删除 ValidatingWebhookConfiguration 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations
参数
- body: DeleteOptions
continue (查询参数): string
dryRun (查询参数): string
fieldSelector (查询参数): string
gracePeriodSeconds (查询参数): integer
labelSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
propagationPolicy (查询参数): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
timeoutSeconds (查询参数): integer
响应
200 (Status): OK
401: Unauthorized