如何将AWS Fargate服务接入现有Network Load Balancer?
问题解答
1. 如何使用NLB为Fargate集群服务实现负载均衡
你遇到控制台仅显示ALB选项的问题,核心是几个关键配置没到位,按以下步骤排查和配置即可解决:
- 确认任务定义的网络模式:Fargate服务搭配NLB必须使用
awsvpc网络模式(这是Fargate的默认配置,无需修改,但要确保没手动改成其他模式)。 - 任务端口映射协议与目标组类型匹配:
- 任务定义中,容器端口映射的协议设为TCP或UDP(对应NLB的协议)。
- 你的现有NLB需要配置IP类型的目标组——因为Fargate任务运行在awsvpc模式下,每个任务都有独立的弹性网卡IP,无法使用实例类型的目标组。如果现有NLB的目标组是实例类型,需要创建新的IP类型目标组。
- 控制台创建服务时的正确操作:
在ECS控制台创建服务的负载均衡配置环节:- 先切换负载均衡类型为「网络负载均衡器」(不要默认选应用负载均衡器)。
- 选择你现有的NLB,然后关联对应的IP类型目标组,配置容器端口与NLB端口的映射规则。
如果控制台操作仍有问题,可以用AWS CLI直接创建服务,示例命令如下(替换占位符为你的实际资源信息):
aws ecs create-service \ --cluster your-cluster-name \ --service-name your-fargate-service \ --task-definition your-task-def:1 \ --desired-count 2 \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxx],securityGroups=[sg-xxxxxx],assignPublicIp=DISABLED}" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:region:account-id:targetgroup/your-nlb-target-group/xxxxxx,containerName=nginx-container,containerPort=80"
2. NLB流量路由至ALB再指向Fargate是否合理?
这种架构是合理的,但需根据你的业务场景判断是否必要:
- 适用场景:
- 现有NLB已有成熟的公网入口、TCP/UDP转发规则或第三方集成,不想改动NLB配置;
- 需要利用ALB的七层功能(比如路径路由、HTTPS终止、WAF集成、会话粘滞等),而NLB仅提供四层转发能力。
- 注意事项:
- 建议将ALB配置为内部负载均衡,避免公网直接暴露ALB,仅通过NLB对外提供服务;
- NLB的目标组需指向ALB的弹性网卡IP(目标类型选IP),或者直接转发到ALB的监听端口;
- 潜在缺点:多一层负载均衡会增加少量网络延迟,同时额外的ALB会带来一定的成本开销,且需要多维护一个组件。
内容的提问来源于stack exchange,提问作者Sarah Ganci
相关产品推荐
相关产品推荐

