有效的 CoreOS 多租户场景?

有效的 CoreOS 多租户场景?

我目前正在研究使用 CoreOS 的场景。这可能不是最佳用例。但如果它有效,我希望能得到一个指示。由于我才刚刚开始掌握 CoreOS,我希望我的“用例”没有完全偏离。

想象一个多租户应用程序,其中每个租户都应该有自己的运行时环境。我们以在 Node.js 和 PostgreSQL 上运行的 Web 应用程序为例,用于数据存储。每个租户环境将在各自的容器中在 CoreOS 上运行。数据持久性暂时不考虑。对我来说,目前更多的是考虑一般的可行性。

那么为什么是 CoreOS?

目前我尝试坚持每个租户独立环境的想法。为了优化每个硬件主机的数据库和 Web 服务器实例密度,我认为 CoreOS 可能是替代“传统”虚拟化的正确选择。

另一个原因是,很多租户可能只需要一个小型数据库实例和一个小型 Web 服务器。但其他租户可能需要一些不断扩展的部署。其他租户可能需要在突发时段临时扩展。CoreOS 听起来也非常适合这里。

另一方面,必须有一个可扩展的消息传递基础架构 (RabbitMQ) 来处理大量消息。此基础架构将由所有租户使用,并且最好能够动态扩展。可能还会有一个“待扩展”的 Elasticsearch 基础架构。通过我当前的“CoreOS for Everything 护目镜”来看,这似乎也非常合适。

如果整个场景通常有效,我目前无法看到如何将一般可用网站的流量路由到不同的租户容器。

假设应用程序在 app.greatthing.tld 上运行。用户可以登录,并应看到为其租户提供服务的应用程序。这是 socketplane 和/或 flannel 可以解决的问题吗?或者如何通过正确的容器为租户提供服务?我认为这是一种普遍问题。但至少在 CoreOS 容器化环境中,我完全看不出如何处理这个问题。

答案1

听起来你的主要问题是路由。你需要配置某种路由层,它是集群的入口点,读取主机头并将流量转发到适当的容器。一种常见的方法是在容器中运行 confd + nginx。

第二部分是让后端容器“宣布”自己,也就是在它们处于活动状态并通过健康检查时在 etcd 中写入一些数据。这允许您在部署新版本、扩展等时移动后端。

那么如何部署呢?首先,查看集群架构doc。我会选取您机器的子集,并将它们放置在指向在 80/443 上运行的路由容器的云 LB 后面(或执行循环 DNS)。然后,这些容器将流量转发到适当的后端。

如果您只是存储要连接的后端的 IP /端口组合,则无需使用 flannel 或其他网络项目。

相关内容