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

国产化先锋
• 阅读 1429

引言:

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

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

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

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

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

通过自定义域名 + SSL 的方式访问 Amazon MQ for 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控制台端口)的流量。

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

二、创建 AmazonMQ Broker

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

  1. 在 Amazon MQ 主页上选择创建代理。
  2. 切换 RabbitMQ 旁边的单选按钮,然后选择 Next。
  3. 选择单实例代理(用于开发环境)或集群部署(用于生产环境)的部署模式。
  4. 在配置设置中,指定代理名称和实例类型,以及管理员用户的用户名和密码。

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

  1. 确认代理引擎版本为9.16或更高版本,并将访问类型设置为私有访问。
  2. 选择您的 VPC 和子网,并选择刚创建的安全组。
  3. 按需选择版本升级及维护窗口,选择下一步并创建 Broker。

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

三、获取 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 配置步骤记录这些值。

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

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

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

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

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

五、创建网络负载平衡器

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

要了解 ACM 证书设置,请在此处阅读有关该过程的更多信息。确保 ACM 证书在与 NLB 相同的区域中设置,或者该证书未显示在下拉菜单中。
通过自定义域名 + SSL 的方式访问 Amazon MQ for RabbitMQ

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

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

六、配置 Route53

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

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

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

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

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

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

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

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

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

  1. 使用从公司网络到专有网络的VPN连接。许多客户使用此选项,但对于快速测试,有一种更简单、更具成本效益的方法。
  2. 通过路由 53 子域连接到代理的 web 控制台,这需要在现有 NLB 上创建单独的 web 控制台端口侦听器(443),并为代理创建单独的 TLS 目标组。
  3. 使用 bastion 主机将流量代理到 web 控制台。

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

八、总结

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

本篇作者

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

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

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

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

文章来源:https://dev.amazoncloud.cn/column/article/6309bea3e0f88a79bcf...

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MQ应用场景
MQ常见应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋,日志处理和消息通讯四个场景。异步处理场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种1.串行的方式;2.并行方式。(1)串行方式:将注册信息写入数据库(https://www.oschina.net/ac
Stella981 Stella981
3年前
Spring Boot(七):RabbitMQ 详解
一、RabbitMQ简介RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件在互联网公司的使用中越来越多,消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的
Stella981 Stella981
3年前
RabbitMQ 消息中间件搭建详解
1.RabbitMQ简介消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包
Stella981 Stella981
3年前
Message Queue消息队列基本原理
消息队列基本原理📦本文已归档到:「blog」消息队列(MessageQueue,简称MQ)技术是分布式应用间交换信息的一种技术。消息队列主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。注意:_为了简便,下文中除了文章标
Stella981 Stella981
3年前
RabbitMQ基础概念详细介绍
RabbitMQ简介AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。R
Stella981 Stella981
3年前
2020Kafka最新最全面试题!
1、请说明什么是ApacheKafka?ApacheKafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和可复制的提交日志服务。2、说说Kafka的使用场景?①异步处理②应用解耦③流量削峰④日志处理⑤消息通讯等。3、使用Kafka有什么优点和缺点?优点:①支持跨数据中心的消息复制;②单
Stella981 Stella981
3年前
Spring Boot(十三)RabbitMQ安装与集成
一、前言RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:MessageQueue中文的意思是消息队列。<!more1.1使用场景削峰填谷:用于应对间歇性流量提升对于系统的“破坏”,比如秒杀活动,可以把请求先发送到消息
专为小白打造—Kafka一篇文章从入门到入土 | 京东云技术团队
一、什么是KafkaMQ消息队列作为最常用的中间件之一,其主要特性有:解耦、异步、限流/削峰。Kafka和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时,Kafka还提供了大多数消息系
国产化先锋
国产化先锋
Lv1
路是一直都在的,是你会不会选择而已。
文章
3
粉丝
0
获赞
0