外部発行者の実装
cert-manager は、様々な認証局を表すいくつかのコア発行者タイプを提供します。
潜在的な発行者の数は、cert-manager のメインリポジトリで合理的にサポートできる数よりも多いため、cert-manager はツリー外の外部発行者もサポートし、ツリー内の発行者タイプと同じように扱います。
このドキュメントは、外部発行者の作成を検討している方のためのものです。外部発行者の例の一覧については、発行者ページを参照してください。
概要
発行者は、受信した証明書要求に署名する認証局を表します。cert-manager では、CertificateRequest リソースは、署名済み証明書に対する単一の要求を表し、生の証明書要求 PEM データと、目的の証明書に関連するその他の情報が含まれています。
cert-manager では、各発行者タイプには、これらのCertificateRequest リソースを監視し、特定のCertificateRequest がその発行者を使用するように構成されているかどうかを確認する独自のコンローラーがあります。
これは、発行者name、kind、およびgroupを含むCertificateRequestのissuerRef スタンザを介して行われます。
group は、cert-manager.io(すべてのコア発行者タイプを担当)などのAPIグループを示します。
kind は、発行者の「種類」リソースタイプを示します。通常はIssuerまたはClusterIssuerです。
name は、指定された種類の発行者リソースの名前を示します。例としてはmy-ca-issuerがあります。
発行者コントローラーが参照する新しいCertificateRequestを検出すると、対応する発行者リソースがKubernetesに存在することを確認します。
次に、発行者リソース内の情報を使用して、証明書要求内の情報に基づいて署名済み証明書の作成を試みます。
外部発行者のサンプル
外部発行者を作成する場合、まず外部発行者のサンプルを参照することをお勧めします。
外部発行者のサンプルは、cert-manager チームによって保守されており、READMEファイルには、Kubebuilderとcontroller-runtimeを使用して外部発行者を作成する方法に関する手順が記載されています。
承認
証明書に署名する前に、発行者はCertificateRequestが承認されていることを必ず確認する必要があります。
CertificateRequestが承認されていない場合、発行者は処理してはなりません。発行者はCertificateRequestsを承認する責任はなく、承認されていない証明書を発見した場合は処理を拒否する必要があります。
Certificateに関連付けられた発行のために作成されたCertificateRequestが拒否されると、cert-manager の発行コントローラーによって発行は失敗します。
状態
署名済み証明書が発行者コントローラーによって収集されると、CertificateRequestリソースの状態が署名済み証明書で更新されます。その後、リソースの準備完了をシグナルするために使用されるため、そのリソースの状態を準備完了状態に更新することが重要です。これは、Certificateコントローラーなどの上位コントローラーにリソースを使用できることを知らせるために使用されます。
逆に、CertificateRequestが失敗した場合、上位コントローラーにシグナルとして使用されるため、リソースにそのようにマークすることも同様に重要です。有効な状態は概念に記載されています。
実装
外部発行者コントローラーの実装には、kubebuilder プロジェクトを使用することをお勧めします。これにより、CustomResourceDefinitionsを簡単に生成でき、多くのコントローラー機能をすぐに利用できます。
外部発行者コントローラーの実装方法についてさらに質問がある場合は、Slackで問い合わせるか、コミュニティコールに参加することをお勧めします。
