如何将ECS服务注册为非默认端口的Network Load Balancer目标
问题根因
你直接将Ec2Service实例传入目标组的targets配置时,CDK默认会读取任务定义中首个容器的默认端口作为注册端口,不会采用你在addTargets中填写的port参数,因此两个目标组最终都指向了容器的80端口。
解决方案
调用ECS服务的loadBalancerTarget方法显式指定要绑定的容器名称和容器端口,就能实现不同目标组绑定不同容器端口的需求。
代码修改示例
首先确保你的代理任务定义中已经为容器声明了80和443两个端口映射,之后调整负载均衡监听器的配置即可:
// HTTP监听器配置保持逻辑,显式指定绑定容器80端口 loadbalancer.addListener('HTTPListener', { port: 80 }) .addTargets('HTTPTarget', { port: 80, targets: [ proxyService.loadBalancerTarget({ containerName: 'proxy', // 替换为你任务定义中代理容器的实际名称 containerPort: 80 }) ] }) // HTTPS监听器显式指定绑定容器443端口 loadbalancer.addListener('HTTPSListener', { port: 443, }) .addTargets('HTTPSTarget', { port: 443, targets: [ proxyService.loadBalancerTarget({ containerName: 'proxy', // 替换为你任务定义中代理容器的实际名称 containerPort: 443 }) ] })
配置验证
修改后重新部署,CDK生成的CloudFormation模板中两个目标组会分别带上对应的Port配置,ECS服务会自动将任务的对应端口注册到对应目标组,无需手动修改控制台配置。
内容的提问来源于stack exchange,提问作者m90
相关产品推荐
相关产品推荐

