Skip to main content

Kubernetes で cert-manager と DigiCert ACME サービスを使用する

このプロセスは cert-manager 1.1 以降で使用できます。コマンドラインの使用方法を理解していることと、環境にソフトウェアをインストールする権限があることを前提とします。

ACME 登録用の証明書プロファイルを作成する

  1. DigiCert​​®​​ Trust Lifecycle Manager で、サードパーティ ACME を統合するための証明書プロファイルを作成します。ACME ベースの証明書プロファイルを作成する

  2. 証明書プロファイルの ACME クレデンシャル(URL、HMAC キー、キー ID)をコピーし、安全な場所に保存します。これらの値を紛失した場合は、cert-manager の再インストールと再設定が必要になります。

例:

  • KID: jvJrlqcDpK1cO3IiinRFJ_9L1tiaA6lmUGFmTTg32RM

  • HMAC キー: MWJiMjQ5MDQ5YWUzOTFiN2JlOWNmODBmNDY2NWNhM2U2MTgyYzI2ZDMxZDNhNmJmNzliZTZlNzE5MzIxODk1Yg

cert-manager の設定

  1. ターミナルウィンドウを開き、お使いの環境にログインします。以下のコマンドで cert-manager をインストールします。

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml
    kubectl get namespaces
    
  2. cert-manager 用の名前空間を作成します。

    kubectl create namespace <namespace>  

    例:

    kubectl create namespace certmanagernew
  3. 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
  4. 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
  5. 以下のコマンドを実行し、アカウントが作成されるのを待ちます。

    kubectl apply -f test-cmanager-acme.yaml
  6. kubectl describe を実行し、ACME アカウントが DigiCert ACME サーバーに登録されていることを確認します。例:

    kubectl describe issuer -n certmanagernew
  7. 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.com
  8. kubectl 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

異なるクレデンシャルで新しい証明書を要求する:

  1. 次のコマンドを実行します。

    kubectl delete -f test-cmanager-acme.yaml
    kubectl delete -f test-cmanager-acme-certificate.yaml 
  2. 以前に作成した EAB シークレットを削除します。

  3. 更新した 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