cert-manager と Azure DNS で ACME DNS-01 チャレンジ
はじめに 前回の投稿で Google Domains で購入したドメインを Azure DNS に委任しました。 今回は cert-manager というツールを使って、自宅ラボの Kubernetes クラスタで LAN に公開している Ingress 用の証明書を発行します。 証明書は Let’s Encrypt に署名してもらうのですが、Let’s Encrypt がドメインの所有をチェックするために Azure DNS を使って「DNS01 チャレンジ」を突破します。 ドメインの所有のチェック方法として「HTTP01 チャレンジ」もありますが、こちらはインターネットからアクセス可能なエンドポイントを用意する必要があるため、インターネットに非公開の自宅ラボでは使えません。 今までも cert-manager を使って nnstt1.home という独自ドメインの自己署名証明書を発行していたのですが、ブラウザの警告を回避するためのルート証明書の設定が面倒でした。 そこで、nnstt1.dev のサブドメイン home.nnstt1.dev に対して証明書を発行(署名)してもらって、自宅ラボでも警告なしで使えるようにします。 手順の流れは以下です。 Azure にサービスプリンシパル作成する Kubernetes クラスタに Issuer / Certificate リソースを作成して証明書を発行する Ingress で証明書を使ってサービスを公開する なお、前提として Kubernetes クラスタには既に cert-manager がインストールされているものとして手順を記載しています。 サービスプリンシパル作成 AKS では ID 管理がより楽な「マネージド ID」を使うことができますが、自宅クラスタなので「サービスプリンシパル」を使用します。 はじめに、サービスプリンシパル名などの変数を設定します。 $ AZURE_CERT_MANAGER_NEW_SP_NAME=home-lab-cert-manager $ AZURE_DNS_ZONE_RESOURCE_GROUP=home-lab $ AZURE_DNS_ZONE=nnstt1.dev サービスプリンシパルを作成して、アプリケーション ID などの情報を変数に格納します。...