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)