CSI 驅動程式
使用 cert-manager csi-driver 啟用 Pod 的 mTLS
csi-driver 促進 Kubernetes 叢集中 Pod 的無密碼憑證配置。
使用此驅動程式將確保私鑰和對應的簽署憑證對於每個 Pod 都是唯一的,並將儲存在 Pod 排程到的節點的磁碟上。
憑證金鑰對的生命週期與 Pod 的生命週期一致;憑證在 Pod 建立時發出,並在終止時銷毀。
此驅動程式還會處理即時憑證的動態更新。
什麼是 CSI 驅動程式?
Kubernetes CSI 驅動程式是一個儲存外掛程式,部署在您的 Kubernetes 叢集中。
它可以遵守 Pod 規格中的磁碟區請求,就像預設啟用的磁碟區請求一樣,例如 Secret
、ConfigMap
或 hostPath
磁碟區驅動程式。
在 cert-manager 的 csi-driver 的情況下,會使用臨時磁碟區,這表示磁碟區會隨著 Pod 的建立和終止而建立和銷毀。
這表示不僅會為每個 Pod 建立具有唯一憑證和金鑰的磁碟區,而且私鑰永遠不會離開主機的節點,並且可以在 Pod 的規格或範本中定義該 Pod 範本所需的憑證。
警告:CSI 驅動程式的使用主要目的是為了支援叢集中的 PKI 並促進 TLS。因此,通常應使用私有憑證授權單位來發行。不建議使用諸如 Let's Encrypt 之類的公有憑證授權單位,它們對單一網域可以發行的憑證數量維持嚴格的速率限制。與 Pod 一樣,這些憑證金鑰對的設計目的是丟棄,並且可以在正常運作期間隨時建立和銷毀。
它是如何運作的?
CSI 規格是一種用於為容器協調平台建置儲存驅動程式的協定和標準,其目的是讓單一驅動程式可以跨多個平台移植,並概述了驅動程式應從基礎架構角度如何運作的一致規格。由於 cert-manager 設計為只能在 Kubernetes 叢集中執行,因此 cert-manager CSI 驅動程式也是如此。
該驅動程式應部署為 DaemonSet,這表示每個節點上可以執行驅動程式的單一執行個體。在單一節點上執行多個執行個體時,驅動程式將無法運作。可以使用其 Pod 範本中的 nodeSelector
來限制驅動程式執行的節點集合。
當具有指定 cert-manager CSI 磁碟區的 Pod 排程到節點時,該節點上執行的 Kubelet
將會傳送 NodePublishVolume
呼叫到該節點上的驅動程式,其中包含該 Pod 的資訊以及內嵌磁碟區屬性中的詳細資訊。從這裡,驅動程式將會根據該金鑰並使用從磁碟區屬性中建立的資訊來產生私鑰以及憑證請求。驅動程式將會在 Pod 的相同命名空間中建立一個 CertificateRequest
資源,如果有效,cert-manager 將會傳回已簽署的憑證。
產生的已簽署憑證和產生的金鑰將會寫入該節點的檔案系統,以掛載到 Pod 的檔案系統。由於驅動程式需要存取節點的檔案系統,因此必須具有特殊權限。掛載後,Pod 將會開始執行,其檔案系統中會提供唯一私鑰和憑證,如其掛載路徑所定義。
預設情況下,驅動程式將會追蹤建立的憑證,以便監控何時應標記它們以進行更新。當發生這種情況時,驅動程式將會請求一個新的已簽署憑證,如果成功,則只需覆寫路徑中的現有憑證即可。
當 Pod 標記為終止時,會向節點的驅動程式發出 NodeUnpublishVolume
呼叫,這會進而銷毀節點檔案系統中的憑證和金鑰。
如果 CSI 驅動程式的 Pod 終止,它能夠恢復其完整狀態。