第16章 TLS 証明書の管理
Streams for Apache Kafka は、Kafka と Streams for Apache Kafka コンポーネント間の暗号化通信用の TLS をサポートしています。
Kafka を KRaft モードで使用する場合、Streams for Apache Kafka は、次のコンポーネント間の通信用に暗号化された TLS 接続を確立します。
- Kafka ブローカー
- Kafka コントローラー
- Kafka ブローカーとコントローラー
- Streams for Apache Kafka Operator と Kafka
- Cruise Control ブローカーと Kafka ブローカー
- Kafka Exporter ブローカーと Kafka ブローカー
クライアントと Kafka ブローカー間の接続では、TLS 暗号化通信を使用するように設定する必要があるリスナーが使用されます。Kafka
カスタムリソースでこれらのリスナーを設定し、各リスナー名とポート番号はクラスター内で一意である必要があります。Kafka ブローカーと Kafka クライアント間の通信は、tls
プロパティーがリスナーに設定される方法に応じて暗号化されます。詳細は、14章Kafka クラスターへのクライアントアクセスの設定 を参照してください。
次の図は、セキュアな通信の接続を示しています。
図16.1 TLS 暗号化によって保護された KRaft ベースの Kafka 通信

図に示されているポートは次のように使用されます。
- コントロールプレーンリスナー (9090)
- ポート 9090 の内部コントロールプレーンリスナーは、Kafka コントローラー間のブローカー間通信、およびブローカーからコントローラーへの通信を容易にします。さらに、Cluster Operator はリスナーを通じてコントローラーと通信します。このリスナーは Kafka クライアントにアクセスできません。
- レプリケーションリスナー (9091)
- ブローカー間のデータレプリケーション、および Streams for Apache Kafka Operator、Cruise Control、および Kafka Exporter からのブローカーへの内部接続では、ポート 9091 のレプリケーションリスナーが使用されます。このリスナーは Kafka クライアントにアクセスできません。
- クライアント接続のリスナー (9092 以降)
- TLS 暗号化通信 (リスナーの設定による) の場合、内部クライアントと外部クライアントは Kafka ブローカーに接続します。外部クライアント (プロデューサーとコンシューマー) は、アドバタイズされたリスナーポートを介して Kafka ブローカーに接続します。
ブローカーへのクライアントアクセス用にリスナーを設定する場合、いくつかの例外を除き、ポート 9092 以降 (9093、9094 など) を使用できます。ブローカー間通信 (9090 および 9091)、Prometheus メトリック (9404)、および JMX (Java Management Extensions) モニタリング (9999) 用に予約されているポートを使用するようにリスナーを設定できません。
クラスター管理に ZooKeeper を使用している場合、ZooKeeper と Kafka ブローカーおよび Streams for Apache Kafka Operator の間に TLS 接続が存在されます。
次の図は、ZooKeeper を使用する場合の安全な通信のための接続を示しています。
図16.2 Kafka と ZooKeeper の通信は TLS 暗号化によってセキュリティー保護されています

ZooKeeper ポートは次のように使用されます。
- ZooKeeper ポート (2181)
- Kafka ブローカーに接続するための ZooKeeper ポート。さらに、Cluster Operator はこのポートを通じて ZooKeeper と通信します。Topic Operator を双方向モードで使用している場合は、このポートを介して ZooKeeper とも通信します。
- ZooKeeper の相互通信ポート (2888)
- ZooKeeper ノード間の相互通信用の ZooKeeper ポート。
- ZooKeeper リーダー選出ポート (3888)
- ZooKeeper クラスターにある ZooKeeper ノード間のリーダー選出のための ZooKeeper ポート。
16.1. 内部クラスター CA とクライアント CA
暗号化をサポートするには、Streams for Apache Kafka の各コンポーネントに独自の秘密鍵と公開鍵証明書が必要です。すべてのコンポーネント証明書は、クラスター CA と呼ばれる内部認証局 (CA) により署名されます。
認証局 (CA) 証明書は、コンポーネントとクライアントの ID 検証に Cluster Operator によって生成されます。
同様に、mTLS を使用して Streams for Apache Kafka に接続する各 Kafka クライアントアプリケーションでは、秘密鍵と証明書を使用する必要があります。クライアント CA という第 2 の内部 CA を使用して、Kafka クライアントの証明書に署名します。
クラスター CA とクライアント CA の両方には、自己署名の公開鍵証明書があります。
Kafka ブローカーは、クラスター CA またはクライアント CA のいずれかが署名した証明書を信頼するように設定されます。クライアントによる接続が不要なコンポーネント (ZooKeeper など) のみが、クラスター CA によって署名された証明書を信頼します。外部リスナーの TLS 暗号化が無効でない限り、クライアントアプリケーションはクラスター CA により署名された証明書を必ず信頼する必要があります。これは、mTLS 認証を実行するクライアントアプリケーションにも当てはまります。
デフォルトでは、Streams for Apache Kafka は、クラスター CA またはクライアント CA によって発行された CA 証明書を自動的に生成および更新します。Kafka.spec.clusterCa
プロパティーと Kafka.spec.clientsCa
プロパティーを使用して、これらの CA 証明書の管理を設定できます。
Cluster Operator によって生成された CA を使用しない場合は 独自のクラスターおよびクライアント CA 証明書をインストールできます。Cluster Operator では、独自に指定した証明書には更新されません。