カスタムポートから Amazon MSK ブローカーにアクセスするにはどうすればよいですか?
カスタムポートから 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
注:
- 前述のコマンドは、同じクライアントマシンから各ブローカーについて個別に実行する必要があります。この設定更新では、ブローカーの再起動は不要です。
- REPLICATION と REPLICATION_SECURE の値を変更する場合は、ブローカーの名前に -internal を追加してください。
- コマンドでポート 9093 と 9095 を置き換えないように注意してください。
- ブローカーポート設定を更新するときは、必ず 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 設定)
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 1年前lg...
- 質問済み 2年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 9ヶ月前
- AWS公式更新しました 1年前