为您的 Amazon MSK 集群配置自定义域名 大数据博客
为你的 Amazon MSK 集群配置自定义域名
关键要点在本篇文章中,我们将展示如何使用 AWS 的 Network Load Balancer (NLB) 和 Route 53,给 Amazon MSK 集群配置自定义域名,支持使用 SASL/SCRAM 认证的客户端连接。
Amazon Managed Streaming for Apache Kafka (MSK) 是一种完全托管的服务,使您能够构建并运行使用 Apache Kafka 处理流数据的应用程序。客户包括内部团队或第三方,他们使用 MSK 实现与最终客户的实时数据共享,避免了在迁移和灾难恢复过程中重新配置 Kafka 客户端。本文将介绍如何配置自定义域名以简化这一过程。
解决方案概述
在亚马逊 MSK 架构中,Network Load BalancersNLB是一个受欢迎的组成部分,结合 AWS PrivateLink 来实现与 MSK 集群的连接。
解决方案的实施方法是,通过 NLB 来为使用 SASL/SCRAM 认证的客户启用自定义域名。以下图示展示了解决方案所用的组件。
SASL/SCRAM 使用 TLS 加密客户端和 Kafka broker 之间的传输流量。为了使用自定义域名,客户端需要接收与该自定义域名匹配的服务器证书。
为确保可用性,建议通过以下连接配置自定义域名与 MSK 集群的连接。
Kafka 监听器和广告监听器
Kafka 监听器listeners是一组 Kafka 绑定用于监听的地址。Kafka 客户端使用引导地址连接到集群中的一个 broker,并发出元数据请求。
元数据响应包含客户端连接所需的 broker 地址信息。广告监听器advertisedlisteners是 Kafka 客户端连接 broker时使用的配置选项。您需要为 SASL/SCRAM 认证协议设定自定义的广告监听器。
Kafka 引导过程和设置选项
Kafka 客户端使用引导地址从 MSK 集群获取元数据,并连接到适当的 broker。使用自定义域名连接时,有两个选项:
选项 1:仅通过 NLB 进行引导连接可以在引导连接上使用自定义域名,同时广告监听器未设置。这种方式适用于 Kafka 客户端与 NLB 和 MSK broker 的弹性网络接口ENI之间有直接网络连接的场景。
选项 2:所有连接通过 NLB使用自定义域名进行引导和连接 broker,适用于与 MSK broker 的 ENI 没有直接网络连接的 Kafka 客户端。
NLB 和域名系统配置
使用 Route 53 创建私有托管区并与 MSK VPC 关联,以便在客户端实现 DNS 解析。确保 DNS 记录能正确解析至 NLB,以下是创建 DNS 记录的示例:

markdown记录 记录类型 值 bootstrap A NLB Alias b1 A NLB Alias b2 A NLB Alias b3 A NLB Alias
确保正确设置并注册 NLB 监听器,以支持从客户端的连接请求。
部署前提
要部署此解决方案,您需要以下条件:
一个 AWS 账户适当的 AWS 身份与访问管理 (IAM) 权限以部署 AWS CloudFormation 堆栈资源启动 CloudFormation 模板
按照以下步骤部署 CloudFormation 模板:
选择 Launch Stack。 提供堆栈名称为 mskcustomdomain。输入使用的 SASL/SCRAM 认证的用户名和密码。模板将部署以下资源:
VPC 私有子网和安全组MSK 集群Kafka 客户端的 EC2 实例设置 EC2 实例
按照以下步骤配置您的 EC2 实例:
使用 Session Manager 连接到 EC2 实例。切换到 ec2user: shell sudo su ec2user cd运行命令配置 SASL/SCRAM 客户端属性、创建 Kafka 访问控制列表,并创建一个名为 customer 的主题。自签名证书
本文使用自签名证书。建议使用公共证书或由组织的私有密钥基础设施PKI签名的证书。
要创建自签名证书,可以使用 openSSL 命令。
导入证书至 ACM
使用 ACM 导入自签名证书。
shellexport CertificateARN=(aws acm importcertificate certificate file//mskcustomdomaincertificatepem privatekey file//mskcustomdomainpvtkeypem jq r CertificateArn)
导入证书至 Kafka 客户端信任存储
客户端需验证服务器 SSL 证书,因此需将自签名证书导入至客户端信任存储。
设置 VPC 内的 DNS 解析
创建私有托管区,并将其与客户端所部署的 VPC 关联。
创建 EC2 目标组
需要创建四个目标组:分别为每个 broker 实例及一个指向所有 broker 的目标组。
注册目标组
将每个目标组与 MSK 集群中的 broker 实例关联。
设置 NLB 监听器
创建 Network Load Balancer 及其相关的监听器。
开启跨区域负载均衡
默认情况下,NLB 的跨区域负载均衡是禁用的。我们需要启用它以确保流量在所有可用区域均匀分配。
shellaws elbv2 modifyloadbalancerattributes loadbalancerarn NLBARN attributes Key=loadbalancingcrosszoneenabledValue=true
创建私有托管区中的 DNS A 记录
创建 DNS A 记录以路由流量至网络负载均衡器。
配置 MSK 集群中的广告监听器
获取 broker 的监听详情并配置广告监听器。
测试设置
将引导地址设置为自定义域名,然后使用此域名列出 MSK 主题,确保一切正常。
梯子加速清理
手动删除需要的资源以停止产生费用,包括私有托管区、NLB、目标组及 ACM 中的证书。
总结
通过结合 NLB、Route 53 及广告监听器配置选项,您可以为 Amazon MSK 集群实现自定义域名支持,从而简化客户端的连接过程。鼓励读者尝试这一解决方案,并在评论区留下问题和反馈。
关于作者
Subham Rakshit 是 AWS 旗下数据分析的高级流媒体解决方案架构师,主要负责设计并建设流媒体架构。
Mark Taylor 是 AWS 的高级技术客户经理,负责与企业客户合作实施最佳实践、优化 AWS 的使用。
如果你对这篇文章有任何疑问,欢迎在评论中进行讨论。
2021年企业战略博客:年终总结关键点提炼在这篇文章中,我们回顾2021年的企业战略博客,整理出重要主题和关键讨论,包括数字化转型的商业价值、环境、社会和治理ESG问题、战略规划、人工智能与机器学习、执行力和安全性等方面的内容。概述在过去的一年里,我们撰写了多篇博客,围绕与AWS客户高管交流时所关注...