适用于 Amazon ECS 蓝绿部署的 Service Connect 资源 - Amazon Elastic Container Service

适用于 Amazon ECS 蓝绿部署的 Service Connect 资源

使用 Service Connect 进行蓝绿部署时,需要配置特定组件,以便在蓝色服务修订和绿色服务修订之间启用正确的流量路由。本节将介绍所需组件及其配置。

架构概述

Service Connect 通过自动注入到 Amazon ECS 任务中的托管附加代理,构建了服务发现和服务网格功能。这些代理会处理路由决策、重试和指标收集,而 AWS Cloud Map 则负责提供服务注册表后端。部署已启用 Service Connect 的服务时,该服务会在 AWS Cloud Map 中自行进行注册,客户端服务会通过命名空间发现它。

在标准的 Service Connect 实现中,客户端服务会连接到逻辑服务名称,附加代理则负责处理流向实际服务实例的路由。在蓝绿部署中,此模型会扩展为包含通过 testTrafficRules 配置实现的测试流量路由。

在蓝绿部署期间,以下关键组件协同工作:

  • Service Connect 代理:服务之间的所有流量均通过 Service Connect 代理传递,该代理会根据配置做出路由决策。

  • AWS Cloud Map 注册:蓝色部署和绿色部署都注册到 AWS Cloud Map,但绿色部署最初注册为“测试”端点。

  • 测试流量路由:Service Connect 配置中的 testTrafficRules 决定了如何识别测试流量并将其路由到绿色部署。这是通过基于标头的路由实现的,其中请求中的特定 HTTP 标头会将流量定向到测试修订。默认情况下,如果未指定自定义规则,Service Connect 会为基于 HTTP 的协议识别 x-amzn-ecs-blue-green-test 标头。

  • 客户端配置:命名空间中的所有客户端都会自动接收生产和测试路由,但只有与测试规则相匹配的请求才会发送到绿色部署。

这种方法的强大之处在于它处理了迁移期间服务发现的复杂性。随着流量从蓝色部署转移到绿色部署,所有连接和发现机制都会自动更新。无需更新 DNS 记录、重新配置负载均衡器或单独部署服务发现更改,因为服务网格可以处理这一切任务。

流量路由和测试

Service Connect 可为蓝绿部署提供高级流量路由功能,包括基于标头的路由和用于测试场景的客户端别名配置。

测试流量标头规则

在蓝绿部署期间,可以配置测试流量标头规则,将特定请求路由到绿色(新)服务修订以进行测试。如此一来,便可在完成部署之前使用受控流量验证新版本。

Service Connect 使用基于标头的路由来识别测试流量。默认情况下,如果未指定自定义规则,Service Connect 会为基于 HTTP 的协议识别 x-amzn-ecs-blue-green-test 标头。当请求中存在此标头时,Service Connect 代理会自动将请求路由到绿色部署进行测试。

测试流量标头规则可用于:

  • 将带有特定标头的请求路由到绿色服务修订

  • 使用一部分流量测试新功能

  • 在完全割接流量之前验证服务行为

  • 实施金丝雀测试策略

  • 在类似生产的环境中执行集成测试

基于标头的路由机制可与现有的应用程序架构无缝配合。客户端服务无需了解蓝绿部署过程,只需在发送测试请求时包含相应的标头,Service Connect 代理会自动处理路由逻辑。

有关如何配置测试流量标头规则的信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectTestTrafficHeaderRules

标头匹配规则

标头匹配规则定义了蓝绿部署期间路由测试流量的标准。可以配置多个匹配条件来精确控制将哪些请求路由到绿色服务修订。

标头匹配支持:

  • 标头值精确匹配

  • 标头存在性检查

  • 基于模式的匹配

  • 多个标头组合

使用案例示例包括将带有特定用户代理字符串、API 版本或功能标志的请求路由到绿色服务进行测试。

有关标头匹配配置的更多信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectTestTrafficHeaderMatchRules

蓝绿部署的客户端别名

客户端别名为蓝绿部署期间的服务提供了稳定的 DNS 端点。它们可在蓝色服务修订于绿色服务修订之间实现无缝的流量路由,而无需客户端应用程序更改其连接端点。

蓝绿部署期间,客户端别名需满足以下条件:

  • 为客户端连接保持一致的 DNS 名称

  • 支持服务修订之间的自动流量切换

  • 支持渐进式流量迁移策略

  • 通过将流量重定向到蓝色修订来提供回滚功能

可以为不同的端口或协议配置多个客户端别名,允许复杂的服务架构在部署期间保持连接。

有关客户端别名配置的更多信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectClientAlias

流量路由的最佳实践

使用 Service Connect 实施蓝绿部署的流量路由时,请考虑以下最佳实践:

  • 从基于标头的测试开始:在切换所有流量之前,使用测试流量标头规则通过受控流量验证绿色服务。

  • 配置运行状况检查:确保蓝色服务和绿色服务都配置了适当的运行状况检查,防止将流量路由到运行状况不佳的实例。

  • 监控服务指标:在部署期间跟踪两个服务修订的关键性能指标,以便尽早发现问题。

  • 规划回滚策略:配置客户端别名和路由规则,以便在检测到问题时能够快速回滚到蓝色服务。

  • 测试标头匹配逻辑:在将标头匹配规则应用于生产部署之前,先在非生产环境中对其进行验证。

Service Connect 蓝绿部署工作流

了解 Service Connect 如何管理蓝绿部署过程有助于有效实施部署并进行问题排查。以下工作流展示了不同组件在部署的每个阶段的交互方式。

部署阶段

Service Connect 蓝绿部署会经历几个不同的阶段:

  1. 初始状态:蓝色服务处理 100% 的生产流量。命名空间中的所有客户端服务都通过 Service Connect 中配置的逻辑服务名称连接到蓝色服务。

  2. 绿色服务注册:绿色部署启动后,将在 AWS Cloud Map 中注册为“测试”端点。客户端服务中的 Service Connect 代理会自动接收生产和测试路由配置。

  3. 测试流量路由:包含测试流量标头(例如 x-amzn-ecs-blue-green-test)的请求由 Service Connect 代理自动路由到绿色服务。生产流量继续流向蓝色服务。

  4. 流量转移准备:成功测试后,部署过程准备进行生产流量转移。蓝色服务和绿色服务均保持注册状态且运行正常。

  5. 生产流量转移:Service Connect 配置更新为将生产流量路由到绿色服务。无需更新客户端服务或更改 DNS 即可自动执行此操作。

  6. 烘焙时间段:生产流量转移后,蓝色服务修订和绿色服务修订同时运行的持续时间。

  7. 蓝色服务注销:成功进行流量转移并验证后,蓝色服务从 AWS Cloud Map 中注销并终止,从而完成部署。

Service Connect 代理行为

Service Connect 代理在管理蓝绿部署期间的流量方面起着至关重要的作用。了解其行为有助于设计有效的测试和部署策略。

蓝绿部署期间的关键代理行为:

  • 自动路由发现:代理自动从 AWS Cloud Map 发现生产和测试路由,无需重新启动应用程序或更改配置。

  • 基于标头的路由:代理检查传入的请求标头,并根据配置的测试流量规则将流量路由到相应的服务修订。

  • 运行状况检查集成:代理仅将流量路由到运行正常的服务实例,自动将运行状况不佳的任务从路由池中排除。

  • 重试和断路:代理提供内置的重试逻辑和断路功能,可提高部署期间的恢复能力。

  • 指标收集:代理收集蓝色服务和绿色服务的详细指标,以便在部署期间进行全面监控。

服务发现更新

使用 Service Connect 进行蓝绿部署的关键优势之一是自动处理服务发现更新。传统的蓝绿部署通常需要复杂的 DNS 更新或负载均衡器重新配置,但 Service Connect 可以透明地管理这些更改。

部署期间,Service Connect 会处理:

  • 命名空间更新:Service Connect 命名空间自动包含蓝色服务端点和绿色服务端点,并带有相应的路由规则。

  • 客户端配置:命名空间中的所有客户端服务均自动接收更新的路由信息,无需重新启动或重新部署。

  • 逐步过渡:服务发现更新会逐渐安全地进行,确保不会中断正在进行的请求。

  • 回滚支持:如果需要回滚,Service Connect 可以快速恢复服务发现配置,将流量路由回蓝色服务。