CertificateSigningRequest
apiVersion: certificates.k8s.io/v1
import "k8s.io/api/certificates/v1"
CertificateSigningRequest
CertificateSigningRequest 物件提供了一種機制,允許使用者透過提交證書籤名請求來獲取 x509 證書,並由其非同步審批和頒發。
Kubelets 使用此 API 獲取
- 客戶端證書,用於向 kube-apiserver 進行身份驗證(使用 "kubernetes.io/kube-apiserver-client-kubelet" 簽名者名稱)。
- 服務證書,用於 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 簽名者是
- "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
也可以指定自定義的 signerNames。簽名者定義了
- 信任分發:信任(CA 捆綁包)如何分發。
- 允許的主體:以及在請求不允許的主體時的行為。
- 請求中必需、允許或禁止的 x509 擴充套件(包括是否允許 subjectAltNames、型別、允許值的限制),以及在請求不允許的擴充套件時的行為。
- 必需、允許或禁止的金鑰用途/擴充套件金鑰用途。
- 有效期/證書生命週期:由簽名者固定,還是由管理員配置。
- 是否允許 CA 證書請求。
expirationSeconds (int32)
expirationSeconds 是所頒發證書的請求有效期。證書籤名者可能會頒發具有不同有效期的證書,因此客戶端必須檢查頒發證書中 notBefore 和 notAfter 欄位之間的差值以確定實際有效期。
v1.22+ 內建的 Kubernetes 知名簽名者實現將遵循此欄位,只要請求的持續時間不大於它們根據 Kubernetes 控制器管理器的 --cluster-signing-duration CLI 標誌所遵循的最大持續時間。
證書籤名者可能出於各種原因不遵循此欄位
- 不瞭解此欄位的舊簽名者(例如 v1.22 之前的內建實現)
- 其配置的最大持續時間短於請求持續時間的簽名者
- 其配置的最小持續時間長於請求持續時間的簽名者
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" 的條件,此欄位保持為空。
驗證要求
- 證書必須包含一個或多個 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 是條件上次從一個狀態轉換為另一個狀態的時間。如果未設定,當新增新的條件型別或更改現有條件的 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
響應
200 (CertificateSigningRequest): OK
401: 未授權
get
讀取指定的 CertificateSigningRequest 的批准狀態
HTTP 請求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
401: 未授權
get
讀取指定的 CertificateSigningRequest 的狀態
HTTP 請求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
401: 未授權
list
列出或監視 CertificateSigningRequest 型別的物件
HTTP 請求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (CertificateSigningRequestList): OK
401: 未授權
create
建立一個 CertificateSigningRequest
HTTP 請求
POST /apis/certificates.k8s.io/v1/certificatesigningrequests
引數
body: CertificateSigningRequest,必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
202 (CertificateSigningRequest): Accepted
401: 未授權
update
替換指定的 CertificateSigningRequest
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
body: CertificateSigningRequest,必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: 未授權
update
替換指定的 CertificateSigningRequest 的批准狀態
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
body: CertificateSigningRequest,必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: 未授權
update
替換指定的 CertificateSigningRequest 的狀態
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
body: CertificateSigningRequest,必填
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
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
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
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
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
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
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): Created
401: 未授權
delete
刪除 CertificateSigningRequest
HTTP 請求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
引數
name (在路徑中): string,必填
CertificateSigningRequest 的名稱
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Status): OK
202 (Status): 已接受
401: 未授權
deletecollection
刪除 CertificateSigningRequest 集合
HTTP 請求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
引數
body: DeleteOptions
continue (在查詢中): string
dryRun (在查詢中): string
fieldSelector (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
propagationPolicy (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
響應
200 (Status): OK
401: 未授權
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。