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

ACME 訂單和挑戰

cert-manager 支援從 ACME 伺服器請求憑證,包括來自 Let's Encrypt,並使用 ACME 簽發者。這些憑證通常在大多數電腦上的公共網際網路上受到信任。為了成功請求憑證,cert-manager 必須解決 ACME 挑戰,完成這些挑戰是為了證明客戶端擁有正在請求的 DNS 位址。

為了完成這些挑戰,cert-manager 引入了兩種 CustomResource 類型;OrdersChallenges

訂單 (Orders)

Order 資源由 ACME 簽發者用來管理簽署 TLS 憑證的 ACME「訂單」的生命週期。關於 ACME 訂單和網域驗證的更多詳細資訊,可以在 Let's Encrypt 網站上 這裡 找到。訂單代表單個憑證請求,一旦創建引用 ACME 簽發者的新 CertificateRequest 資源,就會自動創建。當創建 Certificate 資源、變更其規範或需要續訂時,cert-manager 會自動創建 CertificateRequest 資源。

作為最終使用者,您永遠不需要手動創建 Order 資源。一旦創建,Order 無法更改。相反,必須創建新的 Order 資源。

Order 資源封裝了該「訂單」的多個 ACME「挑戰」,因此將管理一個或多個 Challenge 資源。

挑戰 (Challenges)

Challenge 資源由 ACME 簽發者用於管理 ACME「挑戰」的生命週期,必須完成該挑戰才能完成單個 DNS 名稱/識別碼的「授權」。

創建 Order 資源時,訂單控制器將為正在透過 ACME 伺服器授權的每個 DNS 名稱創建 Challenge 資源。

作為最終使用者,您永遠不需要手動創建 Challenge 資源。一旦創建,Challenge 無法更改。相反,必須創建新的 Challenge 資源。

挑戰生命週期

創建 Challenge 資源後,它最初將排隊等待處理。處理將在挑戰被「排程」開始之前不會開始。此排程過程可防止一次嘗試過多挑戰,或同時嘗試多個相同 DNS 名稱的挑戰。有關挑戰如何排程的更多資訊,請閱讀挑戰排程

一旦挑戰被排程,它將首先與 ACME 伺服器「同步」,以確定其目前狀態。如果挑戰已經有效,其「狀態」將更新為「有效」,並且還會將 status.processing = false 設置為「取消排程」自身。

如果挑戰仍然「待處理」,挑戰控制器將使用已配置的解算器 (HTTP01 或 DNS01 其中之一)「呈現」挑戰。一旦挑戰被「呈現」,它將設置 status.presented = true

一旦「呈現」,挑戰控制器將執行「自我檢查」,以確保挑戰已「傳播」(即權威 DNS 伺服器已更新為正確響應,或已觀察到對 ingress 資源的更改並由 ingress 控制器使用)。

如果自我檢查失敗,cert-manager 將以固定的 10 秒重試間隔重試自我檢查。無法完成自我檢查的挑戰將繼續重試,直到使用者介入,方法是重試 Order (通過刪除 Order 資源) 或修改相關的 Certificate 資源以解決任何配置錯誤。

一旦自我檢查通過,與此挑戰關聯的 ACME「授權」將被「接受」。

接受後授權的最終狀態將複製到挑戰的 status.state 字段,以及 ACME 伺服器嘗試驗證挑戰時如果發生錯誤的「錯誤原因」。

一旦挑戰進入 validinvalidexpiredrevoked 狀態,它將設置 status.processing = false 以防止進一步處理 ACME 挑戰,並允許排程另一個挑戰 (如果存在待完成的挑戰)。

挑戰排程

cert-manager 會「排程」挑戰,而不是嘗試一次處理所有挑戰。

此排程器會限制同時挑戰的最大數量,並且不允許同時完成同一 DNS 名稱和解算器類型 ( HTTP01DNS01) 的兩個挑戰。

ddff78 起,一次可以處理的最大挑戰數為 60。