最新消息:在TwitterMastodon取得專案更新

CertificateSigningRequest 資源

apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest

Kubernetes 具有內建的 CertificateSigningRequest 資源。此資源與 cert-manager 的 CertificateRequest 類似,它用於從參照的憑證授權單位 (CA) 請求 X.509 簽署憑證。

對於使用支援此資源但不支援 cert-manager CertificateRequest 資源,且仍希望透過 cert-manager 簽署憑證的使用者來說,使用此資源可能很有用。

CertificateSigningRequest 參照一個 SignerName 或簽署者,作為它希望簽署其請求的實體。對於 cert-manager,簽署者可以對應到 Issuer 或 ClusterIssuer

功能狀態

此功能目前處於實驗性狀態,其行為可能會在後續版本中變更。

⛔️ 此功能僅能透過將其新增至 cert-manager 控制器的 --feature-gates 旗標來啟用

--feature-gates=ExperimentalCertificateSigningRequestControllers=true

可以使用 Helm 來新增

$ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set featureGates="ExperimentalCertificateSigningRequestControllers=true" \
--set crds.enabled=true

注意:cert-manager 支援使用所有 內部簽發者簽署 CertificateSigningRequest。

注意:cert-manager *不會*自動核准參照 cert-manager Issuer 的 CertificateSigningRequest。請參閱 Kubernetes 文件,以了解 CertificateSigningRequest 的請求流程。

簽署者名稱

CertificateSigningRequest 包含 spec.signerName 欄位,以參照簽署請求的 CA。cert-manager 的 Issuers 或 ClusterIssuers 以以下形式參照

<resource type>.cert-manager.io/<signer namespace (if namespaced)>.<signer name>

例如,名稱空間 sandbox 中名為 my-issuer 的命名空間 Issuer 會透過以下方式參照

signerName: issuers.cert-manager.io/sandbox.my-issuer

名為 my-cluster-issuer 的 ClusterIssuer 會透過以下方式參照

signerName: clusterissuers.cert-manager.io/my-cluster-issuer

參照命名空間的 Issuer

與 CertificateRequest 不同,CertificateSigningRequest 是叢集範圍的資源。為了防止使用者從他們原本無權存取的命名空間中的命名空間 Issuer 請求憑證,cert-manager 會執行 SubjectAccessReview。此審查可確保請求使用者具有在給定命名空間中 參照 signers 資源的權限。名稱應為 Issuer 的名稱,或是 "*" 以參照該命名空間中的所有 Issuer。

以下範例 Role 會提供在 sandbox 命名空間中參照 Issuer 的權限

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cert-manager-referencer:my-issuer
namespace: sandbox
rules:
- apiGroups: ["cert-manager.io"]
resources: ["signers"]
verbs: ["reference"]
resourceNames:
- "my-issuer" # To give permission to _only_ reference Issuers with the name 'my-issuer'
- "*" # To give permission to reference Issuers with any name in this namespace

註解

為了保持與 CertificateRequest 的功能對等,註解用於儲存 CertificateSigningRequest 資源上不存在的 specstatus 欄位的值。這些欄位由下方標示的請求者簽署者設定。

請求者註解

  • experimental.cert-manager.io/request-duration由請求者設定。接受 Go 時間持續時間字串,指定請求的憑證持續時間。預設值為 90 天。某些簽署者(例如 Venafi 或 ACME)通常*不允許*請求持續時間。

  • experimental.cert-manager.io/request-is-ca由請求者設定。如果設定為 "true",將會請求 CA 憑證。

  • experimental.cert-manager.io/private-key-secret-name由請求者設定。僅適用於 SelfSigned 簽署者。用於參照一個 Secret,其中包含請求者 X.509 憑證簽署請求的 PEM 編碼私密金鑰,金鑰為 tls.key。用於簽署請求者的請求。

  • venafi.experimental.cert-manager.io/custom-fields由請求者設定。僅適用於 Venafi 簽署者。用於將自訂欄位新增至 Venafi 請求。這僅適用於 Venafi TPP v19.3 及更高版本。該值為一個 JSON 陣列,其中包含具有名稱和值鍵的物件,例如

    venafi.experimental.cert-manager.io/custom-fields: |-
    [
    {"name": "field-name", "value": "field value"},
    {"name": "field-name-2", "value": "field value 2"}
    ]

簽署者註解

  • venafi.experimental.cert-manager.io/pickup-id由簽署者設定。僅適用於 Venafi 簽署者。用於記錄已提交至 Venafi API 以便在發行期間收集的憑證簽署請求的 Venafi 提取 ID。

用法

可以使用 cmctl 手動建立 CertificateSigningRequest。此命令會採用包含 憑證資源的資訊清單檔案作為輸入。這會產生私密金鑰並建立 CertificateSigningRequest。CertificateSigningRequest 預設不會核准,因此您可能需要手動核准

$ kubectl certificate approve <name>

開發人員的內部運作圖