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 を使用する場合、証明書ファイルにチェーン全体を含める必要があります。チェーンの順序は以下のとおりです。
- クラスターまたはクライアント CA
- 1 つ以上の中間 CA
- ルート 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
openssl pkcs12 -export -in ca.crt -nokeys -out ca.p12 -password pass:<P12_password> -caname ca.crt
<P12_password> を独自のパスワードに置き換えます。
手順
CA 証明書を含む新しいシークレットを作成します。
PEM 形式の証明書を使用したクライアントシークレットの作成
oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt
oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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-PASSWORDCopy to Clipboard Copied! Toggle word wrap Toggle overflow <cluster_name> は、独自の Kafka クラスターの名前に置き換えます。
秘密鍵を含む新しいシークレットを作成します。
oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.key
oc create secret generic CA-KEY-SECRET --from-file=ca.key=ca.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットにラベルを付けます。
oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>
oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=<cluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ラベル
strimzi.io/kind=Kafkaは Kafka カスタムリソースを識別します。 -
ラベル
strimzi.io/cluster=<cluster_name>は Kafka クラスターを識別します。
-
ラベル
シークレットにアノテーションを付けます。
oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATION
oc annotate secret CA-CERTIFICATE-SECRET strimzi.io/ca-cert-generation=CA-CERTIFICATE-GENERATIONCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATION
oc annotate secret CA-KEY-SECRET strimzi.io/ca-key-generation=CA-KEY-GENERATIONCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
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 つ増やして設定します。
-
クラスターの
Kafkaリソースを作成し、生成された CA を 使用しない ようにKafka.spec.clusterCaまたはKafka.spec.clientsCaオブジェクトを設定します。独自指定の証明書を使用するようにクラスター CA を設定する
Kafkaリソースの例 (抜粋)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.6.2. 独自の CA 証明書の更新 リンクのコピーリンクがクリップボードにコピーされました!
独自の CA 証明書を使用している場合は、手動で更新する必要があります。Cluster Operator はそれらを自動的に更新しません。有効期限が切れる前に、更新期間内に CA 証明書を更新します。
CA 証明書を更新し、同じ秘密鍵を続行する場合は、この手順のステップを実行します。独自の CA 証明書 および 秘密鍵を更新する場合は、「CA 証明書と秘密鍵を独自のものに更新または置換する」 を参照してください。
この手順では、PEM 形式の CA 証明書の更新を説明します。
前提条件
- Cluster Operator が稼働中である。
- クラスターまたはクライアントの PEM 形式による新しい X.509 証明書が必要です。
手順
CA 証明書の
Secretを更新します。既存のシークレットを編集して新規 CA 証明書を追加し、証明書生成アノテーション値を更新します。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ca_certificate_secret_name>は
Secretの名前で、クラスター CA 証明書の場合は<kafka_cluster_name>-cluster-ca-certであり、クライアント CA 証明書の場合は<kafka_cluster_name>-clients-ca-certとなります。以下の例は、
my-clusterという名前の Kafka クラスターに関連付けられたクラスター CA 証明書のシークレットを示しています。クラスター CA 証明書のシークレット設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規 CA 証明書を base64 にエンコードします。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA 証明書を更新します。
前の手順の base64 でエンコードされた CA 証明書を、
dataのca.crtプロパティーの値としてコピーします。CA 証明書生成アノテーションの値を増やします。
strimzi.io/ca-cert-generationアノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-cert-generation=0をstrimzi.io/ca-cert-generation=1に変更します。Secretにアノテーションがない場合、値は0として扱われるため、1を指定してアノテーションを追加します。AMQ Streams が証明書を生成すると、証明書生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書の場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書を更新できるように、アノテーションには現在のシークレットよりも高い値を指定する必要があります。
strimzi.io/ca-cert-generationは、各 CA 証明書の更新で値を 1 増やす必要があります。新しい CA 証明書と証明書生成のアノテーション値でシークレットを保存します。
新しい CA 証明書で更新されるシークレット設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の調整時に、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 証明書と鍵が必要です。
手順
Kafkaカスタムリソースの調整を一時停止します。OpenShift でカスタムリソースにアノテーションを付け、
pause-reconciliationアノテーションをtrueに設定します。oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"
oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
my-clusterという名前のKafkaカスタムリソースの場合:oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムリソースの status 条件で、
ReconciliationPausedへの変更が表示されることを確認し ます。oc describe Kafka <name_of_custom_resource>
oc describe Kafka <name_of_custom_resource>Copy to Clipboard Copied! Toggle word wrap Toggle overflow type条件は、lastTransitionTimeでReconciliationPausedに変わります。
CA 証明書の
Secretを更新します。既存のシークレットを編集して新規 CA 証明書を追加し、証明書生成アノテーション値を更新します。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ca_certificate_secret_name> は
Secretの名前で、クラスター CA 証明書の場合はKAFKA-CLUSTER-NAME-cluster-ca-certであり、クライアント CA 証明書の場合はKAFKA-CLUSTER-NAME-clients-ca-certとなります。以下の例は、
my-clusterという名前の Kafka クラスターに関連付けられたクラスター CA 証明書のシークレットを示しています。クラスター CA 証明書のシークレット設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保持する現在の CA 証明書の名前を変更します。
dataの配下にある現在のca.crtプロパティー名をca-<date>.crtに変更します。<date> は、証明書の有効期限を YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ の形式で指定します。たとえば、ca-2023-01-26T17-32-00Z.crt:。現在の CA 証明書を保持するため、プロパティーの値を残します。新規 CA 証明書を base64 にエンコードします。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA 証明書を更新します。
dataの下に新しいca.crtプロパティーを作成し、上の手順から base64 でエンコードされた CA 証明書をca.crtプロパティーの値としてコピーします。CA 証明書生成アノテーションの値を増やします。
strimzi.io/ca-cert-generationアノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-cert-generation=0をstrimzi.io/ca-cert-generation=1に変更します。Secretにアノテーションがない場合、値は0として扱われるため、1を指定してアノテーションを追加します。AMQ Streams が証明書を生成すると、証明書生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書の場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書を更新できるように、アノテーションには現在のシークレットよりも高い値を指定する必要があります。
strimzi.io/ca-cert-generationは、各 CA 証明書の更新で値を 1 増やす必要があります。新しい CA 証明書と証明書生成のアノテーション値でシークレットを保存します。
新しい CA 証明書で更新されるシークレット設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
新しい CA 証明書の署名に使用する CA キーの
Secretを更新します。既存のシークレットを編集して新規 CA キーを追加し、キー生成アノテーション値を更新します。
oc edit secret <ca_key_name>
oc edit secret <ca_key_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ca_key_name> は CA キーの名前です。これは、クラスター CA キーの場合は
<kafka_cluster_name>-cluster-ca、クライアント CA キーの場合は<kafka_cluster_name>-clients-caです。以下の例は、
my-clusterという名前の Kafka クラスターに関連付けられたクラスター CA キーのシークレットを示しています。クラスター CA キーのシークレット設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA キーを base64 にエンコードします。
cat <path_to_new_key> | base64
cat <path_to_new_key> | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA キーを更新します。
前の手順の base64 でエンコードされた CA キーを
dataにあるca.keyプロパティーの値としてコピーします。CA キー生成アノテーションの値を増やします。
strimzi.io/ca-key-generationアノテーションの値を 1 つ増分して更新します。たとえば、strimzi.io/ca-key-generation=0をstrimzi.io/ca-key-generation=1に変更します。Secretにアノテーションがない場合は0として扱われるため、1の値を指定してアノテーションを追加します。AMQ Streams が証明書を生成すると、キー生成アノテーションは Cluster Operator によって自動的に増分されます。独自の CA 証明書と新しい CA キーの場合は、より高い増分値でアノテーションを設定します。Cluster Operator が Pod をロールアウトし、証明書およびキーを更新できるように、アノテーションには現在のシークレットよりも高い値が必要です。
strimzi.io/ca-key-generationは、CA 証明書の更新ごとにインクリメントする必要があります。
新しい CA キーおよびキー生成アノテーション値でシークレットを保存します。
新規 CA キーで更新されるシークレット設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時停止から再開します。
Kafkaカスタムリソースの調整を再開するには、pause-reconciliationアノテーションをfalseに設定します。oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"
oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"Copy to Clipboard Copied! Toggle word wrap Toggle overflow pause-reconciliationアノテーションを削除してもこれを実行できます。oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-
oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の調整時に、Cluster Operator は ZooKeeper、Kafka、およびその他のコンポーネントのローリング更新を実行して、新しい CA 証明書を信頼します。ローリング更新が完了すると、Cluster Operator は新しい CA キーで署名された新しいサーバー証明書を生成するために新しい証明書を起動します。
メンテナンス時間枠が設定されている場合には、Cluster Operator は次のメンテナンス時間枠内で最初の調整時に Pod をローリングします。
- 新しい CA 証明書に移行するためのローリング更新が完了するまで待ちます。
古い証明書をシークレット設定から削除して、クラスターがそれらを信頼しないようにします。
oc edit secret <ca_certificate_secret_name>
oc edit secret <ca_certificate_secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古い証明書を削除したシークレット設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターの手動ローリング更新を開始して、シークレット設定に加えられた変更を取得します。
「アノテーションを使用した Kafka クラスターと ZooKeeper クラスターのローリングアップデートの開始」を参照してください。