要解决这个问题,您可以使用AWS Elastic Load Balancer(ELB)来将流量路由到多个容器上的监听80端口。
以下是一个使用AWS Application Load Balancer(ALB)的示例,将流量路由到多个ECS容器上的监听80端口:
aws ecs create-cluster --cluster-name my-cluster
aws ecs register-task-definition \
--family my-task-definition \
--network-mode awsvpc \
--requires-compatibilities FARGATE \
--execution-role-arn ecsTaskExecutionRoleArn \
--container-definitions '[{
"name": "container-1",
"image": "your-container-1-image",
"portMappings": [{
"containerPort": 80,
"hostPort": 8080
}]
},
{
"name": "container-2",
"image": "your-container-2-image",
"portMappings": [{
"containerPort": 80,
"hostPort": 8081
}]
}]'
aws elbv2 create-load-balancer \
--name my-load-balancer \
--subnets subnet-1 subnet-2 \
--security-groups sg-1
aws elbv2 create-target-group \
--name my-target-group \
--protocol HTTP \
--port 80 \
--vpc-id your-vpc-id \
--target-type ip \
--health-check-protocol HTTP \
--health-check-path /health
aws elbv2 register-targets \
--target-group-arn target-group-arn \
--targets Id=your-container-instance-id1,Port=8080 Id=your-container-instance-id2,Port=8081
aws elbv2 create-listener \
--load-balancer-arn load-balancer-arn \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=target-group-arn
aws ecs create-service \
--cluster my-cluster \
--service-name my-service \
--task-definition my-task-definition \
--desired-count 2 \
--network-configuration "awsvpcConfiguration={subnets=[subnet-1,subnet-2],securityGroups=[sg-1],assignPublicIp=DISABLED}" \
--load-balancers "targetGroupArn=target-group-arn,containerName=container-1,containerPort=80"
通过这种方式,您可以将流量路由到多个容器上的监听80端口,并且这些容器可以被发现。请确保在任务定义和目标组中正确配置容器端口和主机端口。