amazon-web-services - 是否可以在同一个 AWS EC2 中运行多个 Web 实例?

标签 amazon-web-services docker amazon-ec2 amazon-ecs

背景

我已按照本教程 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-ec2.html ,编写了一个 docker compose 文件,创建了一个网站 A(由 4 个容器组成)并运行为我的客户的 1 个服务。

但是,现在我有另一个客户,我需要使用与上述类似的策略来托管另一个网站网站 B。

这是ECS/EC2当前运行的服务
enter image description here

这里是启动并运行的容器,现在为网站 A 提供服务
enter image description here

问题和疑虑

  • 网站 A 现在位于我唯一的集群下 EC2 中的一项服务中,我可以使用相同的 EC2 实例并运行网站 B(作为 EC2 的另一项服务)吗?
  • 如果是这样,如何管理端口/入站/出站流量?现在A网站已经占用了EC2实例的80、443、27017和3002端口用于入站流量,如果B网站的容器也运行在同一个EC2实例中,我还可以为B网站使用80、443、27017和3002端口吗?已阅读 ALB (Amazon Load Balancer) 的文档,似乎可以满足要求,我在正确的轨道上吗?
  • 而域名,通过路由53,我已经注册了一个域名www.websiteA.com来服务第一个网站,我还注册了另一个www.websiteB.com准备服务网站B,就我而言,我想我需要配置指向相同 EC2 IP 的新域 B?
  • 我在部署B网站的过程中,不想影响A网站的可用性,在部署B网站的容器的过程中可以维护吗?

  • 我想在开始部署网站B之前清除所有概念,感谢您的帮助,谢谢

    后续行动

    我决定使用 AWS 应用程序负载均衡器来解决我的问题,并进行以下配置设置。

    我首先研究负载均衡器
    enter image description here

    并配置如下
    enter image description here
    enter image description here
    enter image description here
    enter image description here

    我设置了一个负载均衡器,它使用传入端口 80 的 HTTP 协议(protocol)监听请求,只要有用户访问 Web 服务器(即:前端容器),监听器就会将该请求转发到目标组(即:http-port-80 -使用权)

    enter image description here
    这是包含注册目标(当前运行容器的我的 ec2 实例)的目标组(http-port-80-access),容器的主机端口是 32849,而相关的负载均衡器(web -access-load-balancer) 用于动态端口映射。

    enter image description here
    我还在默认规则之上又配置了 1 条规则,每当用户访问 websiteA 的 url 时,负载均衡器都会将请求转发到目标组(http-port-80-access)。

    万事俱备,健康测试也通过了。然后我使用了以下 ecs-cli compose service up将负载均衡器与服务连接起来的命令

    ecs-cli compose --file ./docker-compose-aws-prod.yml --cluster my-ecs-cluster-name --ecs-profile my-ecs-profile --cluster-config my-cluster --project-name my-project --ecs-params ./ecs-params.yml service up --target-group-arn arn:aws:elasticloadbalancing:us-east-2:xxxxxxxxx:targetgroup/http-port-80-access/xxxxxxxx --container-name frontend --container-port 80
    

    其中 frontend 是网站 A 的前端容器的服务名称

    但是,结果当我通过浏览器访问 www.websiteA.com 时,除了 ERR_CONNECTION_REFUSED,访问 www.websiteA.com:32849 确实可以访问,但这不是我想要的。

    我想知道我配置错误的部分

    最佳答案

    如果您将流量直接发送到实例,那么您将不得不在不同的端口上托管。您应该考虑使用 ALB,它允许您使用 dynamic ports in ECS . ALB 可以接受来自不同域的端口 80 和 443 的流量,并根据域等内容将流量路由到不同的容器。

    关于amazon-web-services - 是否可以在同一个 AWS EC2 中运行多个 Web 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230012/

    相关文章:

    java - 如何为运行Java应用程序的多docker容器AWS Elastic Beanstalk环境动态分配内存

    python - 从 ubuntu docker 镜像中删除 perl 会导致 pyodbc 失败

    amazon-web-services - 将 HTTPS/SSL 添加到指向 AWS 实例的域

    hadoop - 在java代码中连接到Cloudera HDFS,得到UnsatisfiedLinkError

    r - 无法在 AWS Ubuntu 实例上运行 Shiny 应用程序。 xdg-打开 : no method available for opening 'http://127.0.0.1:3572'

    docker - Kafka - Docker - 从主机向容器发送消息时出错(批处理已过期)

    mysql - 如何使 AWS RDS MySql 5.6 不区分大小写?

    node.js - 通过端口 80 上的 PM2 运行 Node 应用程序

    java - Maven 获取特定类

    amazon-web-services - AWS上的Elasticsearch-添加 token 生成器