无需Route53,同一任务中ECS Services分离子域名访问方案咨询
解决方案说明
核心概念澄清
首先明确:ECS任务是单个运行的容器实例(或容器组),ECS服务则是负责任务部署、扩容、高可用的管理组件。无法在同一个ECS任务中部署两个ECS服务,你需要在同一个ECS集群下部署两个独立的ECS服务(MyService1和MyService2),每个服务对应专属的任务定义。
无需Route53的子域名路由方案(适配Cloudflare域名)
以下是适配Fargate环境、域名托管在Cloudflare的实现方案:
1. 为两个ECS服务配置负载均衡(两种可选方式)
选项A:双独立Application Load Balancer(ALB)
- 为MyService1创建一个ALB,配置80/443端口监听,将目标组指向MyService1的Fargate任务。
- 为MyService2创建另一个ALB,重复上述步骤关联MyService2的任务。
- 每个ALB会生成一个公网DNS地址。
选项B:共享单个ALB+主机头路由(成本更优)
- 创建一个ALB,配置HTTPS监听(推荐)。
- 添加两条主机头路由规则:
- 规则1:当请求主机头为
foo.example.com时,转发到MyService1的目标组。 - 规则2:当请求主机头为
bar.example.com时,转发到MyService2的目标组。
- 规则1:当请求主机头为
- 该ALB对应唯一的公网DNS地址。
2. Cloudflare子域名解析配置
登录Cloudflare域名管理后台,添加两条CNAME记录:
- 子域名
foo.example.com:指向对应ALB的公网DNS地址(选项A对应MyService1的ALB;选项B对应共享ALB)。 - 子域名
bar.example.com:指向对应ALB的公网DNS地址(选项A对应MyService2的ALB;选项B对应共享ALB)。 - 开启Cloudflare代理状态(橙色云朵图标),利用其CDN和安全防护能力。
3. CDK/TypeScript栈调整建议
基于你现有的CDK栈,需做以下修改:
- 为两个服务分别创建
TaskDefinition,各自配置对应容器镜像、环境变量等参数。 - 部署两个
FargateService,分别关联到对应的目标组。 - 若选共享ALB方案:
- 创建ALB并配置HTTPS监听(需使用Cloudflare托管的SSL证书,或AWS ACM证书并在Cloudflare做兼容配置)。
- 为每个服务创建独立的
ApplicationTargetGroup。 - 给ALB监听添加两条基于主机头的转发规则,分别指向对应目标组。
- 若选独立ALB方案:为每个服务单独创建ALB、监听和目标组。
关键注意事项
- SSL证书:确保持有
*.example.com或两个子域名的有效证书,配置ALB监听时使用对应证书。 - 安全组:配置ALB安全组允许Cloudflare官方IP段访问,ECS任务安全组允许ALB IP段访问对应端口。
- Fargate网络:使用
awsvpc网络模式,确保任务所在子网可被ALB访问(需配置子网路由表和NAT网关,满足任务公网访问需求)。
内容的提问来源于stack exchange,提问作者Coder1
相关产品推荐
相关产品推荐

