11.3.6. 独自の CA 証明書で使用される秘密鍵の置き換え
この手順では、Cluster Operator で証明書と鍵を生成する代わりに、使用している CA 証明書と秘密鍵を更新する方法を説明します。
対応する CA キーも変更する場合は、この手順のステップを実行します。それ以外の場合は、独自の CA 証明書を更新 する手順を実行します。
独自の証明書を使用している場合、Cluster Operator は自動的に更新されません。したがって、期限切れ間近の CA 証明書を交換するために、証明書の更新期間中にこの手順を実行することが重要になります。
この手順では、PEM 形式の CA 証明書の更新を説明します。
以下の手順を実行する前に、新規 CA 証明書の CN(コモンネーム)が現在の CA 証明書とは異なることを確認してください。たとえば、Cluster Operator が証明書を更新する場合には、バージョンの識別に v<version_number> サフィックスを追加します。更新ごとに別のサフィックスを追加して、独自の CA 証明書で同じ作業を行います。別のキーを使用して新しい CA 証明書を生成して、シークレット
に保存されている現在の CA 証明書を保持します。
前提条件
- 稼働中の Cluster Operator。
- 独自の CA 証明書と秘密鍵がインストールされている必要があります。
- クラスターまたはクライアントの 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-2022-01-26T17-32-00Z.crt:
現在の CA 証明書を保持するため、プロパティーの値を残します。新規 CA 証明書を base64 にエンコードします。
cat <path_to_new_certificate> | base64
cat <path_to_new_certificate> | base64
Copy 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 証明書を手動で更新するには、値を1増やしたアノテーションを設定します。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> | base64
Copy 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 Kafka NAME-OF-CUSTOM-RESOURCE strimzi.io/pause-reconciliation="false"
oc annotate 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 をローリングします。