×
描述

CertificateSigningRequest 对象提供了一种机制,通过提交证书签名请求并使其异步批准和签发来获取 x509 证书。

Kubelet 使用此 API 获取:1. 用于向 kube-apiserver 进行身份验证的客户端证书(使用 "kubernetes.io/kube-apiserver-client-kubelet" signerName)。2. kube-apiserver 可以安全连接到的 TLS 端点的服务证书(使用 "kubernetes.io/kubelet-serving" signerName)。

此 API 可用于请求用于向 kube-apiserver 进行身份验证的客户端证书(使用 "kubernetes.io/kube-apiserver-client" signerName),或从自定义非 Kubernetes 签名者处获取证书。

类型

对象

必需
  • spec

规格

属性 类型 描述

apiVersion

字符串

APIVersion 定义了对象的此表示形式的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

字符串

Kind 是一个字符串值,表示此对象表示的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。不能更新。使用驼峰式命名法。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

ObjectMeta

spec

对象

CertificateSigningRequestSpec 包含证书请求。

status

对象

CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败状态以及已颁发证书的条件。

.spec

描述

CertificateSigningRequestSpec 包含证书请求。

类型

对象

必需
  • request

  • signerName

属性 类型 描述

expirationSeconds

整数

expirationSeconds 是请求的已颁发证书的有效期持续时间。证书签名者可能会签发具有不同有效期持续时间的证书,因此客户端必须检查已颁发证书中 notBefore 和 notAfter 字段之间的差值以确定实际持续时间。

v1.22+ 中 Kubernetes 众所周知的签名者的树内实现将尊重此字段,只要请求的持续时间不超过它们根据 Kubernetes 控制器管理器的 --cluster-signing-duration CLI 标志将尊重的最大持续时间。

证书签名者可能由于各种原因而不尊重此字段

1. 不了解此字段的旧签名者(例如 v1.22 之前的树内实现)2. 配置的最大值短于请求持续时间的签名者 3. 配置的最小值长于请求持续时间的签名者

expirationSeconds 的最小有效值为 600,即 10 分钟。

extra

对象

extra 包含创建 CertificateSigningRequest 的用户的额外属性。由 API 服务器在创建时填充且不可变。

extra{}

数组(字符串)

groups

数组(字符串)

groups 包含创建 CertificateSigningRequest 的用户的组成员身份。由 API 服务器在创建时填充且不可变。

request

字符串

request 包含以“CERTIFICATE REQUEST”PEM 块编码的 x509 证书签名请求。当序列化为 JSON 或 YAML 时,数据还会进行 base64 编码。

signerName

字符串

signerName 指示请求的签名者,并且是限定名称。

CertificateSigningRequests 的列表/监视请求可以使用“spec.signerName=NAME”fieldSelector 对此字段进行过滤。

众所周知的 Kubernetes 签名者是:1. “kubernetes.io/kube-apiserver-client”:签发可用于向 kube-apiserver 进行身份验证的客户端证书。对该签名者的请求永远不会被 kube-controller-manager 自动批准,可以由 kube-controller-manager 中的“csrsigning”控制器签发。2. “kubernetes.io/kube-apiserver-client-kubelet”:签发 kubelet 用于向 kube-apiserver 进行身份验证的客户端证书。对该签名者的请求可以由 kube-controller-manager 中的“csrapproving”控制器自动批准,也可以由 kube-controller-manager 中的“csrsigning”控制器签发。3. “kubernetes.io/kubelet-serving”签发 kubelet 用于服务 TLS 端点的服务证书,kube-apiserver 可以安全地连接到这些端点。对该签名者的请求永远不会被 kube-controller-manager 自动批准,可以由 kube-controller-manager 中的“csrsigning”控制器签发。

更多详细信息,请访问 https://k8s.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers

也可以指定自定义的 signerNames。签名者定义:1. 信任分发:如何分发信任(CA 证书捆绑包)。2. 允许的主体:以及请求不允许的主体时的行为。3. 请求中必需的、允许的或禁止的 x509 扩展(包括是否允许 subjectAltNames,哪些类型,允许值的限制)以及请求不允许的扩展时的行为。4. 必需的、允许的或禁止的密钥用途/扩展密钥用途。5. 过期/证书生命周期:是否由签名者固定,是否由管理员配置。6. 是否允许 CA 证书请求。

uid

字符串

uid 包含创建 CertificateSigningRequest 的用户的 uid。在创建时由 API 服务器填充,且不可变。

usages

数组(字符串)

usages 指定在已颁发的证书中请求的一组密钥用途。

TLS 客户端证书请求通常请求:“数字签名”、“密钥加密”、“客户端身份验证”。

TLS 服务端证书请求通常请求:“密钥加密”、“数字签名”、“服务器身份验证”。

有效值为:“签名”、“数字签名”、“内容承诺”、“密钥加密”、“密钥协商”、“数据加密”、“证书签名”、“CRL 签名”、“仅加密”、“仅解密”、“任何”、“服务器身份验证”、“客户端身份验证”、“代码签名”、“电子邮件保护”、“S/MIME”、“IPsec 端系统”、“IPsec 隧道”、“IPsec 用户”、“时间戳”、“OCSP 签名”、“Microsoft SGC”、“Netscape SGC”

username

字符串

username 包含创建 CertificateSigningRequest 的用户的名称。在创建时由 API 服务器填充,且不可变。

.spec.extra

描述

extra 包含创建 CertificateSigningRequest 的用户的额外属性。由 API 服务器在创建时填充且不可变。

类型

对象

.status

描述

CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败状态以及已颁发证书的条件。

类型

对象

属性 类型 描述

certificate

字符串

在出现“已批准”状态后,certificate 由签名者填充已颁发的证书。此字段通过 /status 子资源设置。一旦填充,此字段将不可变。

如果证书签名请求被拒绝,则添加类型为“拒绝”的状态,此字段保持为空。如果签名者无法颁发证书,则添加类型为“失败”的状态,此字段保持为空。

验证要求:1. certificate 必须包含一个或多个 PEM 块。2. 所有 PEM 块都必须具有“CERTIFICATE”标签,不包含任何标头,并且编码数据必须是 RFC5280 第 4 节中描述的 BER 编码 ASN.1 证书结构。3. “CERTIFICATE” PEM 块之前或之后可能出现非 PEM 内容,且未经验证,允许解释性文本,如 RFC7468 第 5.2 节所述。

如果存在多个 PEM 块,并且请求的 spec.signerName 的定义未另行说明,则第一个块为已颁发的证书,后续块应视为中间证书并在 TLS 握手过程中呈现。

证书以 PEM 格式编码。

当序列化为 JSON 或 YAML 时,数据还会进行 base64 编码,因此它由以下内容组成:

base64( -----BEGIN CERTIFICATE----- …​ -----END CERTIFICATE----- )

conditions

数组

应用于请求的条件。“已批准”、“已拒绝”和“失败”是已知的条件。

conditions[]

对象

CertificateSigningRequestCondition 描述 CertificateSigningRequest 对象的条件

.status.conditions

描述

应用于请求的条件。“已批准”、“已拒绝”和“失败”是已知的条件。

类型

数组

.status.conditions[]

描述

CertificateSigningRequestCondition 描述 CertificateSigningRequest 对象的条件

类型

对象

必需
  • type

  • status

属性 类型 描述

lastTransitionTime

时间

lastTransitionTime 是条件上次从一种状态转换到另一种状态的时间。如果未设置,当添加新的条件类型或更改现有条件的状态时,服务器会将其默认为当前时间。

lastUpdateTime

时间

lastUpdateTime 是对此条件的最后一次更新的时间

message

字符串

message 包含关于请求状态的详细信息的人类可读消息

reason

字符串

reason 指示请求状态的简要原因

status

字符串

条件的状态,为 True、False、Unknown 之一。“已批准”、“已拒绝”和“失败”条件不能为“False”或“Unknown”。

type

字符串

条件的类型。已知的条件是“已批准”、“已拒绝”和“失败”。

通过 /approval 子资源添加“已批准”条件,表示请求已批准,应由签名者颁发。

通过 /approval 子资源添加“已拒绝”条件,表示请求已被拒绝,不应由签名者颁发。

通过 /status 子资源添加“失败”条件,表示签名者未能颁发证书。

“已批准”和“已拒绝”条件是互斥的。“已批准”、“已拒绝”和“失败”条件一旦添加就不能删除。

只允许一个给定类型的条件。

API 端点

提供以下 API 端点

  • /apis/certificates.k8s.io/v1/certificatesigningrequests

    • DELETE:删除 CertificateSigningRequest 集合

    • GET:列出或监视 CertificateSigningRequest 类型的对象

    • POST:创建一个 CertificateSigningRequest

  • /apis/certificates.k8s.io/v1/watch/certificatesigningrequests

    • GET:监视 CertificateSigningRequest 列表的单个更改。已弃用:改为使用列表操作的“watch”参数。

  • /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}

    • DELETE:删除一个 CertificateSigningRequest

    • GET:读取指定的 CertificateSigningRequest

    • PATCH:部分更新指定的 CertificateSigningRequest

    • PUT:替换指定的 CertificateSigningRequest

  • /apis/certificates.k8s.io/v1/watch/certificatesigningrequests/{name}

    • GET:监视 CertificateSigningRequest 类型对象的更改。已弃用:改为使用列表操作的“watch”参数,并使用“fieldSelector”参数将其过滤为单个项目。

  • /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status

    • GET:读取指定的 CertificateSigningRequest 的状态

    • PATCH:部分更新指定的 CertificateSigningRequest 的状态

    • PUT:替换指定的 CertificateSigningRequest 的状态

  • /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval

    • GET:读取指定的 CertificateSigningRequest 的批准

    • PATCH:部分更新指定的 CertificateSigningRequest 的批准

    • PUT:替换指定的 CertificateSigningRequest 的批准

/apis/certificates.k8s.io/v1/certificatesigningrequests

HTTP 方法

DELETE

描述

删除 CertificateSigningRequest 集合

表 1. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 2. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

401 - Unauthorized

HTTP 方法

GET

描述

列出或监视 CertificateSigningRequest 类型的对象

表 3. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequestList 模式

401 - Unauthorized

HTTP 方法

POST

描述

创建一个 CertificateSigningRequest

表 4. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 5. 请求体参数
参数 类型 描述

body

CertificateSigningRequest 模式

表 6. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

202 - 已接受

CertificateSigningRequest 模式

401 - Unauthorized

/apis/certificates.k8s.io/v1/watch/certificatesigningrequests

HTTP 方法

GET

描述

监视 CertificateSigningRequest 列表的单个更改。已弃用:请改用列表操作中的“watch”参数。

表 7. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - Unauthorized

/apis/certificates.k8s.io/v1/certificatesigningrequests/{name}

表 8. 全局路径参数
参数 类型 描述

name

字符串

CertificateSigningRequest 的名称

HTTP 方法

DELETE

描述

删除 CertificateSigningRequest

表 9. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 10. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

202 - 已接受

Status 模式

401 - Unauthorized

HTTP 方法

GET

描述

读取指定的 CertificateSigningRequest

表 11. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PATCH

描述

部分更新指定的 CertificateSigningRequest

表 12. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 13. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PUT

描述

替换指定的 CertificateSigningRequest

表 14. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 15. 请求体参数
参数 类型 描述

body

CertificateSigningRequest 模式

表 16. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized

/apis/certificates.k8s.io/v1/watch/certificatesigningrequests/{name}

表 17. 全局路径参数
参数 类型 描述

name

字符串

CertificateSigningRequest 的名称

HTTP 方法

GET

描述

监视 CertificateSigningRequest 对象的更改。已弃用:请改用列表操作中的“watch”参数,并使用“fieldSelector”参数过滤为单个项目。

表 18. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - Unauthorized

/apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status

表 19. 全局路径参数
参数 类型 描述

name

字符串

CertificateSigningRequest 的名称

HTTP 方法

GET

描述

读取指定的 CertificateSigningRequest 的状态

表 20. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PATCH

描述

部分更新指定的 CertificateSigningRequest 的状态

表 21. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 22. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PUT

描述

替换指定的 CertificateSigningRequest 的状态

表 23. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 24. 请求体参数
参数 类型 描述

body

CertificateSigningRequest 模式

表 25. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized

/apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval

表 26. 全局路径参数
参数 类型 描述

name

字符串

CertificateSigningRequest 的名称

HTTP 方法

GET

描述

读取指定的 CertificateSigningRequest 的批准信息

表 27. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PATCH

描述

部分更新指定的 CertificateSigningRequest 的批准信息

表 28. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 29. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized

HTTP 方法

PUT

描述

替换指定的 CertificateSigningRequest 的批准信息

表 30. 查询参数
参数 类型 描述

dryRun

字符串

出现时,表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略任何未知字段,这些字段将从对象中静默删除,并且将忽略解码器遇到的所有重复字段,只保留最后一个。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍将成功,并且只会保留任何重复字段中的最后一个。这是 v1.23 及更高版本的默认值。- Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,这将导致请求失败并返回 BadRequest 错误。服务器返回的错误将包含遇到的所有未知和重复字段。

表 31. 请求体参数
参数 类型 描述

body

CertificateSigningRequest 模式

表 32. HTTP 响应
HTTP 代码 响应体

200 - OK

CertificateSigningRequest 模式

201 - 已创建

CertificateSigningRequest 模式

401 - Unauthorized