Kubernetes で cert-manager と DigiCert ACME サービスを使用する
このプロセスは cert-manager 1.1 以降で使用できます。コマンドラインの使用方法を理解していることと、環境にソフトウェアをインストールする権限があることを前提とします。
ACME 登録用の証明書プロファイルを作成する
DigiCert® Trust Lifecycle Manager で、サードパーティ ACME を統合するための証明書プロファイルを作成します。
証明書プロファイルの ACME クレデンシャル(URL、HMAC キー、キー ID)をコピーし、安全な場所に保存します。これらの値を紛失した場合は、cert-manager の再インストールと再設定が必要になります。
例:
KID: jvJrlqcDpK1cO3IiinRFJ_9L1tiaA6lmUGFmTTg32RM
HMAC キー: MWJiMjQ5MDQ5YWUzOTFiN2JlOWNmODBmNDY2NWNhM2U2MTgyYzI2ZDMxZDNhNmJmNzliZTZlNzE5MzIxODk1Yg
cert-manager の設定
ターミナルウィンドウを開き、お使いの環境にログインします。以下のコマンドで cert-manager をインストールします。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml kubectl get namespaces
cert-manager 用の名前空間を作成します。
kubectl create namespace <namespace>
例:
kubectl create namespace certmanagernew
cert-manager で、外部アカウントバインディング(EAB-HMAC)用のシークレットを作成します。上述の ACME ディレクトリ URL を作成する手順で保存した HMAC キーを、以下の
eab_hmacフィールドに使用します。kubectl create secret generic <eab_secret_name> --from-literal secret=<eab_hmac> -n <namespace>
例:
kubectl create secret generic testcmanagereab --from-literal secret=MWJiMjQ5MDQ5YWUzOTFiN2JlOWNmODBmNDY2NWNhM2U2MTgyYzI2ZDMxZDNhNmJmNzliZTZlNzE5MzIxODk1Yg -n certmanagernew
YAML(test-cmanager-acme.yaml)設定ファイルを作成し、cert-manager で発行者を追加するパラメータの値を指定します。
注記
以下の例で使用するサーバー URL は、ローカル TLM 展開で動作します。クラウドから TLM を展開した場合は、ACME プロファイルを設定するときに受け取った自動化 URL を指定します。
例: 以下のテキストを、使用している名前空間、メールアドレス、サーバー、keyID、keySecretRef 名で更新します。test-cmanager-acme.yaml として保存します。
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: testcmanager-issuer namespace: certmanagernew spec: acme: email: t2@digicert.com #New enrollments only server: http://enterprise.dcone.svc.cluster.local/mpki/api/v1/acme/v2/directory skipTLSVerify: true externalAccountBinding: keyID: jvJrlqcDpK1cO3IiinRFJ_9L1tiaA6lmUGFmTTg32RM keySecretRef: name: testcmanagereab key: secret keyAlgorithm: HS256 privateKeySecretRef: name: testcmanageraccountkey solvers: # An empty 'selector' means that this solver matches all domains - selector: {} http01: ingress: class: nginx以下のコマンドを実行し、アカウントが作成されるのを待ちます。
kubectl apply -f test-cmanager-acme.yaml
kubectl describeを実行し、ACME アカウントが DigiCert ACME サーバーに登録されていることを確認します。例:kubectl describe issuer -n certmanagernew
YAML(test-cmanager-acme-certificate.yaml)設定ファイルを作成し、cert-manager で発行者を追加するパラメータの値を指定します。
例: 以下のテキストを、使用している名前空間、コモンネーム、DNS 名で更新します。
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: testcmanager-certificate-test.winthecustomer.com namespace: certmanagernew spec: secretName: testcmanagercertificate issuerRef: name: testcmanager-issuer commonName: winthecustomer.com dnsNames: - winthecustomer.comkubectl apply test-cmanager-acme-certificate.yamlを実行して証明書を取得します。kubectl apply -f test-cmanager-acme-certificate.yaml
追加のコマンド
証明書ステータスを確認する:
kubectl describe certificate -n certmanagernew
発行者から証明書を取得する:
kubectl describe certificaterequest -n certmanagernew
同じクレデンシャルで新しい証明書を要求する:
kubectl delete -f test-cmanager-acme-certificate.yaml kubectl apply -f test-cmanager-acme-certificate.yaml
異なるクレデンシャルで新しい証明書を要求する:
次のコマンドを実行します。
kubectl delete -f test-cmanager-acme.yaml kubectl delete -f test-cmanager-acme-certificate.yaml
以前に作成した EAB シークレットを削除します。
更新した KID 値と HMAC キー値を使用して、上記のプロセスをステップ 3 から開始します。
アンインストールコマンド
cert-manager をアンインストールするには:
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml
すべての cert-manager リソースを削除します。必要なのは、再インストール時のみです。
名前空間をアンインストールするには:
kubectl delete ns certmanagernew