15.6. 独自の CA 証明書と秘密鍵を使用する


Cluster Operator によって生成されたデフォルトを使用する代わりに、独自の CA 証明書と秘密鍵をインストールして使用します。クラスターとクライアントの CA 証明書および秘密鍵を置き換えることができます。

次の方法で、独自の CA 証明書と秘密鍵を使用するように切り替えることができます。

  • Kafka クラスターをデプロイする前に、独自の CA 証明書と秘密鍵をインストールします。
  • Kafka クラスターをデプロイした後、デフォルトの CA 証明書と秘密鍵を独自のものに置き換えます。

Kafka クラスターをデプロイした後にデフォルトの CA 証明書と秘密鍵を置き換える手順は、独自の CA 証明書と秘密鍵を更新するために使用する手順と同じです。

独自の証明書を使用する場合、証明書は自動的に更新されません。有効期限が切れる前に、CA 証明書と秘密鍵を更新する必要があります。

更新オプション:

  • CA 証明書のみを更新する
  • CA 証明書と秘密鍵を更新する (またはデフォルトを置き換える)

15.6.1. 独自の CA 証明書と秘密鍵のインストール

Cluster Operator によって生成されたクラスターおよびクライアントの CA 証明書と秘密鍵を使用する代わりに、独自の CA 証明書と秘密鍵をインストールします。

デフォルトでは、AMQ Streams は次の クラスター CA とクライアント CA シークレット を使用します。これらは自動的に更新されます。

  • クラスター CA シークレット

    • <cluster_name>-cluster-ca
    • <cluster_name>-cluster-ca-cert
  • クライアント CA シークレット

    • <cluster_name>-clients-ca
    • <cluster_name>-clients-ca-cert

独自の証明書をインストールするには、同じ名前を使用します。

前提条件

  • Cluster Operator が稼働中である。
  • Kafka クラスターがデプロイされていない必要があります。

    すでに Kafka クラスターをデプロイしている場合は、デフォルトの CA 証明書を独自の証明書に置き換える ことができます。

  • クラスター CA またはクライアントの、PEM 形式による独自の X.509 証明書および鍵が必要です。

    • ルート CA ではないクラスターまたはクライアント CA を使用する場合、証明書ファイルにチェーン全体を含める必要があります。チェーンの順序は以下のとおりです。

      1. クラスターまたはクライアント CA
      2. 1 つ以上の中間 CA
      3. ルート CA
    • チェーン内のすべての CA は、X509v3 基本制約拡張を使用して設定する必要があります。Basic Constraints は、証明書チェーンのパスの長さを制限します。
  • 証明書を変換するための OpenSSL TLS 管理ツール。

作業を開始する前に

Cluster Operator は、キーと証明書を PEM (Privacy Enhanced Mail) および PKCS #12 (Public-Key Cryptography Standards) 形式で生成します。どちらの形式でも独自の証明書を追加できます。

一部のアプリケーションは PEM 証明書を使用できず、PKCS #12 証明書のみに対応します。PKCS #12 形式のクラスター証明書がない場合は、OpenSSL TLS 管理ツールを使用して ca.crt ファイルからこれを生成します。

証明書生成コマンドの例

openssl pkcs12 -export -in ca.crt -nokeys -out ca.p12 -password pass:<P12_password> -caname ca.crt
Copy to Clipboard Toggle word wrap

<P12_password> を独自のパスワードに置き換えます。

手順

  1. CA 証明書を含む新しいシークレットを作成します。

    PEM 形式の証明書を使用したクライアントシークレットの作成

    oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt
    Copy to Clipboard Toggle word wrap

    PEM および PKCS #12 形式の証明書を使用したクラスターシークレットの作成

    oc create secret generic <cluster_name>-cluster-ca-cert \
      --from-file=ca.crt=ca.crt \
      --from-file=ca.p12=ca.p12 \
      --from-literal=ca.password=P12-PASSWORD
    Copy to Clipboard Toggle word wrap

    <cluster_name> は、独自の Kafka クラスターの名前に置き換えます。

  2. 秘密鍵を含む新しいシークレットを作成します。

    oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
    Copy to Clipboard Toggle word wrap
  3. シークレットにラベルを付けます。

    oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
    Copy to Clipboard Toggle word wrap
    oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
    Copy to Clipboard Toggle word wrap
    • ラベル strimzi.io/kind=Kafka は Kafka カスタムリソースを識別します。
    • ラベル strimzi.io/cluster=<cluster_name> は Kafka クラスターを識別します。
  4. シークレットにアノテーションを付けます。

    oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
    Copy to Clipboard Toggle word wrap
    oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
    Copy to Clipboard Toggle word wrap
    • strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION のアノテーションでは、新しい CA 証明書の生成を定義します。
    • strimzi.io/ca-key-generation=CA-KEY-GENERATION のアノテーションは、新しい CA キーの生成を定義します。

      独自の CA 証明書の増分値 (strimzi.io/ca-cert-generation=0) として 0 (ゼロ) から開始します。証明書を更新するときは、値を 1 つ増やして設定します。

  5. クラスターの Kafka リソースを作成し、生成された CA を 使用しない ように Kafka.spec.clusterCa または Kafka.spec.clientsCa オブジェクトを設定します。

    独自指定の証明書を使用するようにクラスター CA を設定する Kafka リソースの例 (抜粋)

    kind: Kafka
    version: kafka.strimzi.io/v1beta2
    spec:
      # ...
      clusterCa:
        generateCertificateAuthority: false
    Copy to Clipboard Toggle word wrap

15.6.2. 独自の CA 証明書の更新

独自の CA 証明書を使用している場合は、手動で更新する必要があります。Cluster Operator はそれらを自動的に更新しません。有効期限が切れる前に、更新期間内に CA 証明書を更新します。

CA 証明書を更新し、同じ秘密鍵を続行する場合は、この手順のステップを実行します。独自の CA 証明書 および 秘密鍵を更新する場合は、「CA 証明書と秘密鍵を独自のものに更新または置換する」 を参照してください。

この手順では、PEM 形式の CA 証明書の更新を説明します。

前提条件

  • Cluster Operator が稼働中である。
  • クラスターまたはクライアントの PEM 形式による新しい X.509 証明書が必要です。

手順

  1. CA 証明書の Secret を更新します。

    既存のシークレットを編集して新規 CA 証明書を追加し、証明書生成アノテーション値を更新します。

    oc edit secret <ca_certificate_secret_name>
    Copy to Clipboard Toggle word wrap

    <ca_certificate_secret_name>Secretの名前で、クラスター CA 証明書の場合は<kafka_cluster_name>-cluster-ca-cert であり、クライアント CA 証明書の場合は<kafka_cluster_name>-clients-ca-certとなります。

    以下の例は、my-cluster という名前の Kafka クラスターに関連付けられたクラスター CA 証明書のシークレットを示しています。

    クラスター CA 証明書のシークレット設定例

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "0" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    現在の base64 でエンコードされた CA 証明書
    2
    現在の CA 証明書生成アノテーションの値
  2. 新規 CA 証明書を base64 にエンコードします。

    cat <path_to_new_certificate> | base64
    Copy to Clipboard Toggle word wrap
  3. CA 証明書を更新します。

    前の手順の base64 でエンコードされた CA 証明書を、dataca.crt プロパティーの値としてコピーします。

  4. CA 証明書生成アノテーションの値を増やします。

    strimzi.io/ca-cert-generation アノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-cert-generation=0strimzi.io/ca-cert-generation=1 に変更します。Secret にアノテーションがない場合、値は 0 として扱われるため、1 を指定してアノテーションを追加します。

    AMQ Streams が証明書を生成すると、証明書生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書の場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書を更新できるように、アノテーションには現在のシークレットよりも高い値を指定する必要があります。strimzi.io/ca-cert-generation は、各 CA 証明書の更新で値を 1 増やす必要があります。

  5. 新しい CA 証明書と証明書生成のアノテーション値でシークレットを保存します。

    新しい CA 証明書で更新されるシークレット設定の例

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "1" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    新しい base64 でエンコードされた CA 証明書
    2
    新しい CA 証明書生成アノテーションの値

次の調整時に、Cluster Operator は ZooKeeper、Kafka、およびその他のコンポーネントのローリング更新を実行して、新しい CA 証明書を信頼します。

メンテナンス時間枠が設定されている場合には、Cluster Operator は次のメンテナンス時間枠内で最初の調整時に Pod をローリングします。

15.6.3. CA 証明書と秘密鍵を独自のものに更新または置換する

独自の CA 証明書と秘密鍵を使用している場合は、手動で更新する必要があります。Cluster Operator はそれらを自動的に更新しません。有効期限が切れる前に、更新期間内に CA 証明書を更新します。同じ手順を使用して、AMQ Streams Operator によって生成された CA 証明書と秘密鍵を独自のものに置き換えることもできます。

CA 証明書と秘密鍵を更新または置換する場合は、この手順のステップを実行してください。独自の CA 証明書のみを更新する場合は、「独自の CA 証明書の更新」 を参照してください。

この手順では、PEM 形式の CA 証明書と秘密鍵の更新について説明します。

以下の手順を実行する前に、新規 CA 証明書の CN(コモンネーム) が現在の CA 証明書とは異なることを確認してください。たとえば、Cluster Operator が証明書を更新する場合には、バージョンの識別に v<version_number> 接尾辞を追加します。更新ごとに別の接尾辞を追加して、独自の CA 証明書で同じ作業を行います。別のキーを使用して新しい CA 証明書を生成して、シークレット に保存されている現在の CA 証明書を保持します。

前提条件

  • Cluster Operator が稼働中である。
  • クラスターまたはクライアントの PEM 形式による新しい X.509 証明書と鍵が必要です。

手順

  1. Kafka カスタムリソースの調整を一時停止します。

    1. OpenShift でカスタムリソースにアノテーションを付け、pause-reconciliation アノテーションを true に設定します。

      oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"
      Copy to Clipboard Toggle word wrap

      たとえば、my-cluster という名前の Kafka カスタムリソースの場合:

      oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
      Copy to Clipboard Toggle word wrap
    2. カスタムリソースの status 条件で、ReconciliationPaused への変更が表示されることを確認し ます。

      oc describe Kafka <name_of_custom_resource>
      Copy to Clipboard Toggle word wrap

      type 条件は、lastTransitionTimeReconciliationPaused に変わります。

  2. CA 証明書の Secret を更新します。

    1. 既存のシークレットを編集して新規 CA 証明書を追加し、証明書生成アノテーション値を更新します。

      oc edit secret <ca_certificate_secret_name>
      Copy to Clipboard Toggle word wrap

      <ca_certificate_secret_name>Secretの名前で、クラスター CA 証明書の場合はKAFKA-CLUSTER-NAME-cluster-ca-certであり、クライアント CA 証明書の場合は KAFKA-CLUSTER-NAME-clients-ca-cert となります。

      以下の例は、my-cluster という名前の Kafka クラスターに関連付けられたクラスター CA 証明書のシークレットを示しています。

      クラスター CA 証明書のシークレット設定例

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      現在の base64 でエンコードされた CA 証明書
      2
      現在の CA 証明書生成アノテーションの値
    2. 保持する現在の CA 証明書の名前を変更します。

      data の配下にある現在の ca.crt プロパティー名を ca-<date>.crt に変更します。<date> は、証明書の有効期限を YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ の形式で指定します。たとえば、ca-2023-01-26T17-32-00Z.crt:。現在の CA 証明書を保持するため、プロパティーの値を残します。

    3. 新規 CA 証明書を base64 にエンコードします。

      cat <path_to_new_certificate> | base64
      Copy to Clipboard Toggle word wrap
    4. CA 証明書を更新します。

      data の下に新しい ca.crt プロパティーを作成し、上の手順から base64 でエンコードされた CA 証明書を ca.crt プロパティーの値としてコピーします。

    5. CA 証明書生成アノテーションの値を増やします。

      strimzi.io/ca-cert-generation アノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-cert-generation=0strimzi.io/ca-cert-generation=1 に変更します。Secret にアノテーションがない場合、値は 0 として扱われるため、1 を指定してアノテーションを追加します。

      AMQ Streams が証明書を生成すると、証明書生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書の場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書を更新できるように、アノテーションには現在のシークレットよりも高い値を指定する必要があります。strimzi.io/ca-cert-generation は、各 CA 証明書の更新で値を 1 増やす必要があります。

    6. 新しい CA 証明書と証明書生成のアノテーション値でシークレットを保存します。

      新しい CA 証明書で更新されるシークレット設定の例

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
      1
      
        ca-2023-01-26T17-32-00Z.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      2
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "1" 
      3
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      新しい base64 でエンコードされた CA 証明書
      2
      古い base64 でエンコードされた CA 証明書
      3
      新しい CA 証明書生成アノテーションの値
  3. 新しい CA 証明書の署名に使用する CA キーの Secret を更新します。

    1. 既存のシークレットを編集して新規 CA キーを追加し、キー生成アノテーション値を更新します。

      oc edit secret <ca_key_name>
      Copy to Clipboard Toggle word wrap

      <ca_key_name> は CA キーの名前です。これは、クラスター CA キーの場合は <kafka_cluster_name>-cluster-ca、クライアント CA キーの場合は <kafka_cluster_name>-clients-ca です。

      以下の例は、my-cluster という名前の Kafka クラスターに関連付けられたクラスター CA キーのシークレットを示しています。

      クラスター CA キーのシークレット設定例

      apiVersion: v1
      kind: Secret
      data:
        ca.key: SA1cKF1GFDzOIiPOIUQBHDNFGDFS... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-key-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca
        #...
      type: Opaque
      Copy to Clipboard Toggle word wrap

      1
      現在の base64 でエンコードされた CA キー
      2
      現在の CA キー生成アノテーションの値
    2. CA キーを base64 にエンコードします。

      cat <path_to_new_key> | base64
      Copy to Clipboard Toggle word wrap
    3. CA キーを更新します。

      前の手順の base64 でエンコードされた CA キーを data にある ca.key プロパティーの値としてコピーします。

    4. CA キー生成アノテーションの値を増やします。

      strimzi.io/ca-key-generation アノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-key-generation=0strimzi.io/ca-key-generation=1 に変更します。Secret にアノテーションがない場合は 0 として扱われるため、1 の値を指定してアノテーションを追加します。

      AMQ Streams が証明書を生成すると、キー生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書と新しい CA キーの場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書およびキーを更新できるように、アノテーションには現在のシークレットよりも高い値が必要です。strimzi.io/ca-key-generation は、CA 証明書の更新ごとにインクリメントする必要があります。

  4. 新しい CA キーおよびキー生成アノテーション値でシークレットを保存します。

    新規 CA キーで更新されるシークレット設定の例

    apiVersion: v1
    kind: Secret
    data:
      ca.key: AB0cKF1GFDzOIiPOIUQWERZJQ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-key-generation: "1" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

    1
    新規の base64 でエンコードされた CA キー
    2
    新しい CA キー生成アノテーションの値
  5. 一時停止から再開します。

    Kafka カスタムリソースの調整を再開するには、pause-reconciliation アノテーションを false に設定します。

    oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"
    Copy to Clipboard Toggle word wrap

    pause-reconciliation アノテーションを削除してもこれを実行できます。

    oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
    Copy to Clipboard Toggle word wrap

    次の調整時に、Cluster Operator は ZooKeeper、Kafka、およびその他のコンポーネントのローリング更新を実行して、新しい CA 証明書を信頼します。ローリング更新が完了すると、Cluster Operator は新しい CA キーで署名された新しいサーバー証明書を生成するために新しい証明書を起動します。

    メンテナンス時間枠が設定されている場合には、Cluster Operator は次のメンテナンス時間枠内で最初の調整時に Pod をローリングします。

  6. 新しい CA 証明書に移行するためのローリング更新が完了するまで待ちます。
  7. 古い証明書をシークレット設定から削除して、クラスターがそれらを信頼しないようにします。

    oc edit secret <ca_certificate_secret_name>
    Copy to Clipboard Toggle word wrap

    古い証明書を削除したシークレット設定の例

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F...
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "1"
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque
    Copy to Clipboard Toggle word wrap

  8. クラスターの手動ローリング更新を開始して、シークレット設定に加えられた変更を取得します。

    「アノテーションを使用した Kafka クラスターと ZooKeeper クラスターのローリングアップデートの開始」を参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat