カスタムポートから Amazon MSK ブローカーにアクセスするにはどうすればよいですか?

最終更新日: 2022 年 2 月 22 日

カスタムポートから Amazon Managed Streaming for Apache Kafka (Amazon MSK) ブローカーにアクセスしたいと考えています。

簡単な説明

Amazon MSK の advertised.listener 設定を、デフォルトの Kafka ブローカーの 9094/9092 番ポートから 443 番または任意の他のポートに動的に更新できます。動的設定は Apache ZooKeeper に保存されます。したがって、ブローカーを再起動してもこれらの設定は更新されません。

例えば、Apache Kafka バージョン 2.4.1 で、TLS 暗号化とプレーンテキストトラフィックが有効になっている 2 つのブローカーを持つ Amazon MSK クラスターがあるとします。advertised.listener プロパティを変更してブローカー設定を更新するには、クライアントマシンが Amazon MSK クラスターと同じ仮想プライベートクラウド (VPC) にあることを確認してください。ポート 443 からリッスンして接続するには、kafka.amazon.com で Network Load Balancer、ターゲットグループ、および Amazon Route 53 プライベートホストゾーンを設定する必要があります。

これらの設定は、次のいずれかのアプローチを使用して作成できます。

  • すべてのブローカーに 1 つのポートを使用する必要がある場合は、各ブローカーについて個別の Network Load Balancer を設定する必要があります。例えば、2 つのブローカーに 1 つのポート 443 を使用する場合、クライアントとブローカー間の通信パターンは次のようになります。
    クライアント - ポート 443 の Network Load Balancer 1 - ブローカー 1 のターゲットグループ - ブローカー 1 クライアント - ポート 443 の Network Load Balancer 2 - ブローカー 2 のターゲットグループ - ブローカー 2
  • すべてのブローカーに 1 つの Network Load Balancer を使用する必要がある場合は、各ブローカーについて個別のポートを使用する必要があります。例えば、2 つのブローカーに 1 つの Network Load Balancer を使用する場合、クライアントとブローカー間の通信パターンは次のようになります。
    クライアント - Network Load Balancer リスナーポート 9001 - ブローカー 1 のターゲットグループ - ブローカー 1 クライアント - Network Load Balancer リスナーポート 9002 - ブローカー 2 のターゲットグループ - ブローカー 2

この記事では、最初のアプローチについて説明します。

解決方法

ブローカーポートを更新する

クライアントマシンから次のようなコマンドを実行して、ブローカー 1 のポートを 9094 から 443 に更新します。

[ec2-user@ip-aa-a-a-aaa bin]$./kafka-configs.sh --bootstrap-server 
b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9094 --entity-type 
brokers --entity-name 1 --alter --command-config client.properties 
--add-config 
advertised.listeners=[CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443,REPLICATION://b-1-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9093,REPLICATION_SECURE://b-1-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9095]

Completed updating config for entity: broker 1

クライアントマシンから次のようなコマンドを実行して、ブローカー 2 のポートを 443 に更新します。

[ec2-user@ip-aa-a-a-aaa bin]$./kafka-configs.sh --bootstrap-server 
b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9094 --entity-type 
brokers --entity-name 2 --alter --command-config client.properties 
--add-config 
advertised.listeners=[CLIENT_SECURE://b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443,REPLICATION://b-2-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9093,REPLICATION_SECURE://b-2-internal.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:9095]

Completed updating config for entity: broker 2

注:

  • 前述のコマンドは、同じクライアントマシンから各ブローカーについて個別に実行する必要があります。この設定更新では、ブローカーの再起動は不要です。
  • REPLICATIONREPLICATION_SECURE の値を変更する場合は、ブローカーの名前に -internal を追加してください。
  • コマンドでポート 90939095 を置き換えないように注意してください。
  • ブローカーポート設定を更新するときは、必ず client フィールドに正しい値を使用してください。例: TLS - CLIENT_SECURE の場合は、[CLIENT_SECURE://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443] を使用します。SASL - CLIENT_SASL_SCRAM の場合は、[CLIENT_SASL_SCRAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443] を使用します。IAM - CLIENT_IAM の場合は、[CLIENT_IAM://b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com:443] を使用します。

client フィールドの値を確認するには、次の操作を実行します。

1.    次のコマンドを実行して Apache ZooKeeper シェルに入ります。

./zookeeper-shell.sh <ZooKeeper_connection_string>

2.    次のコマンドを実行して、ブローカー 1 の設定を一覧表示します。

get /brokers/ids/1
{"listener_security_protocol_map":{"REPLICATION_SECURE":"SSL","CLIENT_SASL_SCRAM":"SASL_SSL","REPLICATION":"PLAINTEXT","CLIENT":"PLAINTEXT","CLIENT_SECURE":"SSL"},"endpoints":["CLIENT://b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9092","CLIENT_SASL_SCRAM://b-1.dns.691zg3.c14.kafka.us-east-1.amazonaws.com:9096","CLIENT_SECURE://b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9094","REPLICATION://b-1-internal.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9093","REPLICATION_SECURE://b-1-internal.testdns.xx.c14.kafka.us-east-1.amazonaws.com:9095"],"rack":"use1-az2","jmx_port":9099,"port":9092,"host":"b-1.testdns.xx.c14.kafka.us-east-1.amazonaws.com","version":4,"timestamp":"1645081828199"}

ターゲットグループを 2 つ作成する

次のオプションを使用して、Amazon MSK クラスターと同じ VPC に 2 つのターゲットグループ (例: TG1 と TG2) を作成します。

  • target type には ip
  • Protocol には TCP
  • Port には 9094

その後、ブローカーの IP アドレスを使用して Amazon MSK ブローカーをそれぞれのターゲットグループに登録します。

次のようなコマンドを実行して、ブローカーの IP アドレスを取得します。

[ec2-user@ip-aa-a-a-aaa bin]$ dig +short b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
10.0.3.xx

[ec2-user@ip-aa-a-a-aaa bin]$ dig +short b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
10.0.4.xx

2 つの Network Load Balancer を作成する

次の設定を使用して 2 つの Network Load Balancer (例: NLB1 と NLB2) を作成します。

  • [Listener] (リスナー) で、ブローカーのアドバタイズされたポート 443 をポイントするようにポートを変更します。
  • [Default action] (デフォルトのアクション) で、トラフィックを転送するターゲットグループをそれぞれ選択します。
  • [Mappings] (マッピング) で、Amazon MSK ブローカーが存在するサブネットを選択してください。

作成した Network Load Balancer のクロスゾーンロードバランシングを有効化してください。

Route 53 プライベートホストゾーンを作成する

次のオプションを指定して Route 53 プライベートホストゾーンを作成します。

  • [Domain Name] (ドメイン名) に、ブローカーの文字列からドメイン名を入力します (例: kafka.us-east-1.amazonaws.com)。
  • [VPC ID] で、クライアントの VPC ID を入力します。

2 つの A タイプのエイリアスレコードを作成する

Amazon Route 53 コンソールを使用して、ブローカーの各 DNS 名と同じレコード名を持つ A タイプのエイリアスレコードを 2 つ作成します。これは、TLS ハンドシェイクの失敗を防ぐために必要です。

クラスターのセキュリティグループのインバウンドルールで、Network Load Balancer の IP アドレスからポート 9094 へのトラフィックが許可されていることを確認してください。

前述の手順をすべて実行したら、ブローカーのアドバタイズされたポート 443 に接続できます。

注: このソリューションは、Amazon MSK クラスター向けに有効になっているすべてのタイプのアクセスコントロールメソッドで機能します。


How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink (Goldman Sachs が AWS PrivateLink を使用して Amazon MSK クラスターへのクロスアカウント接続を構築する方法)

Custom MSK configurations (カスタム MSK 設定)

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?