亚马逊AWS官方博客

基于 Route53 实现 AWS PrivateLink 高可用架构

AWS PrivateLink 是一种技术,它允许您通过 AWS 网络在 Amazon VPC 和支持 AWS PrivateLink 的 AWS 服务或 VPC 端点服务之间进行私有连接。这种私有连接可以跨 VPC、跨账户和跨 AWS 区域,而无需通过公共互联网。

在实际的项目中,基于具体使用场景和可用性要求,可能有如下需求:

  • 可用性要求
  • 跨区域/跨账户访问
  • 流量负载

本文提出了一种 PrivateLink 高可用/负载均衡方案,通过 Route53 CNAME 配置多值应答或者权重路由的方式,将多个 PrivateLink 和后端服务组成高可用集群,以达成高可用/负载均衡的目标。

基于 PrivateLink EndpointService 配置多个 NLB 尝试

在实践中,很多客户发现,PrivateLink EndpointService 控制台面板中,提供了为同一个 EndpointService 关联多个 NLB 的功能:

在实际测试中,采用 EndpointService 挂载 2 个 NLB 后,客户端通过 privateLink 访问后端服务可以发现,当 privateLink 建立 connection 时,有以下特性:

  1. 建立 connection 的时刻,EndpointService 会随机选择多个 NLB 中其中一个建立连接。
  2. 建立连接之后,不管从任何一个客户端,不论多少次请求服务,都只会和第一次建立连接的 NLB 进行请求交互。这也可以证明,EndpointService 挂载多个 NLB 无法实现负载均衡能力。
  3. 在第一次建立连接的 NLB 出现可用性问题时,EndpointService 无法自动将流量路由至第二个 NLB。这也表明 EndpointService 挂载多个 NLB 无法自动实现 fail-over 高可用架构。

如果要实现 fail-over,可以通过 aws api 的方式 reject 掉 EndpointService 对于 endpoint 的 connection,然后在 nlb association 中删除有故障的 nlb id,然后重新 accept connection,从而实现基于脚本的 fail-over。

本文推荐的基于 Route53 的 PrivateLink 高可用方案

这张架构图描述了一个使用 AWS PrivateLink 服务访问内部服务的场景。主要组件如下:

在这个架构图中,客户端通过域名 api.example.com 访问内部服务。该域名可以在 AWS Route53 中配置一个 CNAME 记录,将其映射到 Endpoint Service 1 和 Endpoint Service 2 的 DNS 名称。

Route53 CNAME 记录支持两种模式:

  1. Multi-Value 模式:在该模式下,CNAME 记录可以关联多个值(即多个 Endpoint Service 的 DNS 名称)。Route53 会根据负载均衡策略,在这些值之间进行循环响应。这种模式适用于实现高可用性和负载均衡的场景。
  2. Weighted 模式:在该模式下,CNAME 记录可以为每个关联值设置一个权重。Route53 会根据这些权重值的比例,将流量分配到不同的 Endpoint Service。这种模式常用于蓝绿部署或渐进式发布新版本服务的场景。

通过利用 Route53 CNAME 记录的这些功能,结合 Endpoint Service 和 NLB,我们可以实现以下目标:

  • 高可用性:将流量分发到多个可用区的 NLB 实例,提高服务的可用性。
  • 负载均衡:根据 NLB 实例的容量,调整 CNAME 记录中每个值的权重,实现合理的负载分配。
  • 蓝绿部署:在发布新版本服务时,可以先将少量流量引导到新版本,经过验证后再逐步增加权重,实现平滑过渡。
  • 区域扩展:跨区域部署 NLB 实例,通过 CNAME 记录实现全球化负载均衡。

综合利用 PrivateLink、Endpoint Service、NLB 和 Route53 的这些功能,可以构建出高度可用、可扩展且易于管理的内部服务架构。

流程如下:

Actor 通过 api.example.com 发起对内部服务的请求。该请求首先进入 VPC1,然后通过 Endpoint 1 和 Endpoint 2 与 VPC2 中的 Endpoint Service 1 和 Endpoint Service 2 建立私有连接。最后请求被转发到相应的 NLB1 或 NLB2 上的内部服务进行处理。

总结

总的来说,通过结合 AWS PrivateLink、Endpoint Service、Network Load Balancer 和 Route53 的多值应答及权重路由功能,我们可以构建出一个高度可用、可扩展且易于管理的内部服务架构,实现高可用性、负载均衡、蓝绿部署、跨区域扩展等多种需求,为企业提供一种安全、灵活、可靠的内部服务访问解决方案。

本篇作者

夏宁

亚马逊云科技解决方案架构师,曾就职惠普软件和声网,超过 10 年前端后端开发经验,主导过各类软件项目设计。熟悉移动互联网,音视频,云计算相关领域。

杨俊

亚马逊云科技资深解决方案架构师。加入亚马逊云科技之前,主要从事电商和零售相关的系统开发工作,具备丰富的零售行业经验和企业上云实践经验。