ACME オーダーとチャレンジ
cert-managerは、Let's Encryptを含むACMEサーバーからの証明書リクエストを、ACME Issuerを使用してサポートします。これらの証明書は通常、ほとんどのコンピューターでパブリックインターネット上で信頼されています。証明書を正常にリクエストするには、cert-managerはACMEチャレンジを解決する必要があります。これは、クライアントがリクエストされているDNSアドレスを所有していることを証明するために完了されます。
これらのチャレンジを完了するために、cert-managerは2つのCustomResource
タイプを導入します。Orders
とChallenges
です。
注文
Order
リソースは、署名付きTLS証明書のACME「注文」のライフサイクルを管理するためにACME発行者によって使用されます。ACME注文とドメイン検証の詳細については、Let's EncryptのWebサイトこちらを参照してください。注文は、新しいCertificateRequest
リソースがACME発行者を参照して作成されると、自動的に作成される単一の証明書リクエストを表します。CertificateRequest
リソースは、Certificate
リソースが作成された、仕様が変更された、または更新が必要な場合に、cert-managerによって自動的に作成されます。
エンドユーザーとして、Order
リソースを手動で作成する必要はありません。作成されたOrder
は変更できません。代わりに、新しいOrder
リソースを作成する必要があります。
Order
リソースは、その「注文」の複数のACME「チャレンジ」をカプセル化するため、1つ以上のChallenge
リソースを管理します。
チャレンジ
Challenge
リソースは、単一のDNS名/識別子の「承認」を完了するために完了する必要があるACME「チャレンジ」のライフサイクルを管理するためにACME発行者によって使用されます。
Order
リソースが作成されると、注文コントローラーは、ACMEサーバーで承認されている各DNS名に対してChallenge
リソースを作成します。
エンドユーザーとして、Challenge
リソースを手動で作成する必要はありません。作成されたChallenge
は変更できません。代わりに、新しいChallenge
リソースを作成する必要があります。
チャレンジのライフサイクル
Challenge
リソースが作成された後、最初は処理のためにキューに入れられます。処理は、チャレンジが開始するように「スケジュール」されるまで開始されません。このスケジューリングプロセスは、一度に試行されるチャレンジが多すぎたり、同じDNS名の複数のチャレンジが一度に試行されたりするのを防ぎます。チャレンジのスケジュール方法の詳細については、チャレンジのスケジュールをお読みください。
チャレンジがスケジュールされると、最初に現在の状態を判断するためにACMEサーバーと「同期」されます。チャレンジがすでに有効な場合、「状態」は「有効」に更新され、status.processing = false
を設定して、自身の「スケジュール解除」も行います。
チャレンジがまだ「保留」の場合、チャレンジコントローラーは、構成されたソルバーであるHTTP01またはDNS01のいずれかを使用してチャレンジを「提示」します。チャレンジが「提示」されると、status.presented = true
を設定します。
「提示」されると、チャレンジコントローラーは「自己チェック」を実行して、チャレンジが「伝播」したことを確認します(つまり、権威DNSサーバーが正しく応答するように更新されたか、イングレスリソースへの変更がイングレスコントローラーによって観測され使用中であるか)。
自己チェックが失敗した場合、cert-managerは固定された10秒の再試行間隔で自己チェックを再試行します。自己チェックを完了しないチャレンジは、ユーザーがOrder
を再試行する(Order
リソースを削除することによって)、または構成エラーを解決するために関連付けられたCertificate
リソースを修正することによって介入するまで再試行を続けます。
自己チェックがパスすると、このチャレンジに関連付けられたACME「承認」が「承認」されます。
承認後の承認の最終状態は、チャレンジのstatus.state
フィールドと、ACMEサーバーがチャレンジを検証しようとしたときにエラーが発生した場合の「エラー理由」にコピーされます。
チャレンジがvalid
、invalid
、expired
、またはrevoked
状態になると、status.processing = false
を設定して、ACMEチャレンジのそれ以上の処理を防ぎ、完了する必要があるチャレンジのバックログがある場合は、別のチャレンジをスケジュールできるようにします。
チャレンジのスケジュール
cert-managerは、すべてのチャレンジを一度に処理しようとする代わりに、チャレンジを「スケジュール」します。
このスケジューラーは、同時チャレンジの最大数に上限を適用し、同じDNS名とソルバータイプ(HTTP01
またはDNS01
)の2つのチャレンジを一度に完了することを許可しません。
一度に処理できるチャレンジの最大数は、ddff78
の時点で60です。