写点什么

通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ

  • 2023-05-10
    天津
  • 本文字数:2500 字

    阅读完需:约 8 分钟

引言:

一般为了解决应用解耦,异步处理,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性的架构;我们会引入消息队列中间件来完善架构设计。

对于需要消息传递协议的应用程序,包括 JMS、NMS、AMQP、STOMP、MQTT 和 WebSocket,Amazon 提供了 Amazon MQ。这是一个针对 Apache ActiveMQ 和 RabbitMQ 的托管消息代理服务,可以更轻松地在云中设置和操作消息代理。

Amazon MQ 提供了两个托管代理部署连接选项:公共代理和私有代理。公共代理接收互联网可访问的 IP 地址,而私人代理仅从其专有网络子网中的相应 CIDR 范围接收私有 IP 地址。在某些情况下,出于安全目的,客户可能更愿意将代理放置在私有子网中,但也允许通过持久公共端点(例如其公司域的子域,如 “mq”)访问代理。

这里介绍了如何在私有 VPC 中,通过 Route53、NLB、ACM 相结合,通过 SSL 的方式访问自定义域名指向的 RabbitMQ 代理。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!



  1. 部署在 EC2/ECS/EKS 中的客户端服务尝试使用自定义域名连接 RabbitMQ Broker.

  2. 通过 Route53 将自定义域名解析到 NLB 的 DNS domain。

  3. 客户端使用 Amazon 证书管理器(ACM)提供的安全套接字层(SSL)证书创建到 NLB 的传输层安全(HTTPS/AMQPS)连接。

  4. NLB 从目标组中选择一个健康的端点,并创建一个单独的 SSL 连接。这在客户端和代理之间提供了安全的端到端 SSL 加密消息传递。

一、前提

要构建此架构,首先您需要一个 VPC,每个可用区域一个 Private Subnet,以及一个用于堡垒主机的 Public subnet(如果需要)。

本演示 VPC 使用 10.1.0.0/16 CIDR 范围。此外,您必须为您的 MQ Broker 创建自定义安全组。您必须设置此安全组,以允许从网络负载平衡器到 RabbitMQ Broker 的流量。安全组需要开放 5671(AMQP 端口)和 443(web 控制台端口)的流量。



二、创建 AmazonMQ Broker

设置网络子网后,添加 Amazon MQ 代理:

  1. 在 Amazon MQ 主页上选择创建代理。

  2. 切换 RabbitMQ 旁边的单选按钮,然后选择 Next。

  3. 选择单实例代理(用于开发环境)或集群部署(用于生产环境)的部署模式。

  4. 在配置设置中,指定代理名称和实例类型,以及管理员用户的用户名和密码。



  1. 确认代理引擎版本为 9.16 或更高版本,并将访问类型设置为私有访问。

  2. 选择您的 VPC 和子网,并选择刚创建的安全组。

  3. 按需选择版本升级及维护窗口,选择下一步并创建 Broker。



三、获取 RabbitMQ Broker 的 IP 地址

在配置 NLB 的目标组之前,必须获取 Broker 的 IP 地址。Amazon MQ 在每个子网中创建一个 VPC 端点,其静态地址在删除代理之前不会更改。

  1. 导航到 Broker 的详细信息页面并滚动到连接面板。

  2. 查找 EndPoint 的完整域名,它的格式类似于 broker-id.mq.region.amazonaws.com

  3. 在本地客户端上打开命令终端。

  4. 使用 host(Linux)或 nslookup(Windows)命令检索 “A” 记录值。

  5. 为以后的 NLB 配置步骤记录这些值。



四、配置负载平衡器的目标组

下一步配置负载平衡器的目标组。您使用代理的私有 IP 地址作为 NLB 的目标。创建一个目标组,将目标类型选择为 IP,并确保为每个所需的端口以及您的代理所在的专有网络选择 TLS 协议。




五、创建网络负载平衡器

创建一个网络负载平衡器。端口 5671(AMQP)上有 TLS 侦听器,将流量路由到代理的 VPC 和 Subnet。您选择创建的目标组,为 NLB 和代理之间的连接选择 TLS。为了允许客户端安全地连接到 NLB,请为在 Route53 中注册的子域选择一个 ACM 证书(例如“mq.yourdomain.com”)。

要了解 ACM 证书设置,请在此处阅读有关该过程的更多信息。确保 ACM 证书在与 NLB 相同的区域中设置,或者该证书未显示在下拉菜单中。





六、配置 Route53

最后,在 Route53 配置为在您选择的子域为 NLB 提供流量服务:

转到 Route53 托管区域并创建新的子域记录集,例如 mq.test.youdomain.com,它与您先前创建的 ACM 证书相匹配。

在“类型”字段中,选择 “A–IPv4 地址”,然后为别名选择“是”。这允许您选择 NLB 作为别名目标。

从 alias target 菜单中选择刚刚创建的 NLB 并保存记录集。



现在,调用方可以在 RabbitMQ 连接字符串中使用自定义域名。此功能改善了开发人员的体验,并在重建集群时降低了操作成本。由于您在 NLB 的目标组中添加了多个 VPC 端点(每个子网一个),因此该解决方案具有多 AZ 冗余。

七、使用 RabbitMQ 客户端进程进行测试

整个过程可以使用任何 RabbitMQ 客户端进程进行测试。一种方法是启动 Docker 官方镜像并与本地客户端连接。服务文档还提供了用于验证、发布和订阅 RabbitMQ 通道的示例代码。

要登录到代理的 RabbitMQ web 控制台,有三个选项。根据安全组规则,仅允许来自专有网络内部的流量流向代理:

  1. 使用从公司网络到专有网络的 VPN 连接。许多客户使用此选项,但对于快速测试,有一种更简单、更具成本效益的方法。

  2. 通过路由 53 子域连接到代理的 web 控制台,这需要在现有 NLB 上创建单独的 web 控制台端口侦听器(443),并为代理创建单独的 TLS 目标组。

  3. 使用 bastion 主机将流量代理到 web 控制台。



八、总结

在本文中,您将在私有子网中构建一个高可用的 Amazon MQ Broker。您可以通过将代理置于高度用可扩展的 NLB 之后来分层管理。并且通过 Route53 解析到 NLB 的方式,实现采用自定义域名 +SSL 的方式访问 Amazon MQ Broker。

本篇作者



孙权

Amazon ProServe Senior DevOps 顾问,致力于解决企业客户 DevOps 咨询和实施,在云原生 /DevOps/ 微服务框架/性能优化和加速研发效能领域有深入研究的热情



曹赫洋

Amazon 专业服务团队 DevOps 顾问。主要负责 DevSecOps 咨询和技术实施。在 DevSecOps 加速企业数字化转型方面领域拥有多年经验,对公有云、DevSecOps、基于云原生的微服务架构、敏捷加速研发效能等有深入的研究和热情。


文章来源:https://dev.amazoncloud.cn/column/article/6309bea3e0f88a79bcfae7f7?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=InfoQ

用户头像

还未添加个人签名 2019-09-17 加入

进入亚马逊云科技开发者网站,请锁定 https://dev.amazoncloud.cn 帮助开发者学习成长、交流,链接全球资源,助力开发者成功。

评论

发布
暂无评论
通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ_亚马逊云科技 (Amazon Web Services)_InfoQ写作社区