使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon ECS 上私下访问容器应用程序 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon ECS 上私下访问容器应用程序

由 Kirankumar Chandrashekar (AWS)创建

环境:生产

技术:容器和微服务;网络;安全、身份、合规;Web 和移动应用程序

工作负载:所有其他工作负载

Amazon Web Services:Amazon EC2;Amazon EC2 Auto Scaling;Amazon EC2 Container Registry;Amazon EFS;Amazon RDS;Amazon VPC;Amazon ECS;弹性负载均衡(ELB);AWS Lambda

此模式描述了如何在网络负载均衡器后面的亚马逊弹性容器服务 (Amazon ECS) 上私下托管 Docker 容器应用程序,以及如何使用 AWS 访问该应用程序。 PrivateLink然后,您便可以使用专用网络安全地访问 Amazon Web Services (AWS) Cloud 上的服务。Amazon Relational Database Service (Amazon RDS) 为在具有高可用性(HA)的 Amazon ECS 上运行的应用程序关系数据库提供托管。如果应用程序需要持久性存储,请使用 Amazon Elastic File System (Amazon EFS)。

运行 Docker 应用程序的 Amazon ECS 服务在前端装有 Network Load Balancer,可以与虚拟私有云 (VPC) 终端节点相关联,以便通过 AWS PrivateLink 进行访问。然后,可以使用其他 VPC 的 VPC 端点来与其他 VPC 共享该 VPC 端点服务。 

您还可以使用 AWS Fargate 代替 Amazon EC2 自动扩缩组。有关更多信息,请参阅使用 AWS Fargate、AWS 和网络负载均衡器在 Amazon ECS PrivateLink 上私下访问容器应用程序。                         

先决条件

  • 一个有效的 Amazon Web Services account

  • 已在 Linux、macOS 或 Windows 上安装并配置 AWS 命令行界面(AWS CLI)版本 2

  • Docker,已在 Linux、macOS 或 Windows 上安装并配置

  • 在 Docker 上运行的应用程序

技术堆栈

  • Amazon CloudWatch

  • Amazon Elastic Compute Cloud (Amazon EC2)

  • Amazon EC2 Auto Scaling

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon ECS

  • Amazon RDS

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Lambda

  • AWS PrivateLink

  • AWS Secrets Manager

  • 应用程序负载均衡器

  • 网络负载均衡器

  • VPC

自动化和扩展

  • Amazon EC2 - Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services Cloud 中提供可扩展的计算容量。

  • Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling 帮助您确保您拥有正确数量的 Amazon EC2 实例用于处理应用程序负载。

  • Amazon ECS - Amazon Elastic Container Service (Amazon ECS)是一项高度可扩展的快速容器管理服务,可帮助轻松运行、停止和管理集群上的容器。

  • Amazon ECR - Amazon Elastic Container Registry (Amazon ECR) 是一项安全、可靠且可扩展的 AWS 托管容器映像注册表服务。

  • Amazon EFS - Amazon Elastic File System (Amazon EFS)可提供简单、可扩展、完全托管的弹性 NFS 文件系统,以便与 Amazon Web Services Cloud 服务和本地资源配合使用。

  • AWS Lambda - Lambda 是一项计算服务,使您无需预调配或管理服务器即可运行代码。

  • Amazon RDS – Amazon Relational Database Service (Amazon RDS) 是一项 Web 服务,使用户能够在 Amazon Web Services Cloud 中轻松设置、操作和扩展关系数据库。

  • Amazon S3 – Amazon Simple Storage Service (Amazon S3) 是一项面向互联网的存储服务。该服务旨在降低开发人员进行网络规模级计算的难度。

  • AWS Secrets Manager - Secrets Manager 允许您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 的 API 调用,并以编程方式检索密钥。

  • Amazon VPC - Amazon Virtual Private Cloud (Amazon VPC)可助您将 AWS 资源启动到您已定义的虚拟网络中。

  • 弹性负载均衡器 - 弹性负载均衡器可在多个可用区中的多个目标(如 Amazon EC2 实例、容器和 IP 地址)之间分配传入的应用程序或网络流量。

  • Docker - Docker 允许开发人员打包、交付和运行任何应用程序,并将其作为轻量、便携且自给自足的容器。

任务描述所需技能
创建 VPC。
  1. 登录 Amazon Web Services Management Console,打开 Amazon VPC 控制台。选择创建 VPC,然后选择 VPC 及其他。 

  2. 输入 VPC 的名称,然后选择适当的 CIDR 块范围。 

  3. 指定两个可用区、两个公有子网、四个私有子网。两个私有子网用于 Amazon ECS 任务,两个私有子网用于 Amazon RDS 数据库。

  4. 为每个可用区指定一个 NAT 网关。 

  5. 选择创建 VPC

云管理员
任务描述所需技能
创建网络负载均衡器。
  1. 打开 Amazon EC2 控制台,然后选择包含您的 VPC 的 Amazon Web Services Region。 

  2. 负载均衡下方选择负载均衡器,然后选择创建负载均衡器。 

  3. 选择网络负载均衡器,然后选择创建。 

  4. 配置负载均衡器页面上,配置您的网络负载均衡器和侦听器。重要提示:请务必将网络负载均衡器的模式选择为内部。 

  5. 选择适用的安全设置,配置安全组和目标组。在配置路由部分中选择实例IP 作为目标类型。确保您没有注册目标。 

  6. 在配置完所有设置后,选择下一步:查看,然后选择创建

云管理员
创建应用程序负载均衡器。
  1. 在 Amazon EC2 控制台上,选择包含您的 VPC 的同一区域。

  2. 负载均衡下方选择负载均衡器,然后选择创建负载均衡器

  3. 选择应用程序负载均衡器,然后选择创建。 

  4. 配置应用程序负载均衡器及其侦听器。重要提示:请务必将应用程序负载均衡器的模式选择为内部。 

  5. 选择适用的安全设置,配置安全组和目标组。在配置路由部分中选择实例IP 作为目标类型。确保您没有注册目标。 

  6. 在配置完所有设置后,选择下一步:查看,然后选择创建

云管理员
任务描述所需技能
创建 Amazon EFS 文件系统。
  1. 打开 Amazon EFS 控制台,然后选择创建文件系统。 

  2. 创建文件系统对话框中,输入文件系统名称,然后选择您的 VPC。 

  3. 选择创建以创建文件系统。 

  4. 设置并配置您的 Amazon EFS 文件系统。

云管理员
子网的挂载目标。
  1. 返回 Amazon EFS 控制台,然后选择文件系统文件系统页面会显示您账户中的 Amazon EFS 文件系统。 

  2. 选择您创建的文件系统,然后选择管理以显示可用区。要添加挂载目标,请选择添加挂载目标,然后添加您创建的四个私有子网。

云管理员
验证子网是否已挂载为目标。
  1. 在 Amazon EFS 控制台上,选择文件系统。 

  2. 选择 网络 以显示现有挂载目标的列表。确保这些子网包括您创建的四个子网。

云管理员
任务描述所需技能
创建 S3 存储桶。

打开 Amazon S3 控制台并创建一个 S3 存储桶以存储应用程序的静态资产(如有需要)。

云管理员
任务描述所需技能
创建 AWS KMS 密钥以加密 Secrets Manager 密钥。

打开 AWS Key Management Service (AWS KMS)控制台并创建 KMS 密钥。

云管理员
创建 Secrets Manager 密钥以存储 Amazon RDS 密码。
  1. 打开 AWS Secrets Manager 控制台,选择存储新密钥以创建一个新密钥。 

  2. 选择您创建的 KMS 密钥,并存储您的新密钥。

云管理员
任务描述所需技能
创建数据库子网组。
  1. 打开 Amazon RDS 控制台,然后选择子网组。 

  2. 选择创建数据库子网组,然后输入数据库子网组的名称和描述。 

  3. 选择您之前创建的 VPC,然后选择可用区和子网。然后选择创建

云管理员
创建 Amazon RDS 实例。

在私有子网中创建和配置 Amazon RDS 实例。确保已启用多可用区以实现高可用性(HA)。

云管理员
将数据载入 Amazon RDS 实例。

将应用程序所需的关系数据加载到 Amazon RDS 实例中。此流程将根据应用程序的需求以及数据库架构的定义和设计方式而有所不同。

云管理员、数据库管理员
任务描述所需技能
创建 ECS 集群。
  1. 打开 Amazon ECS 控制台并选择集群

  2. 选择创建集群,然后根据所需规范设置 ECS 集群。

云管理员
创建 Docker 映像

按照相关资源部分中的说明创建 Docker 映像。

云管理员
创建 Amazon ECR 存储库。
  1. 在 Amazon ECR 控制台中选择存储库。 

  2. 选择创建存储库,然后输入存储库的唯一名称。 

  3. 根据您的规范配置存储库,包括 AWS KMS 加密(如有需要)。

云管理员、 DevOps 工程师
对您的 Amazon ECR 注册表进行 Docker CLI 身份验证。

要对 Amazon ECR 存储库的 Docker 客户端进行身份验证,请在 AWS CLI 中运行 “aws ecr get-login-password 命令。

云管理员
推送 Docker 映像至 Amazon ECR 存储库
  1. 确定要推送的 Docker 映像,然后在 AWS CLI 中运行 docker images命令。 

  2. 使用 Amazon ECR 注册表、存储库和可选映像标签名称组合标记您的映像。 

  3. 运行 docker push命令推送 Docker 映像。 

  4. 对所有需要的映像重复上述步骤。

云管理员
创建 Amazon ECS 任务定义。

需要任务定义才能在 Amazon ECS 中运行 Docker 容器。 

  1. 返回 Amazon ECS 控制台,选择任务定义,然后选择创建新任务定义。 

  2. 选择兼容性页面上,选择您的任务应使用的启动类型,然后选择下一步

有关设置任务定义的帮助,请参阅相关资源部分中的“创建任务定义”。重要提示:请务必提供您推送至 Amazon ECR 的 Docker 映像。

云管理员
创建 Amazon ECS 服务

使用您之前创建的 ECS 集群创建 Amazon ECS 服务。确保选择 Amazon EC2 作为启动类型,然后选择在上一步中创建的任务定义以及应用程序负载均衡器的目标组。

云管理员
任务描述所需技能
创建启动配置。

打开 Amazon EC2 控制台,然后创建启动配置。确保用户数据中包含允许 EC2 实例加入所需 ECS 集群的代码。有关所需代码的示例,请参阅相关资源部分。

云管理员
创建 Amazon EC2 自动扩缩组

返回 Amazon EC2 控制台,在自动扩缩下方选择自动扩缩组。设置 Amazon EC2 自动扩缩组 请确保您选择了之前创建的私有子网和启动配置。

云管理员
任务描述所需技能
设置 AWS 终 PrivateLink 端节点。
  1. 在 Amazon VPC 控制台上,创建 AWS PrivateLink 终端节点。 

  2. 将此端点与网络负载均衡器相关联,使客户可私密使用 Amazon ECS 上托管的应用程序。 

有关更多信息,请参阅相关资源部分。

云管理员
任务描述所需技能
创建 VPC 端点。

为您之前创建的 AWS 终端 PrivateLink 节点创建 VPC 终端节点。VPC 终端节点完全限定域名 (FQDN) 将指向 AWS PrivateLink 终端节点 FQDN。这将创建一个 DNS 端点可以访问的 VPC 端点服务的弹性网络接口。

云管理员
任务描述所需技能
创建 Lambda 函数。

在 AWS Lambda 控制台上,创建 Lambda 函数以将应用程序负载均衡器 IP 地址更新为网络负载均衡器的目标。有关这方面的更多信息,请参阅相关资源部分中的博客文章“为应用程序负载均衡器使用静态 IP 地址”。

应用程序开发人员

创建负载均衡器:

创建 Amazon EFS 文件系统:

创建 S3 存储桶:

创建 Secrets Manager 密钥:

创建 Amazon RDS 实例:

创建 Amazon ECS 组件:

Amazon EC2 自动扩缩组:

设置 AWS PrivateLink:

创建 VPC 端点

创建 Lambda 函数

其他资源: