CertificateSigningRequest

CertificateSigningRequest 物件提供一種機制,透過提交憑證簽署請求,並讓其非同步地獲得核准和發行,來取得 x509 憑證。

apiVersion: certificates.k8s.io/v1

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

CertificateSigningRequest

CertificateSigningRequest 物件提供一種機制,透過提交憑證簽署請求,並讓其非同步地獲得核准和發行,來取得 x509 憑證。

Kubelet 使用此 API 來取得

  1. 用戶端憑證,以驗證 kube-apiserver 的身分 (使用 "kubernetes.io/kube-apiserver-client-kubelet" signerName)。
  2. 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 (字串), 必填

    signerName 指示請求的簽署者,並且是一個限定名稱。

    CertificateSigningRequests 的 List/watch 請求可以使用 "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 API 伺服器進行身份驗證。此簽署者的請求可以由 kube 控制器管理器中的 "csrapproving" 控制器自動核准,並且可以由 kube 控制器管理器中的 "csrsigning" 控制器簽發。
    3. "kubernetes.io/kubelet-serving":簽發伺服器憑證,供 kubelet 用於提供 TLS 端點,kube API 伺服器可以安全地連線到這些端點。此簽署者的請求永遠不會被 kube 控制器管理器自動核准,但可以由 kube 控制器管理器中的 "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 欄位之間的差異,以確定實際期限。

    知名 Kubernetes 簽署者的 v1.22+ 樹狀結構內實作將會遵守此欄位,只要請求的期限不超過他們根據 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 伺服器憑證的請求通常會請求:"金鑰加密"、"數位簽章"、"伺服器身份驗證"。

    有效值為:"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)

    原子操作:將在合併期間被取代

    在出現核准條件後,憑證會由簽署者填入簽發的憑證。此欄位透過 /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), required

      條件的狀態,True、False、Unknown 之一。"Approved"、"Denied" 和 "Failed" 條件不得為 "False" 或 "Unknown"。

    • conditions.type (string), required

      條件的類型。已知的條件為 "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), required

    items 是 CertificateSigningRequest 物件的集合

操作


get 讀取指定的 CertificateSigningRequest

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • pretty (in query): string

    pretty

回應

200 (CertificateSigningRequest): OK

401: 未經授權

get 讀取指定 CertificateSigningRequest 的核准狀態

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • pretty (in query): string

    pretty

回應

200 (CertificateSigningRequest): OK

401: 未經授權

get 讀取指定 CertificateSigningRequest 的狀態

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • pretty (in query): 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): 已建立

202 (CertificateSigningRequest): 已接受

401: 未經授權

update 取代指定的 CertificateSigningRequest

HTTP 請求

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

參數

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

401: 未經授權

update 取代指定 CertificateSigningRequest 的核准狀態

HTTP 請求

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

參數

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

401: 未經授權

update 取代指定 CertificateSigningRequest 的狀態

HTTP 請求

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

參數

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

401: 未經授權

patch 部分更新指定的 CertificateSigningRequest

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

401: 未經授權

patch 部分更新指定 CertificateSigningRequest 的核准狀態

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

401: 未經授權

patch 部分更新指定 CertificateSigningRequest 的狀態

HTTP 請求

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

參數

  • name (in path): string, required

    CertificateSigningRequest 的名稱

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

回應

200 (CertificateSigningRequest): OK

201 (CertificateSigningRequest): 已建立

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 專案的其他地方進行。

最後修改時間:2024 年 8 月 28 日下午 6:01 PST:更新 v1.31 的產生 API 參考 (8ba98c79c1)