Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何从自定义端口访问 Amazon MSK 代理?
我想从自定义端口访问 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 代理。
简短描述
对于自定义端口配置,您可以将 advertised.listerner 设置从默认端口 (9092-plaintext/9094-TLS/9096-SASL-SCRAM/9098-IAM) 更改为任意端口(包括 443)。这些设置会持久化存储在 Apache ZooKeeper 中,且在代理重启后保持不变。
您可以通过单端口配置或多端口配置实现自定义端口配置。单端口配置(例如使用端口 443)要求为每个代理配置单独的网络负载均衡器。多端口配置使用一个网络负载均衡器,并为每个代理分配不同的端口。
以下解决方法主要针对单端口配置方法。
**重要事项:**基于 Amazon MSK KRaft 的集群目前不支持对播发的侦听器进行动态修改。这是 Apache Kafka 的 KRaft 实现中的一个已知限制,适用于所有基于 Kraft 的集群,包括在 Amazon MSK 上运行的集群。Amazon MSK 在 3.7 及更高版本上支持 KRaft。对于需要动态更新侦听器的使用案例,请使用基于 ZooKeeper 的集群。
解决方法
更新代理端口
要将代理 1 的端口从 9094 更新为 443,请在客户端计算机上运行类似于以下示例的命令:
./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,请在客户端计算机上运行类似于以下示例的命令:
./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。
- 更新代理端口配置时,请为客户端字段使用正确的值。
例如,对于 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]。
要检查代理当前的侦听器配置,请完成以下步骤:
-
要启动 Apache ZooKeeper Shell,请运行以下命令:
./zookeeper-shell.sh ZooKeeper_connection_string -
要列出代理 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" }
创建两个目标组
在与您的 Amazon MSK 集群相同的 Amazon Virtual Private Cloud (Amazon VPC) 中使用以下值创建两个目标组:
- 对于 target type(目标类型),使用 ip。
- 对于 Protocol(协议),使用 TCP。
- 对于 Port(端口),使用 9094。
然后,使用代理的 IP 地址将 Amazon MSK 代理注册到相应的目标组中。
要获取代理的 IP 地址,请运行类似于以下示例的命令:
代理 1
dig +short b-1.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
输出示例:
10.0.3.##
代理 2
dig +short b-2.testdns.mswah7.c1.kafka.us-east-1.amazonaws.com
输出示例:
10.0.4.##
创建两个网络负载均衡器
创建两个网络负载均衡器,并配置以下设置:
- 对于 Listeners(侦听器),修改端口以指向代理的播发端口 443。
- 对于 Default action(默认操作),选择相应的目标组来转发流量。
- 对于 Mappings(映射),请务必选择 Amazon MSK 代理所在的子网。
确保为您创建的网络负载均衡器启用跨区域负载均衡。
创建 Amazon Route 53 私有托管区
创建 Amazon Route 53 私有托管区,并配置以下值:
- 对于 Domain Name(域名),输入您的代理字符串中的域名。例如,kafka.us-east-1.amazonaws.com。
- 对于 VPC ID,输入客户端的 VPC ID。
创建两条 A 型别名记录
为防止任何 TLS 握手失败,请创建两条 A 型别名记录,其记录名称需与对应代理的 DNS 名称相同。
确保集群安全组的入站规则允许流量从网络负载均衡器的 IP 地址流向端口 9094。
执行上述所有步骤后,请连接到代理的播发端口 443。
**注意:**此解决方案适用于您为 Amazon MSK 集群启用的所有类型的访问控制方法。
相关信息
Configure a custom domain name for your Amazon MSK cluster(为 Amazon MSK 集群配置自定义域名)
Consuming private Amazon API Gateway APIs using mutual TLS(使用双向 TLS 访问私有 Amazon API Gateway API)
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 9 个月前