CertificateSigningRequest
apiVersion: certificates.k8s.io/v1
import "k8s.io/api/certificates/v1"
CertificateSigningRequest
CertificateSigningRequest 对象提供了一种机制,通过提交证书签名请求并异步批准和颁发,来获取 x509 证书。
Kubelet 使用此 API 来获取
- 客户端证书,用于向 kube-apiserver 进行身份验证(使用 "kubernetes.io/kube-apiserver-client-kubelet" signerName)。
- 用于 TLS 端点的服务证书,kube-apiserver 可以安全地连接到这些端点(使用 "kubernetes.io/kubelet-serving" signerName)。
此 API 可用于请求客户端证书,以向 kube-apiserver 进行身份验证(使用 "kubernetes.io/kube-apiserver-client" signerName),或从自定义的非 Kubernetes 签名者获取证书。
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata (ObjectMeta)
spec (CertificateSigningRequestSpec), 必需
spec 包含证书请求,创建后不可变。创建时只能设置 request、signerName、expirationSeconds 和 usages 字段。其他字段由 Kubernetes 派生,用户无法修改。
status (CertificateSigningRequestStatus)
status 包含有关请求是否被批准或拒绝的信息,以及签名者颁发的证书,或指示签名者失败的失败条件。
CertificateSigningRequestSpec
CertificateSigningRequestSpec 包含证书请求。
request ([]byte), 必需
原子操作:在合并期间将被替换
request 包含一个以 “CERTIFICATE REQUEST” PEM 块编码的 x509 证书签名请求。当序列化为 JSON 或 YAML 时,数据还会进行 base64 编码。
signerName (string), 必需
signerName 指示请求的签名者,并且是一个限定名称。
CertificateSigningRequests 的列表/监视请求可以使用 "spec.signerName=NAME" fieldSelector 来过滤此字段。
众所周知的 Kubernetes 签名者包括:
- "kubernetes.io/kube-apiserver-client": 颁发可用于向 kube-apiserver 进行身份验证的客户端证书。 kube-controller-manager 永远不会自动批准对此签名者的请求,可以由 kube-controller-manager 中的 "csrsigning" 控制器颁发。
- "kubernetes.io/kube-apiserver-client-kubelet": 颁发 kubelet 用来向 kube-apiserver 进行身份验证的客户端证书。 此签名者的请求可以由 kube-controller-manager 中的 “csrapproving” 控制器自动批准,并且可以由 kube-controller-manager 中的 “csrsigning” 控制器颁发。
- "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
还可以指定自定义的 signerName。签名者定义
- 信任分发:如何分发信任(CA 包)。
- 允许的主题:以及在请求不允许的主题时的行为。
- 请求中必需、允许或禁止的 x509 扩展(包括是否允许 subjectAltNames,哪些类型、对允许值的限制),以及在请求不允许的扩展时的行为。
- 必需、允许或禁止的密钥用法/扩展密钥用法。
- 到期/证书生存期:是否由签名者固定,由管理员配置。
- 是否允许对 CA 证书的请求。
expirationSeconds (int32)
expirationSeconds 是请求颁发的证书的有效期限。证书签名者可能会颁发具有不同有效期的证书,因此客户端必须检查颁发的证书中的 notBefore 和 notAfter 字段之间的增量,以确定实际的有效期。
只要请求的持续时间不大于 Kubernetes 控制器管理器 --cluster-signing-duration CLI 标志所允许的最大持续时间,v1.22+ 内部版本的众所周知的 Kubernetes 签名者将遵守此字段。
证书签名者可能因各种原因而不遵守此字段
- 旧的签名者不知道此字段(例如 v1.22 之前的内部版本)
- 配置的最大值短于请求的持续时间的签名者
- 配置的最小值长于请求的持续时间的签名者
expirationSeconds 的最小有效值为 600,即 10 分钟。
extra (map[string][]string)
extra 包含创建 CertificateSigningRequest 的用户的额外属性。由 API 服务器在创建时填充并且不可变。
groups ([]string)
原子操作:在合并期间将被替换
groups 包含创建 CertificateSigningRequest 的用户的组成员身份。由 API 服务器在创建时填充并且不可变。
uid (string)
uid 包含创建 CertificateSigningRequest 的用户的 uid。由 API 服务器在创建时填充并且不可变。
usages ([]string)
原子操作:在合并期间将被替换
usages 指定颁发的证书中请求的一组密钥用法。
对 TLS 客户端证书的请求通常请求:“数字签名”、“密钥加密”、“客户端身份验证”。
对 TLS 服务证书的请求通常请求:“密钥加密”、“数字签名”、“服务器身份验证”。
有效值为:“签名”、“数字签名”、“内容承诺”、“密钥加密”、“密钥协议”、“数据加密”、“证书签名”、“crl 签名”、“仅加密”、“仅解密”、“任何”、“服务器身份验证”、“客户端身份验证”、“代码签名”、“电子邮件保护”、“s/mime”、“ipsec 端系统”、“ipsec 隧道”、“ipsec 用户”、“时间戳”、“ocsp 签名”、“微软 sgc”、“网景 sgc”
username (string)
username 包含创建 CertificateSigningRequest 的用户的名称。由 API 服务器在创建时填充并且不可变。
CertificateSigningRequestStatus
CertificateSigningRequestStatus 包含用于指示请求的批准/拒绝/失败状态的条件,以及颁发的证书。
certificate ([]byte)
原子操作:在合并期间将被替换
在存在 Approved 条件之后,证书由签名者使用颁发的证书填充。此字段通过 /status 子资源设置。一旦填充,此字段是不可变的。
如果证书签名请求被拒绝,则会添加一个类型为 “Denied” 的条件,并且此字段保持为空。如果签名者无法颁发证书,则会添加一个类型为 “Failed” 的条件,并且此字段保持为空。
验证要求
- 证书必须包含一个或多个 PEM 块。
- 所有 PEM 块必须具有 “CERTIFICATE” 标签,不包含任何标头,并且编码的数据必须是 RFC5280 第 4 节中描述的 BER 编码的 ASN.1 证书结构。
- 非 PEM 内容可能出现在 “CERTIFICATE” PEM 块之前或之后,并且未经过验证,以便允许 RFC7468 第 5.2 节中描述的解释性文本。
如果存在多个 PEM 块,并且请求的 spec.signerName 的定义没有另外指明,则第一个块是颁发的证书,后续块应被视为中间证书,并在 TLS 握手中呈现。
该证书以 PEM 格式编码。
当序列化为 JSON 或 YAML 时,数据还会进行 base64 编码,因此它由以下内容组成
base64( -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- )
conditions ([]CertificateSigningRequestCondition)
映射:在合并期间将保留类型键上的唯一值
应用于请求的条件。已知条件为 “Approved”、“Denied” 和 “Failed”。
CertificateSigningRequestCondition 描述 CertificateSigningRequest 对象的条件
conditions.status (string), 必需
条件的 status,为 True、False、Unknown 中的一个。“Approved”、“Denied” 和 “Failed” 条件可能不是 “False” 或 “Unknown”。
conditions.type (string), 必需
条件的类型。已知条件为 “Approved”、“Denied” 和 “Failed”。
通过 /approval 子资源添加 “Approved” 条件,指示该请求已获批准,应由签名者颁发。
通过 /approval 子资源添加 “Denied” 条件,指示该请求被拒绝,不应由签名者颁发。
通过 /status 子资源添加 “Failed” 条件,指示签名者未能颁发证书。
“Approved” 和 “Denied” 条件是互斥的。“Approved”、“Denied” 和 “Failed” 条件一旦添加就无法删除。
只允许给定类型的单个条件。
conditions.lastTransitionTime (Time)
lastTransitionTime 是条件最后一次从一个状态转换为另一个状态的时间。如果未设置,当添加新的条件类型或更改现有条件的状态时,服务器会将此值默认设置为当前时间。
Time 是对 time.Time 的包装,它支持正确地编排为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
conditions.lastUpdateTime (Time)
lastUpdateTime 是此条件最后更新的时间
Time 是对 time.Time 的包装,它支持正确地编排为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
conditions.message (字符串)
message 包含一条人类可读的消息,其中包含有关请求状态的详细信息
conditions.reason (字符串)
reason 指示请求状态的简要原因
CertificateSigningRequestList
CertificateSigningRequestList 是 CertificateSigningRequest 对象的集合
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequestList
metadata (ListMeta)
items ([]CertificateSigningRequest), 必需
items 是 CertificateSigningRequest 对象的集合
操作
get
读取指定的 CertificateSigningRequest
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
401: 未授权
get
读取指定的 CertificateSigningRequest 的批准信息
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
401: 未授权
get
读取指定的 CertificateSigningRequest 的状态
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
401: 未授权
list
列出或监视 CertificateSigningRequest 类型的对象
HTTP 请求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
allowWatchBookmarks (查询中): 布尔值
continue (查询中): 字符串
fieldSelector (查询中): 字符串
labelSelector (查询中): 字符串
limit (查询中): 整数
pretty (查询中): 字符串
resourceVersion (查询中): 字符串
resourceVersionMatch (查询中): 字符串
sendInitialEvents (查询中): 布尔值
timeoutSeconds (查询中): 整数
watch (查询中): 布尔值
响应
200 (CertificateSigningRequestList): 成功
401: 未授权
create
创建一个 CertificateSigningRequest
HTTP 请求
POST /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
body: CertificateSigningRequest, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
202 (CertificateSigningRequest): 已接受
401: 未授权
update
替换指定的 CertificateSigningRequest
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: CertificateSigningRequest, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
update
替换指定的 CertificateSigningRequest 的批准信息
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: CertificateSigningRequest, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
update
替换指定的 CertificateSigningRequest 的状态
HTTP 请求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: CertificateSigningRequest, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
patch
部分更新指定的 CertificateSigningRequest
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: Patch, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
force (查询中): 布尔值
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
patch
部分更新指定的 CertificateSigningRequest 的批准信息
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: Patch, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
force (查询中): 布尔值
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
patch
部分更新指定的 CertificateSigningRequest 的状态
HTTP 请求
PATCH /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: Patch, 必需
dryRun (查询中): 字符串
fieldManager (查询中): 字符串
fieldValidation (查询中): 字符串
force (查询中): 布尔值
pretty (查询中): 字符串
响应
200 (CertificateSigningRequest): 成功
201 (CertificateSigningRequest): 已创建
401: 未授权
delete
删除一个 CertificateSigningRequest
HTTP 请求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
参数
name (路径中): 字符串,必需
CertificateSigningRequest 的名称
body: DeleteOptions
dryRun (查询中): 字符串
gracePeriodSeconds (查询中): 整数
pretty (查询中): 字符串
propagationPolicy (查询中): 字符串
响应
200 (Status): 成功
202 (Status): 已接受
401: 未授权
deletecollection
删除 CertificateSigningRequest 的集合
HTTP 请求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
参数
body: DeleteOptions
continue (查询中): 字符串
dryRun (查询中): 字符串
fieldSelector (查询中): 字符串
gracePeriodSeconds (查询中): 整数
labelSelector (查询中): 字符串
limit (查询中): 整数
pretty (查询中): 字符串
propagationPolicy (查询中): 字符串
resourceVersion (查询中): 字符串
resourceVersionMatch (查询中): 字符串
sendInitialEvents (查询中): 布尔值
timeoutSeconds (查询中): 整数
响应
200 (Status): 成功
401: 未授权
此页面为自动生成。
如果您计划报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。