引言:
一般為了解決應用解耦,非同步處理,流量削峰等問題,實現高效能,高可用,可伸縮和最終一致性的架構;我們會引入訊息佇列中介軟體來完善架構設計。
對於需要訊息傳遞協議的應用程式,包括 JMS、NMS、AMQP、STOMP、MQTT 和 WebSocket,Amazon 提供了 Amazon MQ。這是一個針對 Apache ActiveMQ 和 RabbitMQ 的託管訊息代理服務,可以更輕鬆地在雲中設定和操作訊息代理。
Amazon MQ 提供了兩個託管代理部署連線選項:公共代理和私有代理。公共代理接收網際網路可訪問的 IP 地址,而私人代理僅從其專有網路子網中的相應 CIDR 範圍接收私有 IP 地址。在某些情況下,出於安全目的,客戶可能更願意將代理放置在私有子網中,但也允許透過持久公共端點(例如其公司域的子域,如 “mq”)訪問代理。
這裡介紹瞭如何在私有 VPC 中,透過 Route53、NLB、ACM 相結合,透過 SSL 的方式訪問自定義域名指向的 RabbitMQ 代理。
亞馬遜雲科技開發者社群為開發者們提供全球的開發技術資源。這裡有技術文件、開發案例、技術專欄、培訓影片、活動與競賽等。幫助中國開發者對接世界最前沿技術,觀點,和專案,並將中國優秀開發者或技術推薦給全球雲社群。如果你還沒有關注/收藏,看到這裡請一定不要匆匆劃過,點這裡讓它成為你的技術寶庫! |
- 部署在 EC2/ECS/EKS 中的客戶端服務嘗試使用自定義域名連線 RabbitMQ Broker.
- 透過 Route53 將自定義域名解析到 NLB 的 DNS domain。
- 客戶端使用 Amazon 證書管理器(ACM)提供的安全套接字層(SSL)證書建立到 NLB 的傳輸層安全(HTTPS/AMQPS)連線。
- 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 代理:
- 在 Amazon MQ 主頁上選擇建立代理。
- 切換 RabbitMQ 旁邊的單選按鈕,然後選擇 Next。
- 選擇單例項代理(用於開發環境)或叢集部署(用於生產環境)的部署模式。
- 在配置設定中,指定代理名稱和例項型別,以及管理員使用者的使用者名稱和密碼。
- 確認代理引擎版本為9.16或更高版本,並將訪問型別設定為私有訪問。
- 選擇您的 VPC 和子網,並選擇剛建立的安全組。
- 按需選擇版本升級及維護視窗,選擇下一步並建立 Broker。
三、獲取 RabbitMQ Broker 的 IP 地址
在配置 NLB 的目標組之前,必須獲取 Broker 的 IP 地址。Amazon MQ 在每個子網中建立一個 VPC 端點,其靜態地址在刪除代理之前不會更改。
- 導航到 Broker 的詳細資訊頁面並滾動到連線皮膚。
- 查詢 EndPoint 的完整域名,它的格式類似於 broker-id.mq.region.amazonaws.com
- 在本地客戶端上開啟命令終端。
- 使用 host(Linux)或 nslookup(Windows)命令檢索 “A” 記錄值。
- 為以後的 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 控制檯,有三個選項。根據安全組規則,僅允許來自專有網路內部的流量流向代理:
- 使用從公司網路到專有網路的VPN連線。許多客戶使用此選項,但對於快速測試,有一種更簡單、更具成本效益的方法。
- 透過路由 53 子域連線到代理的 web 控制檯,這需要在現有 NLB 上建立單獨的 web 控制檯埠偵聽器(443),併為代理建立單獨的 TLS 目標組。
- 使用 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/6309bea3e0f88a79bcf...