14.6. ロードバランサーを使用した Kafka へのアクセス
ロードバランサーを使用して、OpenShift クラスター外の外部クライアントから Streams for Apache Kafka クラスターにアクセスします。
ブローカーに接続するには、Kafka ブートストラップアドレスのホスト名とポート番号、および TLS 暗号化に使用される証明書を指定します。
この手順では、基本的な loadbalancer
リスナーの設定を示します。リスナープロパティーを使用して、TLS 暗号化 (tls
) を有効にし、クライアント認証メカニズム (authentication
) を指定できます。configuration
プロパティーを使用して追加の設定を追加します。たとえば、loadbalancer
リスナーで次の設定プロパティーを使用できます。
loadBalancerSourceRanges
- トラフィックを CIDR (クラスレスドメイン間ルーティング) 範囲の指定されたリストに制限します。
externalTrafficPolicy
- サービスによって外部トラフィックがローカルノードのエンドポイントまたはクラスター全体のエンドポイントにルーティングされるかどうかを指定します。
loadBalancerIP
- ロードバランサーの作成時に特定の IP アドレスを要求します。
リスナー設定の詳細は、GenericKafkaListener
スキーマリファレンス を参照してください。
前提条件
- 稼働中の Cluster Operator
この手順では、Kafka クラスター名は my-cluster
です。リスナーの名前は external3
です。
手順
外部リスナーを
loadbalancer
タイプに設定してKafka
リソースを設定します。以下に例を示します。
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: labels: app: my-cluster name: my-cluster namespace: myproject spec: kafka: # ... listeners: - name: external3 port: 9094 type: loadbalancer tls: true authentication: type: tls # ... # ... zookeeper: # ...
リソースを作成または更新します。
oc apply -f <kafka_configuration_file>
Kafka ブローカーの ID を検証するためのクラスター CA 証明書も、シークレット
my-cluster-cluster-ca-cert
に作成されます。loadbalancer
タイプのサービスとロードバランサーは、外部ブートストラップサービスと同様に、Kafka ブローカーごとに作成されます。ロードバランサーサービス、ブートストラップおよびブローカー用に作成されたロードバランサー
NAME TYPE CLUSTER-IP PORT(S) my-cluster-kafka-external3-0 LoadBalancer 172.30.204.234 9094:30011/TCP my-cluster-kafka-external3-1 LoadBalancer 172.30.164.89 9094:32544/TCP my-cluster-kafka-external3-2 LoadBalancer 172.30.73.151 9094:32504/TCP my-cluster-kafka-external3-bootstrap LoadBalancer 172.30.30.228 9094:30371/TCP NAME EXTERNAL-IP (loadbalancer) my-cluster-kafka-external3-0 a8a519e464b924000b6c0f0a05e19f0d-1132975133.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-1 ab6adc22b556343afb0db5ea05d07347-611832211.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-2 a9173e8ccb1914778aeb17eca98713c0-777597560.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-bootstrap a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com
クライアント接続に使用されるブートストラップアドレスは、
Kafka
リソースのstatus
に伝播されます。ブートストラップアドレスのステータスの例
status: clusterId: Y_RJQDGKRXmNF7fEcWldJQ conditions: - lastTransitionTime: '2023-01-31T14:59:37.113630Z' status: 'True' type: Ready kafkaVersion: 3.7.0 listeners: # ... - addresses: - host: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com port: 9094 bootstrapServers: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094 certificates: - | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- name: external3 observedGeneration: 2 operatorLastSuccessfulVersion: 2.7 # ...
クライアント接続に使用される DNS アドレスは、各ロードバランサーサービスの
status
に伝達されます。ブートストラップロードバランサーのステータスの例
status: loadBalancer: ingress: - hostname: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com # ...
Kafka
リソースのステータスから、Kafka クラスターにアクセスする際に使用するブートストラップアドレスを取得します。oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="external3")].bootstrapServers}{"\n"}' a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094
クラスター CA 証明書を抽出します。
oc get secret my-cluster-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
ブローカーに接続するようにクライアントを設定します。
-
Kafka クラスターに接続するためのブートストラップアドレスとして、Kafka クライアントのブートストラップホストとポートを指定します。たとえば、
a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094
です。 抽出した証明書を Kafka クライアントのトラストストアに追加して、TLS 接続を設定します。
クライアント認証メカニズムを有効にした場合は、クライアントでもそれを設定する必要があります。
-
Kafka クラスターに接続するためのブートストラップアドレスとして、Kafka クライアントのブートストラップホストとポートを指定します。たとえば、
独自のリスナー証明書を使用している場合は、CA 証明書をクライアントのトラストストア設定に追加する必要があるかどうかを確認してください。パブリック (外部) CA の場合、通常は追加する必要はありません。