跳至内容

如何从自定义端口访问 Amazon MSK 代理?

2 分钟阅读
0

我想从自定义端口访问 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

最佳实践

查看以下最佳实践:

  • 必须在同一台客户端计算机上分别为每个代理运行上述命令。此配置更新不需要重启代理。
  • 修改 REPLICATIONREPLICATION_SECURE 的值时,请务必在代理名称中添加 -internal
  • 请勿替换上述命令中的端口 90939095
  • 更新代理端口配置时,请为客户端字段使用正确的值。
    例如,对于 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]

要检查代理当前的侦听器配置,请完成以下步骤:

  1. 要启动 Apache ZooKeeper Shell,请运行以下命令:

    ./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"
    }

创建两个目标组

在与您的 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 集群启用的所有类型的访问控制方法。

相关信息

How Goldman Sachs builds cross-account connectivity to their Amazon MSK clusters with AWS PrivateLink(Goldman Sachs 如何通过 AWS PrivateLink 构建与其 Amazon MSK 集群的跨账户连接)

自定义 Amazon MSK 配置

Configure a custom domain name for your Amazon MSK cluster(为 Amazon MSK 集群配置自定义域名)

Establishing Multi-tenant, Custom Domain-based Secure Connectivity to Amazon MSK through a Kafka Proxy(通过 Kafka 代理与 Amazon MSK 建立基于自定义域的多租户安全连接)

Consuming private Amazon API Gateway APIs using mutual TLS(使用双向 TLS 访问私有 Amazon API Gateway API)

AWS 官方已更新 7 个月前