CertificateSigningRequest

CertificateSigningRequest 对象提供了一种机制,允许用户通过提交证书签名请求来获取 x509 证书,并由其异步审批和颁发。

apiVersion: certificates.k8s.io/v1

import "k8s.io/api/certificates/v1"

CertificateSigningRequest

CertificateSigningRequest 对象提供了一种机制,允许用户通过提交证书签名请求来获取 x509 证书,并由其异步审批和颁发。

Kubelets 使用此 API 获取

  1. 客户端证书,用于向 kube-apiserver 进行身份验证(使用 "kubernetes.io/kube-apiserver-client-kubelet" 签名者名称)。
  2. 服务证书,用于 kube-apiserver 可以安全连接的 TLS 端点(使用 "kubernetes.io/kubelet-serving" 签名者名称)。

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


  • apiVersion: certificates.k8s.io/v1

  • kind: CertificateSigningRequest

  • metadata (ObjectMeta)

  • spec (CertificateSigningRequestSpec),必填

    spec 包含证书请求,创建后不可更改。只有请求、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" 字段选择器对此字段进行过滤。

    众所周知的 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 证书请求。
  • expirationSeconds (int32)

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

    v1.22+ 内置的 Kubernetes 知名签名者实现将遵循此字段,只要请求的持续时间不大于它们根据 Kubernetes 控制器管理器的 --cluster-signing-duration CLI 标志所遵循的最大持续时间。

    证书签名者可能出于各种原因不遵循此字段

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

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

  • extra (map[string][]string)

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

  • groups ([]string)

    原子性:在合并期间将被替换

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

  • uid (string)

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

  • usages ([]string)

    原子性:在合并期间将被替换

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

    TLS 客户端证书的请求通常请求:"数字签名"、"密钥加密"、"客户端认证"。

    TLS 服务证书的请求通常请求:"密钥加密"、"数字签名"、"服务器认证"。

    有效值包括:"signing"、"digital signature"、"content commitment"、"key encipherment"、"key agreement"、"data encipherment"、"cert sign"、"crl sign"、"encipher only"、"decipher only"、"any"、"server auth"、"client auth"、"code signing"、"email protection"、"s/mime"、"ipsec end system"、"ipsec tunnel"、"ipsec user"、"timestamping"、"ocsp signing"、"microsoft sgc"、"netscape sgc"

  • username (string)

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

CertificateSigningRequestStatus

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


  • certificate ([]byte)

    原子性:在合并期间将被替换

    在存在 Approved 条件后,certificate 由签名者填充已颁发的证书。此字段通过 /status 子资源设置。一旦填充,此字段不可变。

    如果证书签名请求被拒绝,则添加类型为 "Denied" 的条件,此字段保持为空。如果签名者无法颁发证书,则添加类型为 "Failed" 的条件,此字段保持为空。

    验证要求

    1. 证书必须包含一个或多个 PEM 块。
    2. 所有 PEM 块都必须具有 "CERTIFICATE" 标签,不包含任何标头,并且编码数据必须是 RFC5280 第 4 节中描述的 BER 编码 ASN.1 证书结构。
    3. 非 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 是条件上次从一个状态转换为另一个状态的时间。如果未设置,当添加新的条件类型或更改现有条件的 status 时,服务器会将其默认为当前时间。

      Time 是 time.Time 的一个包装器,支持正确地编组到 YAML 和 JSON。提供了 time 包提供的许多工厂方法的包装器。

    • conditions.lastUpdateTime (Time)

      lastUpdateTime 是此条件上次更新的时间

      Time 是 time.Time 的一个包装器,支持正确地编组到 YAML 和 JSON。提供了 time 包提供的许多工厂方法的包装器。

    • conditions.message (string)

      message 包含人类可读的消息,其中包含有关请求状态的详细信息

    • conditions.reason (string)

      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 (在路径中): string,必填

    CertificateSigningRequest 的名称

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

401: 未授权

get 读取指定的 CertificateSigningRequest 的批准状态

HTTP 请求

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

参数

  • name (在路径中): string,必填

    CertificateSigningRequest 的名称

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

401: 未授权

get 读取指定的 CertificateSigningRequest 的状态

HTTP 请求

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

参数

  • name (在路径中): string,必填

    CertificateSigningRequest 的名称

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

401: 未授权

list 列出或监视 CertificateSigningRequest 类型的对象

HTTP 请求

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

参数

响应

200 (CertificateSigningRequestList): OK

401: 未授权

create 创建一个 CertificateSigningRequest

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

202 (CertificateSigningRequest): Accepted

401: 未授权

update 替换指定的 CertificateSigningRequest

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

update 替换指定的 CertificateSigningRequest 的批准状态

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

update 替换指定的 CertificateSigningRequest 的状态

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

patch 部分更新指定的 CertificateSigningRequest

HTTP 请求

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

参数

  • name (在路径中): string,必填

    CertificateSigningRequest 的名称

  • body: Patch,必需

  • dryRun (在查询中): string

    dryRun

  • fieldManager (在查询中): string

    fieldManager

  • fieldValidation (在查询中): string

    fieldValidation

  • force (在查询中): boolean

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

patch 部分更新指定的 CertificateSigningRequest 的批准状态

HTTP 请求

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

参数

  • name (在路径中): string,必填

    CertificateSigningRequest 的名称

  • body: Patch,必需

  • dryRun (在查询中): string

    dryRun

  • fieldManager (在查询中): string

    fieldManager

  • fieldValidation (在查询中): string

    fieldValidation

  • force (在查询中): boolean

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

patch 部分更新指定的 CertificateSigningRequest 的状态

HTTP 请求

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

参数

  • name (在路径中): string,必填

    CertificateSigningRequest 的名称

  • body: Patch,必需

  • dryRun (在查询中): string

    dryRun

  • fieldManager (在查询中): string

    fieldManager

  • fieldValidation (在查询中): string

    fieldValidation

  • force (在查询中): boolean

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): Created

401: 未授权

delete 删除 CertificateSigningRequest

HTTP 请求

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

参数

响应

200 (Status): OK

202 (Status): 已接受

401: 未授权

deletecollection 删除 CertificateSigningRequest 集合

HTTP 请求

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

参数

响应

200 (Status): OK

401: 未授权

本页面是自动生成的。

如果你打算报告此页面存在的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

上次修改时间:2025 年 4 月 9 日太平洋标准时间下午 6:36:更新 v1.32 的 API 参考文档 (a3b579d035)