AWS 服务网格:App Mesh 迁移与 ECS Service Connect

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
ARN Amazon Resource Name AWS 资源名称,用于唯一标识资源
AWS Amazon Web Services 亚马逊云服务
AZ Availability Zone 可用区
CA Certificate Authority 证书颁发机构
CLI Command-Line Interface 命令行接口
CPU Central Processing Unit 中央处理器
DNS Domain Name System 域名系统
ECR Elastic Container Registry AWS 容器镜像仓库
ECS Elastic Container Service AWS 容器编排服务
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
HTTP Hypertext Transfer Protocol 超文本传输协议
JSON JavaScript Object Notation 一种结构化数据格式
KMS Key Management Service 密钥管理服务
SG Security Group 安全组
SPIFFE Secure Production Identity Framework for Everyone 分布式工作负载身份标准
TLS Transport Layer Security 传输层安全协议
VPC Virtual Private Cloud 虚拟私有云网络

2026-09-23 核对:AWS App Mesh 将于 2026-09-30 停止支持,新项目不再以它作为建设目标。AWS 公告

工作负载 路径 边界
EKS Istio / Linkerd 自行运营控制面、数据面与证书
ECS Service Connect 服务发现、代理通信、指标、可选 TLS;不是全部 Istio 能力
跨 VPC/账号服务入口 VPC Lattice / PrivateLink 不等于 Pod 级 mesh 与细粒度服务授权
存量 App Mesh 清点→并行新环境→验证→切流 不原地删除代理后期待流量自动恢复

1. 存量盘点和迁移关口#

set -euo pipefail
export AWS_REGION='REPLACE_REGION'
aws sts get-caller-identity
aws appmesh list-meshes --region "$AWS_REGION" > meshes.json
export MESH='REPLACE_EXISTING_MESH'
aws appmesh list-virtual-nodes --mesh-name "$MESH" > virtual-nodes.json
aws appmesh list-virtual-services --mesh-name "$MESH" > virtual-services.json
aws appmesh list-virtual-routers --mesh-name "$MESH" > virtual-routers.json
aws appmesh list-virtual-gateways --mesh-name "$MESH" > virtual-gateways.json

继续逐项 describe 并导出 router routes/gateway routes;整理真实调用拓扑、DNS、协议、超时重试、熔断、证书/SPIFFE、出口限制、跨账号和可观测标签。为每条规则写目标实现与验收用例,尤其不要把 Service Connect TLS 当作等价的应用级调用授权。EKS 在独立试点 namespace/新集群按 Istio 篇部署;禁止同 Pod 注入 App Mesh 和 Istio 两套流量拦截。

2. ECS 企业 Hands-on 前置#

使用独立预生产 ECS cluster,已有真实 orders-api 与调用方 orders-worker 服务,ECS deployment controller、awsvpc、私有子网、多 AZ、desiredCount≥2、应用探针和 CloudWatch 日志。App Mesh 迁移使用独立新服务,先从任务定义移除旧代理/依赖和 App Mesh 专属配置。

准备:Cloud Map namespace ARN;API task definition 的 HTTP 8080 portMapping 命名 orders-http,appProtocol=http;为代理留 CPU/内存。调用方任务必须也启用 Service Connect。SG 仅允许调用方任务到 API 代理监听端口,DNS、ECR、日志、Secrets 等出口可达。禁止把 namespace 当成安全隔离边界。

TLS 使用已 ACTIVE 的企业 AWS Private CA,带 AmazonECSManaged=true 标签;基础设施角色信任 ecs.amazonaws.com,按官方 Service Connect TLS managed policy及资源范围配置。执行者仅可 PassRole 该角色。CA、Secrets Manager、KMS 有费用;密钥策略/CA 权限由平台管理员预置并验收。TLS 前提、角色策略

3. 启用服务端,再启用调用方#

export CLUSTER='REPLACE_STAGING_CLUSTER'
export NS_ARN='REPLACE_CLOUDMAP_NAMESPACE_ARN'
export CA_ARN='REPLACE_ACTIVE_PRIVATE_CA_ARN'
export TLS_ROLE_ARN='REPLACE_ECS_INFRASTRUCTURE_ROLE_ARN'
export API_TASK_DEF='REPLACE_REVIEWED_TASK_DEFINITION_ARN_WITH_REVISION'
aws ecs describe-services --cluster "$CLUSTER" --services orders-api orders-worker > services-before.json
jq -n --arg ns "$NS_ARN" --arg ca "$CA_ARN" --arg role "$TLS_ROLE_ARN" --arg region "$AWS_REGION" '{enabled:true,namespace:$ns,services:[{portName:"orders-http",discoveryName:"orders-api",clientAliases:[{dnsName:"orders-api",port:8080}],tls:{issuerCertificateAuthority:{awsPcaAuthorityArn:$ca},roleArn:$role}}],logConfiguration:{logDriver:"awslogs",options:{"awslogs-group":"/ecs/service-connect","awslogs-region":$region,"awslogs-stream-prefix":"proxy"}}}' > sc-server.json

先创建 /ecs/service-connect 日志组并设置企业 retention/KMS;executionRole 可写该日志组。审核 JSON、CA 状态和代理端口后:

aws ecs update-service --cluster "$CLUSTER" --service orders-api --task-definition "$API_TASK_DEF" --deployment-configuration 'minimumHealthyPercent=100,maximumPercent=200,deploymentCircuitBreaker={enable=true,rollback=true}' --service-connect-configuration file://sc-server.json
aws ecs wait services-stable --cluster "$CLUSTER" --services orders-api
jq -n --arg ns "$NS_ARN" '{enabled:true,namespace:$ns}' > sc-client.json
aws ecs update-service --cluster "$CLUSTER" --service orders-worker --service-connect-configuration file://sc-client.json --force-new-deployment
aws ecs wait services-stable --cluster "$CLUSTER" --services orders-worker

调用方配置目标为 http://orders-api:8080,随新的任务 revision 发布;服务端先创建,调用方再重建,以获取新端点配置。应用到本地代理仍可为 HTTP,代理间按 TLS 配置加密;不能凭 URL 的 http 判断跨任务未加密。组件与部署顺序

4. 企业验收和回退#

使用真实 worker 创建/查询订单,核对 API 日志、代理连接/5xx/延迟、证书签发与轮换;测试错误用户权限仍被应用拒绝、未授权 SG 调用失败。停止一台 API task,连续业务不丢单;演练 CA/KMS 权限错误时部署失败与告警。services-stable 只是调度状态,不证明 TLS/业务通过。

流量切换采用独立旧/新业务入口与 分批发布,先合成租户→小比例→全量;需要加权路由时在已验证入口实现,不假设 Service Connect 提供 App Mesh 所有路由功能。

失败先切回旧入口,核对旧环境容量;再从 services-before.json 恢复调用方旧 taskDefinition/Service Connect 配置并滚动,随后恢复服务端。不要先停新服务端导致新客户端断连。App Mesh 退休后不能把它作为长期回退方案;提前完成替代环境演练,保留可独立恢复的镜像、配置和数据备份。

参考:CLI 配置、官方迁移指南。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭