CertificateSigningRequest
apiVersion: certificates.k8s.io/v1
import "k8s.io/api/certificates/v1"
CertificateSigningRequest
CertificateSigningRequest 物件提供一種機制,透過提交憑證簽署請求,並讓其非同步地獲得核准和發行,來取得 x509 憑證。
Kubelet 使用此 API 來取得
- 用戶端憑證,以驗證 kube-apiserver 的身分 (使用 "kubernetes.io/kube-apiserver-client-kubelet" signerName)。
- 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 簽署者有
- "kubernetes.io/kube-apiserver-client":發行可用於驗證 kube-apiserver 身分的用戶端憑證。此簽署者的請求永遠不會由 kube-controller-manager 自動核准,可以由 kube-controller-manager 中的 "csrsigning" 控制器發行。
- "kubernetes.io/kube-apiserver-client-kubelet":簽發用戶端憑證,供 kubelet 用於向 kube API 伺服器進行身份驗證。此簽署者的請求可以由 kube 控制器管理器中的 "csrapproving" 控制器自動核准,並且可以由 kube 控制器管理器中的 "csrsigning" 控制器簽發。
- "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。簽署者定義了
- 信任分發:信任(CA 憑證包)如何分發。
- 允許的主體:以及當請求不允許的主體時的行為。
- 請求中必要、允許或禁止的 x509 擴展(包括是否允許 subjectAltNames、哪些類型、對允許值的限制)以及當請求不允許的擴展時的行為。
- 必要、允許或禁止的金鑰用法/擴展金鑰用法。
- 到期/憑證生命週期:是否由簽署者固定,或由管理員配置。
- 是否允許 CA 憑證的請求。
expirationSeconds (int32)
expirationSeconds 是請求簽發憑證的有效期限。憑證簽署者可能會簽發具有不同有效期限的憑證,因此用戶端必須檢查簽發憑證中 notBefore 和 notAfter 欄位之間的差異,以確定實際期限。
知名 Kubernetes 簽署者的 v1.22+ 樹狀結構內實作將會遵守此欄位,只要請求的期限不超過他們根據 Kubernetes 控制器管理器的 `--cluster-signing-duration` CLI 標誌所遵守的最大期限。
憑證簽署者可能由於各種原因而不遵守此欄位
- 不知道此欄位的舊簽署者(例如 v1.22 之前的樹狀結構內實作)
- 配置的最大期限短於請求期限的簽署者
- 配置的最小期限長於請求期限的簽署者
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" 的條件,且此欄位保持空白。
驗證需求
- 憑證必須包含一個或多個 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), 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
回應
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
回應
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
回應
200 (CertificateSigningRequest): OK
401: 未經授權
list
列出或監看種類為 CertificateSigningRequest 的物件
HTTP 請求
GET /apis/certificates.k8s.io/v1/certificatesigningrequests
參數
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
回應
200 (CertificateSigningRequestList): OK
401: 未經授權
create
建立 CertificateSigningRequest
HTTP 請求
POST /apis/certificates.k8s.io/v1/certificatesigningrequests
參數
body: CertificateSigningRequest, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
回應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): 已建立
202 (CertificateSigningRequest): 已接受
401: 未經授權
update
取代指定的 CertificateSigningRequest
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
參數
name (in path): string, required
CertificateSigningRequest 的名稱
body: CertificateSigningRequest, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
回應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): 已建立
401: 未經授權
update
取代指定 CertificateSigningRequest 的核准狀態
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/approval
參數
name (in path): string, required
CertificateSigningRequest 的名稱
body: CertificateSigningRequest, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
回應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): 已建立
401: 未經授權
update
取代指定 CertificateSigningRequest 的狀態
HTTP 請求
PUT /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}/status
參數
name (in path): string, required
CertificateSigningRequest 的名稱
body: CertificateSigningRequest, required
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
回應
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
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
回應
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
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
回應
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
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
回應
200 (CertificateSigningRequest): OK
201 (CertificateSigningRequest): 已建立
401: 未經授權
delete
刪除 CertificateSigningRequest
HTTP 請求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests/{name}
參數
name (in path): string, required
CertificateSigningRequest 的名稱
body: DeleteOptions
dryRun (in query): string
gracePeriodSeconds (in query): integer
pretty (in query): string
propagationPolicy (in query): string
回應
200 (Status): OK
202 (Status): 已接受
401: 未經授權
deletecollection
刪除 CertificateSigningRequest 的集合
HTTP 請求
DELETE /apis/certificates.k8s.io/v1/certificatesigningrequests
參數
body: DeleteOptions
continue (in query): string
dryRun (in query): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
回應
200 (Status): OK
401: 未經授權
此頁面為自動產生。
如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。修正可能需要在 Kubernetes 專案的其他地方進行。