亚马逊AWS官方博客
使用 Amazon VPC Lattice 简化服务间的连接、安全和监控 – 现已正式推出
在 AWS re:Invent 2022 中,我们介绍了 Amazon VPC Lattice 预览版,这是 Amazon Virtual Private Cloud(Amazon VPC)的一项新功能,可让您以一致的方式连接、保护和监控服务之间的通信。借助 VPC Lattice,您可以定义网络访问、流量管理和监控策略,以在实例、容器和无服务器应用程序之间连接计算服务。
今天,我很高兴地宣布 VPC Lattice 现已正式推出。与预览版相比,您可以使用如下新功能:
- 除了 VPC Lattice 自动生成的域名外,服务还可以使用自定义域名。使用 HTTPS 时,您可以配置与自定义域名匹配的 SSL/TLS 证书。
- 可以部署开源 AWS Gateway API 控制器,使用带有 Kubernetes 原生体验的 VPC Lattice。该工具使用 Kubernetes Gateway API 来连接多个 Kubernetes 集群的服务以及在 EC2 实例、容器和无服务器函数上运行的服务。
- 可以使用应用程序负载均衡器(ALB)或网络负载均衡器(NLB)作为服务的目标。
- IP 地址目标类型现在支持 IPv6 连接。
让我们看看其中一些新功能的实际使用。
使用 Amazon VPC Lattice 实现服务间的连接
在我之前介绍 VPC Lattice 的文章中,我展示了如何创建服务网络、关联多个 VPC 和服务,以及如何为 EC2 实例和 Lambda 函数配置目标组。在此文章中,我还展示了如何根据请求特征路由流量,以及如何使用加权路由。对于蓝/绿和金丝雀式部署或从一个计算平台迁移到另一个计算平台,加权路由均非常方便。
现在,让我们看看如何使用 VPC Lattice 实现电子商务应用程序服务的相互通信。为简单起见,我只考虑四种服务:
订单
服务,作为 Lambda 函数运行。库存
服务,作为 Amazon Elastic Container Service(Amazon ECS)部署在支持 IPv6 的双堆栈 VPC 中。配送
服务,作为 ECS 服务部署,并使用 ALB 向服务任务分配流量。付款
服务,在 EC2 实例上运行。
首先,我创建一个服务网络。订单
服务需要致电库存
服务(检查商品是否可供购买)、配送
服务(组织商品配送)和付款
服务(转账)。下图从服务网络的角度显示服务间的通信。
这些服务在不同的 AWS 账户和多个 VPC 中运行。VPC Lattice 可以处理跨越 VPC 边界设置连接和跨账户权限的复杂性,因此服务间的通信就像 HTTP/HTTPS 调用一样简单。
下图从实现的角度显示如何进行通信。
订单
服务在连接到 VPC 的 Lambda 函数中运行。由于图表中的所有 VPC 都与服务网络相关联,因此订单
服务能够调用其他服务(库存
、配送
和付款
),即使这些服务部署在不同的 AWS 账户和 IP 地址重叠的 VPC 中亦是如此。
使用网络负载均衡器(NLB)作为目标
库存
服务在双堆栈 VPC 中运行。它作为带有 NLB 的 ECS 服务部署,用于向服务中的任务分配流量。为了获取 NLB 的 IPv6 地址,我在 EC2 控制台中查找 NLB 使用的网络接口。
为库存
服务创建目标组时,在基本配置下,我选择 IP 地址作为目标类型。然后,我选择 IPv6 作为 IP 地址类型。
在下一步中,我输入 NLB 的 IPv6 地址作为目标。创建目标组后,运行状况检查会测试目标以查看其响应是否符合预期。
使用应用程序负载均衡器(ALB)作为目标
使用 ALB 作为目标甚至更容易操作。为配送
服务创建目标组时,在基本配置下,我选择新的应用程序负载均衡器目标类型。
我选择要在其中查找 ALB 的 VPC 并选择协议版本。
在下一步中,我选择立即注册,然后从下拉列表中选择 ALB。我使用目标组使用的默认端口。VPC Lattice 不为 ALB 提供额外的运行状况检查。但是,负载均衡器已经配置自己的运行状况检查。
为服务使用自定义域名
要调用这些服务,我使用自定义域名。例如,在 VPC 控制台中创建付款
服务时,我选择指定自定义域配置,输入自定义域名,然后为 HTTPS 侦听器选择 SSL/TLS 证书。自定义 SSL/TLS 证书下拉列表显示来自 AWS Certificate Manager(ACM)的可用证书。
保护服务间通信
现在已经创建目标组,让我们看看如何保护服务间的通信。为了实现零信任身份验证和授权,我使用 AWS Identity and Access Management(IAM)。创建服务时,我选择 AWS IAM 作为身份验证类型。
我选择仅允许经过身份验证的访问策略模板,因此服务请求需要使用签名版本 4 进行签名,这与 AWS API 使用的签名协议相同。通过这种方式,服务之间的请求由其 IAM 证书进行身份验证,并且我不必管理密钥来保护它们的通信。
或者,我可以更精确地使用身份验证策略,该策略仅提供对某些服务或服务特定 URL 路径的访问权限。例如,我可以将以下身份验证策略应用于订单
服务,为 Lambda 函数提供这些权限:
- 对
库存
服务/stock
URL 路径的只读访问权限(GET 方法)。 - 对
配送
服务/delivery
URL 路径的完全访问权限(任何 HTTP 方法)。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "<Order Service Lambda Function IAM Role ARN>"
},
"Action": "vpc-lattice-svcs:Invoke",
"Resource": "<Inventory Service ARN>/stock",
"Condition": {
"StringEquals": {
"vpc-lattice-svcs:RequestMethod": "GET"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "<Order Service Lambda Function IAM Role ARN>"
},
"Action": "vpc-lattice-svcs:Invoke",
"Resource": "<Delivery Service ARN>/delivery"
}
]
}
使用 VPC Lattice,我快速配置电子商务应用程序服务之间的通信,包括安全和监控。现在,我可以专注于业务逻辑,而不是管理服务之间的通信方式。
可用性和定价
Amazon VPC Lattice 现已在以下 AWS 区域推出:美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)和欧洲地区(爱尔兰)。
使用 VPC Lattice,您需要为服务预置时间、通过每项服务传输的数据量和请求数量付费。每小时前 300,000 个请求不收费,您只需为超过此阈值的请求付费。有关更多信息,请参阅 VPC Lattice 定价。
我们设计 VPC Lattice 的目的是允许随着时间的推移逐步加入更多团队。您组织中的每个团队都可以选择是否以及何时使用 VPC Lattice。其他应用程序可以使用 HTTP 和 HTTPS 等标准协议连接到 VPC Lattice 服务。通过使用 VPC Lattice,您可以专注于应用程序逻辑,通过对实例、容器和无服务器计算的一致支持来提高生产力和部署灵活性。
使用 VPC Lattice 简化连接、保护和监控服务的方式。
— Danilo