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. 用于 TLS 端点的服务证书,kube-apiserver 可以安全地连接到这些端点(使用“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 包含证书请求,并且在创建后不可变。在创建时,只能设置 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”字段选择器对该字段进行过滤。

    众所周知的 Kubernetes 签名者是

    1. "kubernetes.io/kube-apiserver-client": 颁发可用于向 kube-apiserver 进行身份验证的客户端证书。对该签名者的请求永远不会由 kube-controller-manager 自动批准,可以由 kube-controller-manager 中的“csrsigning”控制器发出。
    2. "kubernetes.io/kube-apiserver-client-kubelet": 颁发 kubelets 用于向 kube-apiserver 进行身份验证的客户端证书。对该签名者的请求可以由 kube-controller-manager 中的“csrapproving”控制器自动批准,也可以由 kube-controller-manager 中的“csrsigning”控制器发出。
    3. "kubernetes.io/kubelet-serving" 颁发 kubelets 用于服务 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 扩展(包括是否允许主题备用名称、类型、对允许值的限制)以及请求被拒绝的扩展时的行为。
    4. 必需的、允许的或禁止的关键用法/扩展关键用法。
    5. 到期/证书生命周期:签名者是否固定它,管理员是否可配置它。
    6. 是否允许请求 CA 证书。
  • expirationSeconds (int32)

    expirationSeconds 是颁发的证书请求的有效期。证书签名者可能会颁发有效期不同的证书,因此客户端必须检查颁发的证书中 notBefore 和 and 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 的用户的组成员资格。由 API 服务器在创建时填充,并且不可变。

  • uid (string)

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

  • usages ([]string)

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

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

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

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

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

  • username (string)

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

CertificateSigningRequestStatus

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


  • certificate ([]byte)

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

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

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

    验证要求

    1. certificate 必须包含一个或多个 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), 必需

      条件的状态,可以是 True、False 或 Unknown。Approved、Denied 和 Failed 条件不能是“False”或“Unknown”。

    • conditions.type (string), 必需

      条件的类型。已知条件是“Approved”、“Denied”和“Failed”。

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

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

      “Failed”条件通过 /status 子资源添加,表示签名者无法颁发证书。

      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 (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): 正常

401: 未经授权

get 读取指定的 CertificateSigningRequest 的批准

HTTP 请求

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

参数

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

    CertificateSigningRequest 的名称

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): 正常

401: 未经授权

get 读取指定的 CertificateSigningRequest 的状态

HTTP 请求

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

参数

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

    CertificateSigningRequest 的名称

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): 正常

401: 未经授权

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

HTTP 请求

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

参数

响应

200 (证书签名请求列表): 确定

401: 未经授权

创建 创建一个证书签名请求

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

202 (证书签名请求): 已接受

401: 未经授权

更新 替换指定的证书签名请求

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

更新 替换指定证书签名请求的批准

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

更新 替换指定证书签名请求的状态

HTTP 请求

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

参数

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

修补 部分更新指定的证书签名请求

HTTP 请求

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

参数

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

    CertificateSigningRequest 的名称

  • 正文: 修补, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

修补 部分更新指定证书签名请求的批准

HTTP 请求

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

参数

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

    CertificateSigningRequest 的名称

  • 正文: 修补, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

修补 部分更新指定证书签名请求的状态

HTTP 请求

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

参数

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

    CertificateSigningRequest 的名称

  • 正文: 修补, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): string

    pretty

响应

200 (CertificateSigningRequest): 正常

201 (证书签名请求): 已创建

401: 未经授权

删除 删除一个证书签名请求

HTTP 请求

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

参数

响应

200 (状态): 确定

202 (状态): 已接受

401: 未经授权

删除集合 删除证书签名请求集合

HTTP 请求

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

参数

响应

200 (状态): 确定

401: 未经授权

此页面是自动生成的。

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

最后修改时间为 2023 年 4 月 3 日上午 8:22 PST: API Ref 多页 v1.27 (7b39e9a9ec)